从0训练LLM · 现代大模型体系 导读 4 课 + 2 条岔路 + 1 节实验课 ≈ 4 小时
C10 并行:一张卡不够怎么办 章导读

并行:一张卡不够怎么办

C9 算完账:锚点 Qwen3.8-27B 训练一步要 444.5 GB 模型状态,一张 80 GB 的卡放不下,也算不完。这一章依次切 batch、模型状态、层内矩阵、层,岔路再切序列和专家;每切一维,就多付一种通信代价。本章所有数字来自公式与公开实测,不是我们自己跑的。

主线定位

从已有出发 · 训练一步摊到多张卡 已学本课还没学
取一批
前向 ZeROTPPPCPEP
loss
反向
梯度同步 DP
优化器更新
每课多切一维:
数字口径:构建时由锚点 Qwen3.8-27B 与 DeepSeek-V3 的官方 config 按公式现算;卡数按 8 张计。本章没有我们自己的多卡实测。

本章的贯穿任务:接着 C9 的「在一张 80 GB 的卡上训锚点的一步」,把这一步摊到 8 张 80 GB 的卡上(一台 8 卡机),再扩到 64 张。上面这条流水线每一课多切一维;点任一维度,能看到它切了什么、多出哪种通信、在锚点上有多大。贯穿例句「小明把苹果给了小王」在第 1 课是全局 batch 里分给 0 号卡的那一条,在第 3 课是张量并行验算的输入。

📏

本章的数字从哪来(先说清楚)

我们的项目是单机单卡(Apple M5 Max),做不了真实的多卡实验,所以本章没有我们自己跑出的训练数据。页面上的数字只有三种来源:

  1. 公式现算:通信量、显存、气泡率、负载,全部在浏览器里按公式和真实算法算出来,参数量与维度取自锚点 Qwen3.8-27B 与 DeepSeek-V3 的官方 config。算法演示用的小数(环上每张卡的梯度块、张量并行的权重、专家路由的打分)是固定种子生成的测试输入,组件里都标明了。
  2. 推演:凡是「要多少秒」的数,都是「FLOPs ÷ 有效算力、字节 ÷ 带宽」的估算,默认带宽取 DeepSeek-V3 报告里 H800 集群的数字(节点内 NVLink 160 GB/s、节点间 IB 50 GB/s),组件里标「推演」。
  3. 公开实测:ZeRO、Megatron、Zero Bubble、DeepSeek-V3、Llama 3 等报告里的数字,逐条给出处,并标明是作者自报。

唯一一个我们自己的数:C9 实验里,我们 3,688,704 个参数的小模型在 M5 Max 上 fp32 每秒约 81,031 个 token(c09-precision.json)。它的模型状态只有 16 × 3,688,704 字节 = 56.3 MiB,一张卡绰绰有余——本章的问题只属于大模型。

本章问题链

每一课只回答一个问题;上一课的失败,逼出下一课的问题。

课这一课的问题朴素方案在哪个真数字上失败一句话
第 1 课一张卡太慢,8 张卡怎么一起训同一个模型?梯度全部汇总到 0 号卡:锚点 8 卡时 0 号卡每步收 388.9 GB(ring 每卡只发 97.2 GB);而且每张卡仍要放下 444.5 GB数据并行每步把梯度加起来;ring 让每卡只收发约 2 倍梯度、与卡数几乎无关——但它只解决「慢」
第 2 课每张卡都放不下怎么办?每卡一份:8 张卡存 8 份一模一样的 444.5 GBZeRO 不压缩任何数,只是不再存副本:8 卡上 444.5 → 152.8 → 104.2 → 55.6 GB
第 3 课一层的矩阵乘,能不能拆到几张卡上一起算?沿收缩维切第一个矩阵、各卡各自做非线性:结果与不切分差到 0.6 量级(浏览器实算)第一个矩阵按列切、第二个按行切,一个 MLP 只要一次 all-reduce;但每 4,096 个 token 每卡要发 18.8 GB,只能放机内
第 4 课按层切到不同卡上,为什么有卡在等?整批依次流过 8 段:任何时刻只有 1 张卡在算,空等 87.5%切 micro-batch 让空等降到 (p−1)/m,1F1B 省激活,interleaved、Zero Bubble、DualPipe 继续填空
岔路 1128K 的序列,激活放在哪?一条 131,072 token 的序列放一张卡:只存每层输入就要 85.9 GB按序列切;因果注意力让负载不均,zig-zag 头尾配对就精确均衡
岔路 2MoE 的几百个专家放在哪?token 怎么送过去?每张卡放全部专家:DeepSeek-V3 的路由专家光 BF16 权重就 1.31 TB专家分到各卡,两次 all-to-all 送去收回;限每个 token 最多 4 个节点,再把通信藏到计算后面
实验课给锚点在 8 张卡和 64 张卡上各配一套并行方案—并行方案是几维的乘积:先用公式算清每卡显存、每一维的通信和气泡,再去跑

演进地图

并行的演进:每切一维,都是被上一代的某个真数字逼出来的
  1. 起点 一张卡 C9 的结论
    解决了训练一步的全部东西都在一张卡上,不需要任何通信。
    卡在锚点的模型状态 16 字节 × 27,781,427,952 = 444.5 GB,是 80 GB 的 5.6 倍;就算放得下也太慢:DeepSeek-V3 预训练用了 2,664K H800 GPU 小时,一张卡约 304 年。
  2. 第一代 数据并行 + ring all-reduce ring 来自 HPC(2009),2017–2018 进入深度学习
    解决了每卡一份完整模型、算 1/N 的数据,每步把梯度加起来。ring 让每卡只收发 2(N−1)/N 倍梯度:锚点 8 卡 97.2 GB、64 卡 109.4 GB(汇总到 0 号卡的朴素做法:388.9 GB → 3,500 GB)。
    卡在只解决「慢」:每张卡仍要放下完整的 444.5 GB。
  3. 第一代 · 工程 分桶,边反向边同步 PyTorch DDP(Li et al. 2020)
    解决了反向逐层产出梯度,攒满一桶(默认 25 MiB)就先发,通信藏到后面几层的反向里。
    卡在DP 的通信量每步固定:锚点 8 卡每卡 97.2 GB,按 IB 50 GB/s 要 1.94 s;每卡 4,096 个 token 的反向只有约 1.05 s(推演)——token 太少就藏不住。
  4. 第二代 ZeRO-1 / 2 / 3 · FSDP Rajbhandari 2019;PyTorch FSDP 2023
    解决了不再每卡存一份:8 卡上 444.5 → 152.8 → 104.2 → 55.6 GB(依次切优化器状态、梯度、参数)。
    卡在切参数后每步多一次 all-gather,通信是 DP 的 1.5 倍;激活不切:s = 4,096 的选择性重计算要 45.6 GB,放不进剩下的 24.4 GB。
  5. 第三代 张量并行(层内切矩阵) Megatron-LM(Shoeybi 2019)
    解决了第一个矩阵按列切、第二个按行切,一个 MLP 只要一次 all-reduce;t = 8 配序列并行,激活 45.6 → 5.7 GB。
    卡在每层前向 2 次、反向 2 次同步:每 4,096 个 token 每卡要发 18.8 GB,每层都要等——只能放在机内。ZeRO 原文实测:跨两台 DGX-2,每卡约 5 TFLOPS,不到峰值 5%。
  6. 解决了按层切,跨机只传段与段之间的激活;切 micro-batch 填满流水线;1F1B 把在途激活从 m 份压到 p 份;interleaved 把气泡除以 v。
    卡在首尾必然空等:p = 8、m = 32 时气泡 (p−1)/m = 21.9%(占总时间 17.9%),interleaved v = 4 也还有 5.5%。
  7. 2023–2024 Zero Bubble · DualPipe Qi 2023;DeepSeek-V3 2024
    解决了反向拆成「对输入」B 与「对权重」W,W 拿去填空泡(F = B = W 时 ZB-H1 的气泡是 1F1B 的 1/3);DualPipe 从两头喂 micro-batch,并把 all-to-all 藏到另一批计算后面。
    卡在DualPipe 要存两份参数;调度更复杂;通信只是被藏住了,量一点没少。
  8. 岔路 · 长序列 序列并行 / 上下文并行 2021–2023:SP、Ring Attention、Ulysses
    解决了128K 的序列按序列切给多张卡;zig-zag 头尾配对,把因果负载 10 : 26 : 42 : 58 配平成每卡一样多。
    卡在每个全注意力层都要在卡之间传 K、V:锚点 s = 131,072、8 卡时每层 0.5 GB;Ulysses 按头切,KV 只有 4 个头。
  9. 岔路 · MoE 专家并行 + all-to-all GShard 2020 → DeepSeek-V3 2024
    解决了DeepSeek-V3 的 654B 路由专家参数分到 64 张卡,每卡每层 4 个;每个 token 最多去 4 个节点。
    卡在跨节点 IB 50 GB/s 只有 NVLink 160 GB/s 的约 1/3,跨节点 EP 的计算与通信约 1 : 1;热门专家所在的卡成为掉队者(→ C11)。
  10. 2021 起 组合:3D / 4D / 5D 并行 Narayanan 2021;Llama 3;DeepSeek-V3
    解决了Llama 3 405B:[TP, CP, PP, DP] = 8 × 1 × 16 × 128,16,384 张 H100,BF16 MFU 41%;DeepSeek-V3:PP 16 × EP 64 × ZeRO-1 DP,不用 TP。
    卡在没有万能配置:每种组合都要先算清每卡显存、每一维的通信走哪条链路、气泡多大(实验课)。
数字口径:锚点与 DeepSeek-V3 的数字由 anchor-model.json / frontier-models.json 的官方 config 在构建时按公式现算(GB = 10⁹ 字节,卡按 80 GB 计);「分桶」一行的时间是推演(有效算力 400 TFLOPS、IB 50 GB/s);5 TFLOPS 出自 ZeRO 原文 §1;GPU 小时、并行配置、带宽出自 DeepSeek-V3 报告 §1、§3.1–3.2(本地 PDF);Llama 3 的配置出自其报告表 4。本章没有我们自己的多卡实测。

三层交互

层本章里的组件在哪一课
概念动画集体通信步进器(ring all-reduce、reduce-scatter、all-gather、all-to-all,逐步显示谁把哪一块发给谁);训练一步摊到多卡的累计数据流;演进地图第 1、2 课,岔路 2,各课开头
算法模拟器(真算法、小数据)环上整数部分和逐元素核对;DP 分桶重叠泳道;ZeRO 切分账本;张量并行三种切法的真矩阵验算(贯穿例句的 5 × 4 输入);流水线调度由 GPipe / 1F1B / Megatron interleaved / Zero Bubble 的算法生成并按依赖排时间;因果注意力的 token 对精确计数与 zig-zag;DeepSeek-V3 的 node-limited 路由第 1–4 课、岔路 1–2
真模型 / 真数据锚点 Qwen3.8-27B、Qwen3-8B、DeepSeek-V3 的官方 config 代入全部组件;公开实测对照:ZeRO 原文图 1、Megatron 的扩展效率、DeepSeek-V3 的并行配置与带宽、Llama 3 表 4 的 4D 配置;设备网格把几维并行组合到 8 / 64 张卡上现算每卡显存、通信与气泡第 2–4 课、实验课

第三层没有我们自己的多卡实验(单机单卡做不了),用「真 config 代入 + 公开实测对照」代替,页面上如实标注。

项目推进:给锚点定一套并行方案

对应 04-实践项目/MILESTONES.md 的「C10 并行」:单机单卡无法做真实的并行实验,本章不产出项目数据,而是把 C9 的显存分项代入各种并行方案做计算题。分工照旧:代码 AI 来写,决策你来做。

🧭

你要拍板的三件事

  1. 一台 8 × 80 GB 的机器,序列长度 4,096,训锚点:ZeRO 切到几级?要不要 TP?激活用哪种重计算?(第 2、3 课与实验课)
  2. 64 张卡(8 台机):TP、PP、DP 各取多少?为什么 TP 不跨机?每步 micro-batch 取多少,让气泡 (p−1)/m 可以接受?(第 3、4 课与实验课)
  3. 我们自己的 3,688,704 参数小模型要不要并行?它的模型状态 56.3 MiB。(第 1 课)

验收标准(全部可测):

坑与带走

坑症状后果怎么办
以为数据并行能让大模型放进小卡加卡后照样 OOM白加卡DP 每卡仍是 16 字节/参数,放不下要靠 ZeRO / TP / PP(第 1、2 课)
梯度同步不分桶、不重叠反向结束后卡长时间空等加卡后吞吐远低于线性分桶边反向边同步;每卡 token 太少时通信藏不住(第 1 课)
以为 ZeRO 会降低精度不敢开 ZeRO白白浪费显存ZeRO 不改任何数的位数,只是不存副本(第 2 课)
ZeRO-3 不预取每层都在等 all-gather通信全部露在外面预取下一层参数;DeepSeek-V3 只用 ZeRO-1(第 2 课)
TP 跨机吞吐骤降ZeRO 原文实测每卡约 5 TFLOPS,不到峰值 5%TP 只放机内;跨机用 PP / DP(第 3 课)
TP 大于 KV 头数形状对不上或显存超预期KV 头要复制锚点只有 4 个 KV 头,TP = 8 时每个 KV 头复制到 2 张卡(第 3 课)
micro-batch 太少流水线大段空等p = 8、m = 8 时空等占总时间 7/15 ≈ 46.7%(相对理想时间 (p−1)/m = 87.5%)m 至少是 p 的几倍;或 interleaved / Zero Bubble(第 4 课)
最后一段带 lm_head最后一张卡总是最慢整条流水线等它锚点的 lm_head 算量约等于 3.3 层,切段时要算进去(第 4 课)
长序列连续切给 CP最后一张卡最忙序列很长时 4 张卡的因果负载趋近 1 : 3 : 5 : 7zig-zag 头尾配对(岔路 1)
MoE 专家随意分布跨节点流量大、热门专家的卡掉队all-to-all 等最慢的卡限节点路由 + 负载均衡(岔路 2、C11)

另有三个真实工程坑:数据并行时学习率要按全局 batch 设(回扣 C5);梯度累积与数据并行数学上等价,但一个是串行、一个是并行;BatchNorm 这类跨样本的统计在 DP 下只看本卡(LLM 用 RMSNorm,不受影响)。

这一章你应该带走的(各课「一句话」):

深入这一章

每条都实际打开核对过(2026-09-26):写清它讲清了什么、对应哪一课、为什么推荐。外部链接都需要联网;论文暂时链 arXiv,之后会统一下载到本地。

🎮 想更直观 10–30 分钟

先玩本章的组件;下面四条是外部最好的可视化入口(都需联网)
20 min英文需联网 2024-12-15,12-23 更新
在一张 2⁶ 的设备网格上,逐维叠出 DP、HSDP/FSDP、TP、CP、EP、PP,并写出每一维具体用哪种集体通信。
对应实验课的设备网格:「逐维叠加」和「悬停一张卡看它的同组成员」这两个交互,本章的组件就是照它的思路做的。
10 min英文需联网 HF Space;代码 github.com/Victarry/PP-Schedule-Visualization
调设备数、micro-batch 数、各操作耗时,切换 1F1B、interleaved、ZB-1P、计算通信重叠与 DualPipe,画出调度甘特图。
对应第 4 课:本章的 PipeSchedule 没做 DualPipe 的完整调度,想看 DualPipe 长什么样就去这里。
20 min英文需联网 2017-02-21
把 ring all-reduce 拆成 scatter-reduce 和 allgather 两段,各 N−1 步,每张卡收发 2(N−1)K/N 的数据。
对应第 1 课的步进器:ring all-reduce 进入深度学习的那篇文章,Horovod 论文直接引用了它。
21 min中文需联网 B 站 · 2024-06-30
用动画讲 DP → DDP → ZeRO 三个阶段各自切掉了什么。
对应第 1、2 课:中文里少有的以动画为主体讲 ZeRO 的短视频,适合先建立画面再回来看账本。

🔬 想吃透原理 1–3 小时

唯一必看:HF 的 Ultra-Scale Playbook(有中文译本)。其余按课挑
官方称 2–4 天,按节挑读英文需联网 Tazi、Mom、Zhao 等 · 2025-02-19;中文译本 github.com/pprp/ultrascale-playbook-zh
从一张卡的显存讲起,依次是 DP、ZeRO-1/2/3、TP 与序列并行、CP(Ring Attention)、PP(AFAB、1F1B、interleaved、zero-bubble)、EP,最后把五维组合起来;附 ring all-reduce 附录。
和本章的问题链几乎一一对应,而且每一节都有交互图和实测。注意两点:它的气泡写成 (p−1)/m,是「相对理想时间」的口径(第 4 课讲了另一种口径);它的 ZeRO 一节只给公式,120 / 31.4 / 16.6 / 1.9 GB 这组数出自 ZeRO 原文,不在 Playbook 里。
约 2 h英文需联网 Google DeepMind · 2025-02-04;训练一章:jax-ml.github.io/scaling-book/training/
用分片记号写清每种集体通信的代价,再分析 DP、FSDP、TP、FSDP + TP、流水线什么时候从算力受限变成通信受限。
对应第 1–3 课:定量最严谨的一份,适合想知道「每卡要多少 token 才能藏住通信」的人。例子是 TPU,换成 GPU 只是换带宽数字。
52 + 56 + 59 min中文需联网 B 站 · 2022-05 至 06;Megatron BV1nB4y1R7Yz,GPipe BV1v34y1E7zu
三篇奠基论文逐段精读:ZeRO 的三级切分与通信分析,Megatron 的列切与行切,GPipe 的 micro-batch 与重计算。
对应第 2、3、4 课:中文读原文的最佳伴读,先看本章的组件再听他逐段讲,效率最高。
25 min中文需联网 B 站 · 2024-08-28
405B 模型在 16K 张 H100 上的 4D 并行与集群故障。
对应实验课:一个工业级配置是怎么选出来的,和实验课里 Llama 3 表 4 的三行对照着看。
81 + 80 min英文需联网 Percy Liang / Tatsu Hashimoto · 2026-04-28;第 8 讲 youtube.com/watch?v=6-cXp-aOmdg
网络与集体通信基础,DP、ZeRO、FSDP,TP、PP,以及真实案例。
最新一版名校课,适合整章学完后系统地过一遍。
30 min英文需联网 2022-10
朴素模型并行 → GPipe → PipeDream / 1F1B,用「卡 × 时间步」的网格画每一步谁在干活、谁在缓存激活。
对应第 4 课。它把气泡写成 1 − m/(m+n−1),是「占总时间」的口径,和 Megatron 的 (p−1)/m 不是同一个数——第 4 课的组件两种都算。
40 min英文需联网 Anthony、Biderman、Schoelkopf · 2023-04-18
算力 C ≈ 6ND、每个参数的字节数、激活公式、ZeRO 各级的显存与 3D 并行。
对应第 2 课:把 C9 和本章的记账公式放在一页里,适合当速查表。
30 min中文需联网 B 站 · 2024-06-30
NCCL、DeepSpeed 与 Accelerate 各自对应哪种并行,附代码仓库。
对应第 1、2 课:想知道这些概念落到 PyTorch 生态里叫什么名字时看。

📄 想读原文 按需

DeepSeek-V3 有本地 PDF;其余暂链 arXiv(需联网),之后统一下载
Rajbhandari et al. 2019需联网
图 1 的 120 / 31.4 / 16.6 / 1.9 GB;§7.2 通信量:切到梯度仍是 2Ψ,切参数是 3Ψ(1.5 倍);§1 跨两台 DGX-2 的 Megatron 每卡约 5 TFLOPS。
第 2 课的出处,第 3 课「TP 不跨机」的实测也在这里。
Shoeybi et al. 2019需联网
§3:第一个 GEMM 按列切、第二个按行切;每层前向 2 次、反向 2 次 all-reduce。8.3B 参数、512 卡、15.1 PFLOPs、扩展效率 76%。
第 3 课的出处。
Narayanan et al. 2021需联网
§2.2:气泡时间比 (p−1)/m(相对理想时间);1F1B 把在途 micro-batch 限制在 p 个;interleaved 把气泡除以 v、通信乘以 v。1T 参数、3,072 卡、502 PFLOP/s、峰值的 52%。
第 4 课与实验课的出处(PTD-P 组合)。
Huang et al. 2018需联网
§2.2:气泡开销 O((K−1)/(M+K−1)),M ≥ 4K 时可以忽略。
第 4 课「改进一」的出处。
Harlap et al. 2018需联网
一前一后交替(1F1B)的调度。
第 4 课「改进二」的来源;Megatron 2021 用的是它的变体 PipeDream-Flush。
Qi et al. 2023需联网
把反向拆成对输入的梯度与对参数的梯度;同等显存下吞吐比 1F1B 最多高 23%,放宽显存后最多 31%。
第 4 课「改进四」的出处。
Li et al. 2020(VLDB)需联网
DDP 的梯度分桶与通信反向重叠;§5.2 默认桶大小 25 MB(现行文档写作默认 25 MiB)。
第 1 课「分桶」的出处。
Sergeev & Del Balso 2018需联网
§3 用 ring all-reduce,明确引用百度 2017 的文章,并指出算法来自 Patarasuk 与 Yuan 2009 年的论文。
第 1 课出处归属:ring all-reduce 来自 HPC,不是深度学习发明的。
Zhao et al. 2023(PVLDB)需联网
PyTorch 对 ZeRO-3 式全切分的工程实现。
第 2 课。
Korthikanti et al. 2022需联网
激活公式 sbh(34 + 5as/h);序列并行 + 选择性重计算把激活降到 1/5,530B 模型 MFU 从 42.1% 提到 54.2%。
第 3 课(TP 配序列并行)与岔路 1 的出处,也是 C9 第 5 课的公式来源。
2021–2023需联网 Ring Attention arXiv 2310.01889;Li et al. arXiv 2105.13120
Ulysses:all-to-all 换成按头切,序列长度与卡数同比增长时通信量不变;Ring Attention:K、V 块沿环传,与分块计算完全重叠;Li et al. 提出 Ring Self-Attention。
岔路 1 的三处出处。
Lepikhin et al. 2020需联网
专家分到不同设备、用 all-to-all 路由 token;600B 以上参数、2,048 块 TPU v3、4 天。
岔路 2「专家并行」的首提出处。
DeepSeek-AI 2024
§3.1–3.2:2,048 张 H800;16 路 PP、跨 8 节点的 64 路 EP、ZeRO-1 DP,不用 TP;DualPipe 与表 2 的气泡公式;NVLink 160 GB/s、IB 50 GB/s;每个 token 最多 4 个节点。
第 2、4 课与岔路 2 的出处,也是本章带宽假设的来源。
Meta 2024需联网
§3.3:最多 16K 张 H100;4D 并行按 [TP, CP, PP, DP] 从内到外排;表 4 的三种配置与 38–43% 的 BF16 MFU。
实验课的公开配置对照。
🚫

排除了什么(也是筛选标准):① Lilian Weng《How to Train Really Large Models on Many GPUs?》(2021)——仍然可读,但被 Ultra-Scale Playbook 全面覆盖且后者更新;② HF 显存估算器——只算推理,C9 已说明不能拿来估训练;③ PyTorch《Understanding GPU Memory 1》——讲显存快照工具,与并行无关,留给 C9;④ 李宏毅 ML2025 助教课《利用多张 GPU 训练大型语言模型》——内容以 ZeRO、FlashAttention、Liger Kernel、量化为主,并行部分与 C9、本章第 2 课重叠;⑤ Picotron 教程(Playbook 作者亲讲)——以写代码为主,本课程的定位是理解与拍板,想自己实现时再看;⑥ 知乎「图解大模型训练」系列——脚本访问返回 403,无法核实,不列;⑦ ZOMI 酱《分布式并行》系列第 2 篇——内容与 RethinkFun 那条重叠,后者动画更清楚。