训练与微调大模型训练分布式训练ZeRO速答 · 约 6 分钟更新 2026-09-28

ZeRO 的三个阶段分别切什么?怎么选?

一句话结论

ZeRO-1 切分优化器状态,ZeRO-2 增加切分梯度,ZeRO-3 进一步切分模型参数。显存收益与通信开销逐级递增,单卡能放下优化器首选前两者保性能,放不下才上第三阶段与offload。

先这样答

ZeRO 的三个阶段通过对训练状态的逐级切分来管理显存。ZeRO-1 切分优化器状态,这是训练中占用显存最大的一部分,大约占模型参数字节数的十二倍。ZeRO-2 在第一阶段基础上,增加了对梯度的切分。ZeRO-3 则进一步切分了模型参数本身,只有在具体算子需要参与前向或反向计算时,才会通过网络通信将参数聚合到单张显卡上。

在选择具体使用哪个阶段时,核心是权衡显存收益与通信开销。随着阶段从第一阶段推进到第三阶段,单卡释放的显存空间逐级增大,但跨卡传输数据的通信开销也逐级增加。工程上的经验法则主要看单卡容量。如果单卡显存能够放下优化器状态,优先使用 ZeRO-1 或 ZeRO-2,这样可以在保证不溢出显存的前提下获得更好的训练吞吐性能。只有当模型本体的参数规模大到单卡完全放不下时,才会考虑开启 ZeRO-3,并根据硬件条件配合 CPU 或 NVMe 的 offload 机制,用通信时间换取显存空间。

在实际的大模型训练中,ZeRO 通常不会孤立使用。它经常作为组合拳的一部分,与激活检查点、混合精度训练配合使用,或者与张量并行等策略叠加构成 3D 并行,从而在有限的算力集群下扩大训练规模。

面试官会怎么追问

  • 「如果用了 ZeRO-3 还是放不下,还有什么办法?」 可以配合 offload 机制将数据卸载到显存之外。具体做法是将优化器状态、梯度或参数转移到 CPU 内存甚至 NVMe 硬盘上存储。当 GPU 计算需要这些数据时再通过总线进行预取,这样能进一步突破单卡显存的物理限制。

  • 「ZeRO 和张量并行可以一起用吗?」 可以叠加使用,这通常被称为 3D 并行中的数据并行扩展。张量并行负责在算子层面对计算图进行切分,降低单步计算的显存占用,而 ZeRO 负责在数据并行组内切分训练状态。两者结合可以在超大规模模型训练中兼顾显存容量和计算效率。

  • 「为什么优化器状态占用的显存最大?」 因为在使用混合精度训练时,优化器需要维护高精度的模型状态。除了保存模型参数的副本,还需要保存一阶动量和二阶动量等状态变量。这些额外的高精度数据占用的空间远超半精度模型参数本身,因此成为 ZeRO-1 首先优化的对象。

回答的坑

混淆 ZeRO-3 与张量并行的切分逻辑,把 ZeRO-3 的参数切分说成是切分计算图,正确答法是强调 ZeRO-3 依然属于数据并行范畴,只是在计算前做参数的通信聚合。

脱离通信开销谈显存优化,盲目认为 ZeRO-3 是所有场景的默认首选,正确答法应当指出单卡能放下时用 ZeRO-1 或 2 性能更好。

—— 本题完 ——