返回报告库

AI / Technology

ZeRO 真正在做什么:长期分开存,计算时临时拼齐

用分布式系统的话说,ZeRO 把训练从“每张 GPU 都复制完整状态”,改成“状态分片保存,需要计算当前层时再临时物化”。它解决的是状态管理问题,不是让模型换一种学习方法。

先把问题缩小:四张 GPU,为什么还是只能训练一张卡放得下的模型?

四张 GPU,不该长期保存四份完整训练状态

先只看“训练结束一小步后,必须继续留在显存里的东西”:模型参数、梯度,以及 Adam 保存的历史记录。把它们合称为训练状态,再假设整套状态只有 A、B、C、D 四块。

标准数据并行让四张 GPU 处理不同数据,但每张卡都要运行同一个完整模型,所以每张卡都长期保存 A、B、C、D。四张卡带来了四倍总显存,却存成了四份副本;单张卡仍然必须放得下整套状态。ZeRO 的第一步只是改掉这一点:GPU 1 长期存 A,GPU 2 存 B,依此类推。

但 GPU 只存四分之一,怎么完成一次完整计算?

分开保存不等于分开计算:需要时临时拼齐

关键是区分“长期保存”和“眼前这一层计算时临时需要”。以当前一层的参数为例,四张卡平时各存一个分片。轮到这一层计算时,它们互相发送分片,让每张卡短暂拿到这一层的完整参数;算完以后,临时拿来的分片就可以丢掉。

反向传播得到的梯度也不会在每张卡都留一整份。结果会再次拆开,送回负责对应分片的 GPU,由那张卡更新并长期保存。于是一个循环是:分开保存 → 临时拼齐当前层 → 计算 → 再拆开。ZeRO 省的是长期占用,代价是训练过程中要更频繁地跨卡传数据。

Stage 1、2、3 不是三套算法,只是决定哪些东西也按这个办法拆开

三个 Stage 只是逐步扩大“分开保存”的范围

Stage 1 只把 Adam 的历史记录分开保存;Stage 2 再把梯度分开;Stage 3 连参数也分开。只有到了 Stage 3,上一张图里“计算当前层时临时拼齐参数”的循环才成为核心动作。

论文对一个 7.5B 模型、64 路数据并行做了内存估算:每张 GPU 的模型状态从标准数据并行的 120GB,依次降到 31.4GB、16.6GB 和 1.9GB。作者还实际在 400 张 GPU 上训练了超过 100B 参数的模型;“超过 1T”则是容量与通信分析,不是一次完成的万亿参数训练。

  • ZeRO 改的是训练状态的保存与通信方式,不是模型的学习算法。
  • GPU 越多,可分摊的长期状态越多。
  • 显存压力下降,但网络通信变得更重要;完整参数分片的通信量约为标准数据并行的 1.5 倍。
研究附录术语、来源与待验证问题

论文证据

高可信

7.5B 模型在 64 路数据并行下,论文估算标准 DP 每卡需 120GB;依次分摊优化器状态、梯度和参数后,降为 31.4GB、16.6GB、1.9GB。

论文第 4 节(内存分片)与第 5 节(通信分析)

高可信

参数分片后的总通信量约为标准数据并行的 1.5 倍。

论文第 5 节:标准 DP 与梯度分片为 2Ψ,参数分片为 3Ψ。

高可信

作者在 400 张 GPU 上训练超过 100B 参数的模型,报告吞吐为 15 Petaflops。

论文摘要与第 6 节。

能力边界与局限

  • 图中的 A、B、C、D 是为了讲机制而构造的小例子,不代表论文真实模型只有四块。
  • “临时拼齐”发生在当前计算所需的参数上,不是把整个超大模型一次性重新复制到每张 GPU。
  • “超过 1T 参数”是论文的容量与通信分析,不是完整训练实证。
  • Stage 3 以更多通信换更低显存,收益依赖 GPU 互联、模型结构和 batch size。

和其他方案放在一起看

方案类型优势限制判断
标准数据并行(DP)baseline实现简单,通信模型清晰;在某些比较中通信量不高于 ZeRO 的梯度分片方案。复制参数、梯度和优化器状态到每张卡,显存冗余严重,难以扩展到超大模型。适合作为基线,但在显存受限时扩展性明显弱于 ZeRO。
模型并行(MP)baseline可以绕开单卡显存上限,帮助训练更大模型。通信开销大,跨节点效率容易下降,开发和调试门槛高。能扩模型,但系统复杂度和通信成本更高。
ZeRO-DP(优化器/梯度/参数分片)方法显著降低每卡显存:7.5B 模型在 64-way DP 下可从 120GB 降到 1.9GB;可在不改模型结构的情况下提升可训练规模。参数分片把总通信量提高到基线的约 1.5x,且效果依赖设备数和网络条件。在显存是主瓶颈时,证据支持其优于标准 DP 的可扩展性。
ZeRO-100B / ZeRO 与激活分片组合方法论文报告了 400 GPU 上 100B+ 训练、15 Petaflops 吞吐,以及 60B 模型超线性扩展。部分结果依赖 CPU offload、激活检查点或特定并行度,且不同场景之间不可直接等价比较。对超大模型训练有明确实证收益,但工程代价和适用边界仍需按场景评估。

还不能确定的地方

不同集群能否复现同样的显存—吞吐收益。

收益取决于 GPU 数量、互联带宽、batch size 和模型结构。

在目标集群上分别测试三个 ZeRO stage,并同时记录峰值显存、吞吐和通信占比。

术语表

训练状态
训练下一步还要继续使用的参数、梯度和优化器历史记录。
分片
把一整套状态切成若干块,让不同 GPU 各自长期负责一块。
临时物化
计算当前层时,把分散的参数短暂拼成可用的完整参数;算完后不继续保留额外副本。
all-gather
各 GPU 交换自己保存的分片,让参与计算的 GPU 临时拿到所需完整参数。
reduce-scatter
把多张 GPU 的计算结果合并后再拆开,让每张卡只留下自己负责的部分。
ZeRO-R
论文处理激活、临时缓冲区和内存碎片的第二层优化;理解核心 ZeRO 循环时可以先不看。

参考来源

来源追踪

内存冗余: 标准数据并行复制模型状态;ZeRO 对状态进行分片。 Paper sections 3–4

运行机制: 参数按需收集,梯度合并后再分片。 Paper sections 4–5

内存估算: 120GB 依次降到 31.4GB、16.6GB 和 1.9GB。 Paper table 1

证据边界: 100B+ 是实证;1T+ 是分析。 Abstract and paper section 6

关于这篇论文的三个关键问题

ZeRO 真正在做什么:长期分开存,计算时临时拼齐 解决了什么问题?

先只看“训练结束一小步后,必须继续留在显存里的东西”:模型参数、梯度,以及 Adam 保存的历史记录。把它们合称为训练状态,再假设整套状态只有 A、B、C、D 四块。

ZeRO 真正在做什么:长期分开存,计算时临时拼齐 的核心结论有哪些证据?

7.5B 模型在 64 路数据并行下,论文估算标准 DP 每卡需 120GB;依次分摊优化器状态、梯度和参数后,降为 31.4GB、16.6GB、1.9GB。 论文第 4 节(内存分片)与第 5 节(通信分析)

阅读 ZeRO 真正在做什么:长期分开存,计算时临时拼齐 时最需要注意什么局限?

图中的 A、B、C、D 是为了讲机制而构造的小例子,不代表论文真实模型只有四块。

今天还可免费读 2 篇新报告订阅 Pro 后无限阅读,并获得每月 10 篇新论文生成额度。升级 Pro