torchtitan 中的 Loss 收敛性验证:分布式训练技术正确性的标准测试方法
【免费下载链接】torchtitanA PyTorch native platform for training generative AI models项目地址: https://gitcode.com/GitHub_Trending/to/torchtitan
本文基于 torchtitan 仓库的 converging.md 整理,讲解当你在 torchtitan 中引入一个新的分布式训练技术(TP/PP/CP 等并行策略,或 Float8、Async TP 等训练优化)时,应该如何设计"loss 收敛对照实验"来证明其数值正确性。读完本文,你将掌握:以 1D FSDP 为基线的对照/测试组划分方法、如何固定"每训练步 token 数"这一黄金不变量、并行度与优化技术各自的实验设计规范,以及官方 Llama 3.1 8B 实测案例的完整参数与结果判读。
为什么用"loss 收敛"来证明正确性
分布式训练技术(并行策略、通信优化、低精度算子等)的正确性通常难以通过单元测试穷举:它们作用在反向传播、梯度规约、微批调度等深层次的训练流程上。torchtitan 的做法是:如果新旧两种设置在相同输入数据上训练足够多的步数,loss 曲线应当落在同一条收敛轨迹上(允许微小的数值抖动)——收敛一致即认为新技术在数值上是正确的。
文档同时给出了三条明确的前提假设(Disclaimers),理解它们是正确使用这套方法的关键:
- 以 vanilla 1D FSDP 为"正确"基线。1D FSDP 的正确性本身可以通过与 DDP 在小模型上对拍来验证——DDP 是被广泛采用且公认正确的分布式方案。这样就把"新技术 vs 旧技术"的两难问题锚定在一个可信的起点上。
- 范围限定:该流程针对的是"新分布式训练技术"的正确性验证。对于全新的模型规模或架构,loss 能否收敛本身不在本文档的讨论范围内。
- 允许不同测试使用不同随机种子。理由有二:一是更接近生产环境;二是当分布式设置不同(不同切分方式)时,本来就无法期待精确复现。
关于第 3 点,文档用两条脚注解释了"为什么不同切分下无法精确复现",这解释了为什么判据是"收敛一致"而非"逐步 bit 级一致":
- 模型初始化难以对齐:在切分设置下,每次调用随机算子时,底层 RNG 状态偏移量是按量化步长推进的,往往与本次实际需要的随机数数量不匹配,从而在不同切分方式下"浪费"掉不同量的随机数,导致各 rank 拿到的初始权重分布存在差异。
- 即便使用 seed checkpoint 保证初始化一致,仍然难以得到完全相同的结果:其一是模型中其他随机算子受同样的 RNG 偏移问题影响;其二是不同切分/通信方式下计算累加顺序存在细微差异。
黄金不变量:固定"每训练步处理的 token 总数"
验证文档给出的一条总纲是:在测试 loss 收敛性时,应尽可能保持输入数据的确定性,以最小化数据差异带来的影响。具体操作是保持每个训练步的 token 总数不变,而这个总数由以下乘积决定:
training.num_tokens_per_microbatch_per_dp_rank * parallelism.num_pp_microbatches * contenteditable="false">【免费下载链接】torchtitanA PyTorch native platform for training generative AI models
项目地址: https://gitcode.com/GitHub_Trending/to/torchtitan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考