Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 9 讲总结 · 大规模并行训练的秘诀

本页把 导览 与 9.1–9.7 压成一张可复习的骨架。用法:先只看「核心问题」列做自问,答不全再读「关键结论」列,最后用「典型陷阱」列校核。

节一览

节核心问题关键结论典型陷阱
9.1 问题设定:超过单卡容量显存被什么占满了?「放不下」有几种?五账单 = 参数 2N2N + 梯度 2N2N + 优化器状态 8N8N + 主权重 4N4N(再加激活)=16N=\mathbf{16N} 字节(方法 9.1.1),7B 即 14+14+28+28+28=11214+14+28+28+28=112 GB;三堵墙(显存 / 算力 / 通信)联动,唯一可信验收指标是扩展效率 E=S/kE=S/k(定义 9.1.3)只算参数量、忘了 m,vm,v 与主权重;把「放不下」笼统看成一个问题,不拆成模型状态 / 激活 / 单层三种情形
9.2 数据并行:从 DP 到 FSDP每卡一份完整副本为什么浪费?分片省多少、代价是什么?梯度同步用环状 All-Reduce,每卡 ≈2S(k−1)/k\approx2S(k-1)/k(bf16 下 ≈2P\approx2P)且与批大小无关(结论 9.2.1);ZeRO-1/2/3 逐级分片,8 卡下每卡模型状态 112→38.5→26.25→14112\to38.5\to26.25\to14 GB(例 9.2.3),通信依次「不变 / 减半 / 升至约 1.5×」以为批越大通信越多(恰好相反);以为分片越彻底越好(ZeRO-3 通信更多、可能更慢)
9.3 张量并行:把一层切开单层放不下时怎么切?为什么列切与行切必须成对?列切免通信(分片留在输出)、行切一次 All-Reduce(部分和);「列切 → 逐元素激活 → 行切」使每块前后向各 1 次归约、且与并行度 kk 无关(结论 9.3.1);注意力按头切天然对齐;通信密集 → 必须留在节点内以为 TP 度越大单卡通信越小(V=2S(k−1)/kV=2S(k-1)/k 几乎不随 kk 下降);跨节点硬上张量并行
9.4 流水线并行:把网络切成段按层切分后卡为什么空转?怎么压掉?朴素调度气泡占比 P−1M+P−1\dfrac{P-1}{M+P-1}(结论 9.4.1):P=8P=8 时 M=16→30.4%M=16\to30.4%、M=64→9.9%M=64\to9.9%,M≳9PM\gtrsim9P 才压到 10% 内;三种手段:增大 MM、交错调度(等效段数 P/VP/V)、zero-bubble(拆分反向);1F1B 不消气泡,但把峰值激活从 ∝M\propto M 降到 ∝P\propto P以为 1F1B 消除气泡;以为气泡是通信造成的(它是调度造成的);以为 PP 能解决单层放不下
9.5 显存优化:混合精度、重计算与分片不切模型能省多少?每种手段的代价是什么?BF16 靠宽指数范围免损失缩放、FP16 必须缩放;混合精度把参数与梯度压到 2N+2N2N+2N 又被 fp32 主权重 4N4N 吃回,静态账不变;8-bit 优化器 16N→10N16N\to10N(省 37.5%);全层重计算每 token 每层约 34→234\to2 字节、额外约 1/31/3 前向;QLoRA 把 7B 压到 ≈3.6\approx3.6 GB以为混合精度「白拿显存」;把 fp16 的损失缩放与 FP8 的逐张量缩放当一回事;把重计算当成能省参数显存
9.6 通信、容错与工程实践通信量怎么估?万卡规模下坏了怎么办?All-Reduce ≈2S\approx2S、Reduce-Scatter / All-Gather ≈S\approx S、P2P =S=S(定义 9.6.1);大消息看带宽、小消息看延迟,吞吐第一杠杆是重叠(分桶 / 预取 / 分块 / 融合);MTBF ≈1/(Gλ)\approx1/(G\lambda) 随卡数线性缩短(8192 卡 ≈41\approx41 小时);checkpoint 最优间隔由「期望故障损失」与「保存开销」共同决定(7B 约 56 s/次,f=0.5f=0.5 时约 7.5% 时间花在故障与保存上)只算通信量不算通信时间(漏了带宽与延迟);以为「能重启」就不用设计 checkpoint 策略与恢复一致性
9.7 动手:为 Lab 3 选一套并行策略手上只有 1–8 张卡时究竟怎么配?五步决策:算账 → 是否分片 → 是否 TP/PP → 批大小与梯度累积 → 精度与重计算(方法 9.7.1);两条典型路径:单卡 QLoRA(静态 ≈3.6\approx3.6 GB,预算留给激活)与 8×80 GB 的 DDP + ZeRO-2(26.2526.25 GB/卡 + Bmicro=4,K=8B_{\text{micro}}=4,K=8、等效批 256);验收看「同样全局批下的 EE」与效果对照照搬大厂配置;只调一个旋钮(批 / 累积 / 重计算要成套改);拿总吞吐当验收指标;把 LoRA 的秩 rr 当显存旋钮

一条主线:本讲只有两个动作——「切」与「省」。因为混合精度 Adam 的模型状态是 16N16N(7B 就是 112 GB),单卡必然装不下(9.1);于是要么切:把数据切开(数据并行 → ZeRO / FSDP,9.2)、把一层内的矩阵切开(张量并行 + 序列并行,9.3)、把层切成段(流水线并行 + 1F1B,9.4);要么省:把每一项做小(混合精度 / FP8 / 8-bit 优化器 / 激活重计算 / LoRA-QLoRA,9.5)。但「切」立刻制造通信墙、气泡与故障面,所以必须把通信重叠、checkpoint 与容错、确定性当成与吞吐并列的设计目标(9.6);最后把两条线索落到自己手上的那台机器上(9.7)。

三句话带走

  1. 先算账,再选方案。 模型状态(16N16N,含 m,vm,v 与主权重)与激活(∝BmicroT L\propto B_{\text{micro}}T,L)是两本不同的账,处方不可互换:状态靠分片 / 低精度 / 8-bit 优化器 / offload,激活靠梯度累积 / 重计算 / 序列并行(方法 9.1.2)。诊断顺序按处方代价递增:先排除「模型状态放不下」,再看 OOM 出现在前向还是反向,最后才怀疑单层。
  2. 切分是买显存、卖通信。 环状 All-Reduce 每卡 ≈2S\approx2S 且与批无关;ZeRO-1 通信不变、ZeRO-2 减半、ZeRO-3 升到约 1.5 倍;张量并行每层都要通信(32 层约 22 GB/卡/步,必须留在 NVLink 内);流水线并行通信最小(GB 量级以下)但要付气泡 P−1M+P−1\frac{P-1}{M+P-1}。因此「分片越多越好」「并行度越大越好」「加卡一定更快」三句话都是错的。
  3. 验收只看两件事。 用同样的全局批比扩展效率 EE(单节点 8 卡常见 0.7–0.9,跨机遇瓶颈会掉到 0.5 以下),再用「微调前 vs 微调后」的效果对照证明收益;总吞吐翻倍而 EE 减半的配置,等于没提速、只是多花了钱。

值得记住的十个可复算数字

数字值口径(必须连着说)
7B 静态账单14+14+28+28+28=11214+14+28+28+28=\mathbf{112} GB混合精度 Adam,含 fp32 主权重;1 GB=1091,\text{GB}=10^{9} 字节
8 卡 ZeRO 每卡状态112→38.5→26.25→14112\to38.5\to26.25\to14 GBZeRO-1 / 2 / 3,k=8k=8,同上口径
8-bit 优化器16N→10N16N\to10N,即 112→70112\to70 GBm,vm,v 各压到 1 字节/参数,主权重仍 fp32
环状 All-Reduce 每卡流量24.524.5 GB7B、bf16 梯度(S=14S=14 GB)、k=8k=8
同上跨机时间≈0.49\approx0.49 sInfiniBand 400 Gb/s(β≈50\beta\approx50 GB/s),未减重叠、乐观下界
气泡占比30.4%→9.9%30.4%\to9.9%P=8P=8,M=16→64M=16\to64;前反向等长是教学口径
序列并行省下的激活4.3→0.544.3\to0.54 GB/卡T=8192T=8192、h=4096h=4096、L=32L=32、bf16、k=8k=8(LayerNorm 类 2 份口径)
QLoRA 7B 静态占用≈3.6\approx3.6 GB4 bit(NF4)主干 3.53.5 GB + 适配器 0.080.08 GB;双重量化的额外开销需实测
checkpoint 保存时间5656 s/次分片写入 112 GB ÷ 聚合带宽 2 GB/s(128 卡共享)
吞吐预期≈2400\approx2400 token/s/卡单卡有效算力 101410^{14} FLOP/s、BmicroT=8192B_{\text{micro}}T=8192,仅用于判断量级

复习路线与验收

  • 当天:合上书复述「一条主线」,并手算 7B 的 16N16N 与 8 卡 ZeRO 三级;写不出就回 9.1.2 与 例 9.2.3。
  • 隔天:做 习题集 A 组与 B 组前两题(16N16N 逐项、环状 All-Reduce),必须闭卷手写。
  • 第 3 天:做 C 组,跑通每题的验收标准;把不通过的验收标准当成「哪一个环节没接上」的证据。
  • 第 7 天:综合自测卷 闭卷计时一次;错题按文末漏点定位表回查,再用 回忆卡 补漏。

与后续的连接