实验管理:追踪与复现
大模型训练是持续的实验流:换数据配比、改学习率、调并行配置——每天几十个实验。实验管理的任务只有一个:每次实验都要能精确回答"这次和上次差在哪、为什么"。没有系统化追踪的实验流,三个月后没人记得哪个结果是怎么来的。
实验的元数据:要记什么
Section titled “实验的元数据:要记什么”一次实验的完整上下文(缺一样就无法复现):
| 类别 | 内容 |
|---|---|
| 代码 | commit hash、diff(未提交的改动)、框架版本 |
| 配置 | 完整 config(超参、并行配置、数据配方)的快照 |
| 数据 | 数据集版本/hash(见数据管道)、tokenizer 版本 |
| 环境 | CUDA/驱动/硬件类型(跨硬件实验的必需项) |
| 起点 | 初始检查点(从哪个 checkpoint 继续的) |
| 随机性 | 种子(多次运行对比噪声) |
核心原则:配置与代码是实验的身份——同一个实验跑两次(不同种子),结果差异是噪声基线;没有这个基线,一切对比都是猜。
追踪工具与记录什么
Section titled “追踪工具与记录什么”主流工具(W&B、MLflow、TensorBoard、自建)的差异在协作与组织层,记录的内容比工具重要:
| 记录项 | 频率 | 用途 |
|---|---|---|
| loss/学习率/梯度范数 | 每 step | 训练健康(见容错) |
| 每 token 吞吐/MFU | 每 step | 效率监控(见 MFU) |
| 下游评测 | 每 N step | 训练进度(见评测基础设施) |
| 硬件指标(util/功耗) | 持续 | 集群健康 |
| 配置 diff | 每次实验 | 对比的基础 |
"配置 diff"是最有价值的记录:两个实验的差异 = 配置 diff——实验对比的自动化基础。
复现:比记录更难
Section titled “复现:比记录更难”记录解决"知道",复现解决"重做"。复现的三个层次:
| 层次 | 要求 | 现实 |
|---|---|---|
| 统计复现 | 同配置不同种子,结果在噪声范围内 | 可行(大模型训练的种子敏感性有限但存在) |
| 精确复现 | 同种子同硬件,bit 级一致 | 难(浮点非结合、NCCL 求和顺序、原子操作) |
| 跨硬件复现 | 不同硬件类型,结果可比 | 更难(Tensor Core 实现差异、精度路径差异) |
生产标准是统计复现:同配置跑 2–3 个种子,结果一致才可信——单种子单次运行的结论都不算数(噪声基线都没有)。
跨硬件的实验(A100 vs H100、NVIDIA vs 国产)要接受"统计上可比、数值上不同"——对比的是趋势与相对差异,不是绝对值。
实验的组织:从混沌到系统
Section titled “实验的组织:从混沌到系统”团队级实验管理的组织实践:
一、实验命名与分组:<日期>-<主题>-<假设>(如 0315-data-mix-code-heavy)——三个月后还能找到。
二、假设先行:每个实验先写清楚"假设什么、预期什么"——没有假设的实验是烧卡。
三、基线固定:每次实验与固定基线对比(同一初始检查点、同一评测集)——对比的锚点要固定。
四、实验分级:探索性(小模型短跑)→ 验证性(中规模)→ 正式(大规模)——缩放实验(见 Scaling Laws)的成本梯度,小成本验证再放大。
五、结论入库:实验结论(无论成败)写进团队知识库——负结果与正结果同样值钱(防止重复试错)。
一个实用的实验流程
Section titled “一个实用的实验流程”1. 提出假设(预期什么、为什么)2. 设计实验(对照组、变量唯一、规模分级)3. 小规模验证(1/100 成本,确认方向)4. 正式实验(固定基线、多种子)5. 分析(配置 diff + 评测对比 + 噪声基线)6. 结论入库(成败都记录)- 实验元数据五类:代码/配置/数据/环境/起点——缺一样就无法复现;配置与代码是实验的身份。
- 记录内容比工具重要:loss/吞吐/评测/硬件指标 + 配置 diff(对比的基础)。
- 复现的层次:统计复现(生产标准,多种子)> 精确复现(难,浮点非结合)> 跨硬件(趋势可比,绝对值不同)。
- 单种子单次运行的结论不算数;跨硬件对比看趋势不看绝对值。
- 组织实践:假设先行、基线固定、实验分级(缩放实验的成本梯度)、结论入库(负结果同样值钱)。
- 评测基础设施 — 下一章:评测的系统化
- 数据管道与 tokenization — 数据版本
- Scaling Laws — 缩放实验的理论
- 混合并行与配置方法论 — 配置的系统化