相同代码跑出不同指标?先锁定这两个变量ML实验中最令人沮丧的场景之一:同样的代码、同样的数据,重新训练后模型指标却出现波动。这不是操作失误,而是pipeline中非确定性行为的必然结果。MLOps将可复现性列为核心原则,其目标很明确——相同输入必须始终产生相同输出。实现这一点需要同时控制两类变量:静态输入资产的完整追踪,以及动态随机行为的显式约束。第一层面:追踪所有输入资产可复现性的前提是知道"这次实验到底输入了什么"。一个ML模型的生成依赖三类核心资产,且任何一项的变更都会导致输出变化:资产类型追踪内容典型工具/方法代码数据预处理、模型架构、训练逻辑Git commit、Release版本(如v1.2.3)数据原始数据、特征工程后的数据集DVC、SQL版本列、Artifact存储模型与配置超参数、训练配置、环境依赖模型注册表、结构化配置文件代码版本化:Git已足够代码追踪相对成熟,Git的commit机制天然提供快照能力。Release标签(语义化版本vMajor.Minor.Patch)比纯commit hash更易读,适合标记可复现的里程碑节点。数据版本化:按场景选工具数据版本化是工程实践中的难点,需根据数据类型和规模选择方案: