4.5 并行训练:几千张卡怎么抬一台模型
先算一笔吓人的账
预算批了、数据备好了,开训前还有最后一道坎:模型根本塞不进一张卡。
训练状态下,每个参数要在显存里占约 16 字节:bf16 格式的参数本身 2 字节、它的梯度 2 字节,以及 Adam 优化器随身携带的「记忆」12 字节(细账见深入层)。于是:
一个千亿(100B)参数的模型就是 1.6 TB。而一张旗舰 GPU 的显存只有 80 ~ 192 GB(2025 年)——差了一个数量级都不止。就算你只想「放下」它,都得先把它切到十几张卡上,更别说还要算得快。
注意这笔账里最反直觉的一点:大头不是参数,是优化器状态——16 字节里它独占 12 字节。很多人以为显存都花在「模型本身」上,其实模型只占零头。记住这一点,下面 ZeRO 的设计就顺理成章了。
五种切法,一张图看懂
请把五个模式逐个点一遍,每个模式重点看显存 条和通信箭头的变化:
① 单卡:参数🟦 + 梯度🟧 + 优化器状态🟪 齐齐超过红色容量线——💥。这是一切并行策略的出发点。
② 数据并行 DP:四张卡各持一份完整模型、各吃一批数据,每步结束梯度求平均(All-Reduce)。注意看显存条:一点都没变短。DP 只提速、不省显存——模型本身放不下时,它救不了你。
③ 张量并行 TP:把每一层内部的大矩阵切成 4 份。显存条立刻缩到 1/4,但代价是那些红色的 ⇄——算每一层都要通信,频繁到只有同一台机器里 NVLink 级的超高速互联才扛得住。
④ 流水线并行 PP:按层切段,GPU1 管第 1 层、GPU2 管第 2 层,数据逐段接力。通信量小(只传层间结果),可以跨机器。但看下面的流水线时间表:灰色格子是「气泡」——流水线灌满之前和排空之后,总有卡在摸鱼。微批次切得越细,气泡占比越小。
⑤ ZeRO-3:数据并行的省显存魔改。虚线块表示每张卡只存每层参数的 1/4,算到哪一层,就临时从别的卡把那层拼装完整(All-Gather),用完即丢。显存像 TP 一样省、用法像 DP 一样简单,代价是更多通信。
一张表对齐这四种「切法」——切什么、省不省显存、通信有多凶:
| 切法 | 切的是什么 | 省显存? | 通信量 | 适合 |
|---|---|---|---|---|
| 数据并行 DP | 只切数据,模型整份复制 | ❌ 不省 | 每步一次梯度平均 | 模型放得下、只想提速 |
| 张量并行 TP | 切每一层内部的矩阵 | ✅ 省 | 🔴 极频繁(每层都通信) | 同机 8 卡内、NVLink |
| 流水线并行 PP | 按层切段 | ✅ 省 | 🟢 小(只传层间结果) | 跨机器,但有气泡 |
| ZeRO-3 | 切参数/梯度/优化器状态 | ✅ 省 | 🟡 较多(用时拼装) | 想要 DP 的简单 + 省显存 |
真实训练:3D 并行组合拳
几千上万张卡的真实训练,从来不是单选题,而是组合拳:通信最凶的 TP 留在同一台机器的 8 张卡之内(走 NVLink);跨机器用 PP 把模型切段;最外层再套 DP/ZeRO 复制多路流水线来吞吐数据。三种并行各切一个维度,所以叫「3D 并行」。
TP 开几路、PP 切几段、DP 铺多宽,取决于模型形状、集群规模和网络拓扑——这套「切法」没有万能公式,是大模型基建工程师的核心手艺,也是各家训练框架(Megatron、DeepSpeed 等)竞争的主战场。
组件是 4 卡 4 层的玩具:真实模型有几十上百层、集群有几千上万张卡,但切分逻辑完全同款。工具箱里还有本节没画的招式:序列并行(把超长上下文切开)、专家并行(MoE 模型把不同专家放不同卡,第 8 章讲)、梯度检查点(用重算换显存)等。另外「显存 1/4」是理想值——通信缓冲区、激活值都要额外吃显存,实际收益会打折扣。
小结
- 训练态显存 ≈ 参数量 × 16 字节,其中优化器状态占 12 字节才是大头。
- DP 只提速不省显存;TP 省显存但通信凶(限同机);PP 省显存、通信少但有气泡。
- ZeRO 把「三大件」切片分摊:DP 的用法,TP 级的省显存。
- 真实训练是 3D 并行组合拳:机内 TP、跨机 PP、最外层 DP/ZeRO。
延伸阅读
- Megatron-LM (2019) 与 ZeRO (2019)——张量并行与显存分片的开山之作。
- HuggingFace:超大规模训练手册(2025)——把各种并行讲到工程细节的免费长文。
- 下一节 4.6 训练稳定性:产线搭好了,怎么保证数月长跑不翻车。