跳转到内容

实验管理:追踪与复现

大模型训练是持续的实验流:换数据配比、改学习率、调并行配置——每天几十个实验。实验管理的任务只有一个:每次实验都要能精确回答"这次和上次差在哪、为什么"。没有系统化追踪的实验流,三个月后没人记得哪个结果是怎么来的。

一次实验的完整上下文(缺一样就无法复现):

类别内容
代码commit hash、diff(未提交的改动)、框架版本
配置完整 config(超参、并行配置、数据配方)的快照
数据数据集版本/hash(见数据管道)、tokenizer 版本
环境CUDA/驱动/硬件类型(跨硬件实验的必需项)
起点初始检查点(从哪个 checkpoint 继续的)
随机性种子(多次运行对比噪声)

核心原则:配置与代码是实验的身份——同一个实验跑两次(不同种子),结果差异是噪声基线;没有这个基线,一切对比都是猜。

主流工具(W&B、MLflow、TensorBoard、自建)的差异在协作与组织层,记录的内容比工具重要:

记录项频率用途
loss/学习率/梯度范数每 step训练健康(见容错)
每 token 吞吐/MFU每 step效率监控(见 MFU)
下游评测每 N step训练进度(见评测基础设施)
硬件指标(util/功耗)持续集群健康
配置 diff每次实验对比的基础

"配置 diff"是最有价值的记录:两个实验的差异 = 配置 diff——实验对比的自动化基础。

记录解决"知道",复现解决"重做"。复现的三个层次:

层次要求现实
统计复现同配置不同种子,结果在噪声范围内可行(大模型训练的种子敏感性有限但存在)
精确复现同种子同硬件,bit 级一致难(浮点非结合、NCCL 求和顺序、原子操作)
跨硬件复现不同硬件类型,结果可比更难(Tensor Core 实现差异、精度路径差异)

生产标准是统计复现:同配置跑 2–3 个种子,结果一致才可信——单种子单次运行的结论都不算数(噪声基线都没有)。

跨硬件的实验(A100 vs H100、NVIDIA vs 国产)要接受"统计上可比、数值上不同"——对比的是趋势与相对差异,不是绝对值。

团队级实验管理的组织实践:

一、实验命名与分组:<日期>-<主题>-<假设>(如 0315-data-mix-code-heavy)——三个月后还能找到。

二、假设先行:每个实验先写清楚"假设什么、预期什么"——没有假设的实验是烧卡。

三、基线固定:每次实验与固定基线对比(同一初始检查点、同一评测集)——对比的锚点要固定。

四、实验分级:探索性(小模型短跑)→ 验证性(中规模)→ 正式(大规模)——缩放实验(见 Scaling Laws)的成本梯度,小成本验证再放大。

五、结论入库:实验结论(无论成败)写进团队知识库——负结果与正结果同样值钱(防止重复试错)。

1. 提出假设(预期什么、为什么)
2. 设计实验(对照组、变量唯一、规模分级)
3. 小规模验证(1/100 成本,确认方向)
4. 正式实验(固定基线、多种子)
5. 分析(配置 diff + 评测对比 + 噪声基线)
6. 结论入库(成败都记录)
  • 实验元数据五类:代码/配置/数据/环境/起点——缺一样就无法复现;配置与代码是实验的身份。
  • 记录内容比工具重要:loss/吞吐/评测/硬件指标 + 配置 diff(对比的基础)。
  • 复现的层次:统计复现(生产标准,多种子)> 精确复现(难,浮点非结合)> 跨硬件(趋势可比,绝对值不同)。
  • 单种子单次运行的结论不算数;跨硬件对比看趋势不看绝对值。
  • 组织实践:假设先行、基线固定、实验分级(缩放实验的成本梯度)、结论入库(负结果同样值钱)。