换GPU数量不再换数据顺序:Zephon让TorchTitan的全局批次逐位一致
核心概要
训练大模型时,改变GPU数量通常会改变数据加载器交给模型的样本顺序,使消融实验把硬件配置误当成数据改动。Zephon把数据加载拆成单线程累加器与无状态并行算子,并把数据划成固定数量的逻辑通道,在TorchTitan中替换默认加载器后,从16卡检查点恢复到8、32、64卡时每个全局批次的SHA-256哈希都与原运行一致。
深度剖析
在TorchTitan中,训练任务从16块GPU的检查点恢复后,即使改用8、32或64块GPU,Zephon交给模型的全局批次仍与原始运行逐位相同。 标准数据加载器在恢复后按新的GPU数量重新分配样本,同一次运行在不同卡数下得到不同的样本序列,因而各自走出不同的损失曲线。 以1B参数模型在16卡上训练到第150步取检查点,分别在8、32、64卡上恢复,Zephon的损失曲线彼此重合,且每个全局批次的SHA-256哈希与基线运行匹配。
数据顺序对下游评测的影响可以大到与数据配方改动相当,Zephon把这一由GPU数量带来的波动压到评测噪声附近。 用标准加载器从头训练同一1B模型20B token时,DCLM Core v1分数随8至64卡的不同配置最多相差0.82分,FineWeb评测套件最多相差0.64分,约为DCLM与FineWeb作者评估数据整理方法时所用阈值的四倍。 同样在8、16、32、64卡上训练,Zephon下两种评测的跨卡数差距分别只有0.05分和0.011分。
Zephon在训练作业内部即时完成分词、打包、打乱与混合,不再需要预先在磁盘上生成一份语料副本。 此前每次改动数据混合、过滤或分词方式,都要先对整个训练语料做一遍离线处理并把结果存盘,而典型训练只读这份副本一次,多数实验也不会产出更好的模型。 这些预处理步骤利用训练时闲置的CPU并行执行,每个算子可单独设定并行度;在解码图像、分词、打包、批处理的完整视觉语言流水线上,Zephon的吞吐与测试中最快的Google Grain相当。
启示与展望
演示覆盖1B参数模型在8、16、32、64块GPU上的训练与恢复,以及一条视觉语言流水线的吞吐对比;集成方式是在TorchTitan中用Zephon流水线替换默认加载器,其余训练设置不变。仓库附带仅用CPU的演示和带真实小模型的GPU冒烟测试,用于检查跨数据并行副本恢复后每个全局步是否与未中断运行一致。
Zephon保证的是数据而非算术:全局批次在不同卡数下相同,损失会很接近,但训练循环的浮点归约顺序仍取决于共享工作的GPU数量,因此可能不完全一致。通道数必须事先选定,且每块GPU上多出的通道会增加检查点恢复开销;恢复时数据、分词器、种子、混合比例、上下文长度与全局批大小都需保持不变。
