AI / Technology
ZeRO 真正在做什么:长期分开存,计算时临时拼齐
用分布式系统的话说,ZeRO 把训练从“每张 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 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。
和其他方案放在一起看
还不能确定的地方
不同集群能否复现同样的显存—吞吐收益。
收益取决于 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 是为了讲机制而构造的小例子,不代表论文真实模型只有四块。