跳到主要内容

4.5 并行训练:几千张卡怎么抬一台模型

先算一笔吓人的账​

预算批了、数据备好了,开训前还有最后一道坎:模型根本塞不进一张卡。

训练状态下,每个参数要在显存里占约 16 字节:bf16 格式的参数本身 2 字节、它的梯度 2 字节,以及 Adam 优化器随身携带的「记忆」12 字节(细账见深入层)。于是:

训练态显存≈参数量×16 字节\text{训练态显存} \approx \text{参数量} \times 16 \text{ 字节}

一个千亿(100B)参数的模型就是 1.6 TB。而一张旗舰 GPU 的显存只有 80 ~ 192 GB(2025 年)——差了一个数量级都不止。就算你只想「放下」它,都得先把它切到十几张卡上,更别说还要算得快。

注意这笔账里最反直觉的一点:大头不是参数,是优化器状态——16 字节里它独占 12 字节。很多人以为显存都花在「模型本身」上,其实模型只占零头。记住这一点,下面 ZeRO 的设计就顺理成章了。

五种切法,一张图看懂​

🎮 动手实验
4 张卡怎么扛起一个大模型
模型有 4 层(彩色块),显存条按「参数🟦 : 梯度🟧 : 优化器状态🟪 = 2 : 2 : 12 字节/参数」绘制,红色虚线是显存容量。逐个点开五种策略,重点看显存条和通信箭头的变化。
所有数据GPU 1💥每参数 16 字节,远超容量线 → 爆显存
参数 (2字节/参数)梯度 (2字节)优化器状态 (12字节)┆ 显存容量线
一张卡装下全部:参数 + 梯度 + 优化器状态 ≈ 每参数 16 字节。千亿参数就是 1.6 TB,而一张卡只有几十 GB——💥 显存直接爆掉。这就是一切并行策略的出发点。
💡 要点:先记住显存账本——优化器状态(12/16)才是显存大头,所以 ZeRO 第一刀就切它。真实的万卡训练是「3D 并行」组合拳:同机 8 卡内部用 TP(通信最凶、走 NVLink),跨机用 PP 和 DP/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。
📝 动手自测0/3
1. 模型太大、一张卡放不下参数。下面哪种并行策略解决不了这个问题?
2. 用 bf16 + Adam 训练时,每个参数约占 16 字节显存,其中最大的一块是什么?
3. 为什么张量并行(TP)通常只在同一台机器的 8 张卡之间使用?

延伸阅读​