分布式训练:把大模型摊到千卡上
本文基于模型知识整理(生成时未联网核对),并行策略细节建议对照 Megatron-LM 论文与 ZeRO 论文复核。
一句话定义
千卡训练大模型的并行策略四件套:数据并行(DP)(各卡完整模型、不同数据,梯度同步)、张量并行(TP)(单层矩阵切到多卡,NVIDIA Megatron 系)、流水线并行(PP)(层切到多卡、微批接力)、ZeRO/序列并行(优化器状态与激活切分省显存)——实际大训练是 3D/4D 混合并行的编排艺术。
为什么重要
175B 模型仅权重就 350GB(fp16),单卡显存 80GB——装不下就得切。并行策略是"算力换模型"的翻译层:不懂 DP/TP/PP/ZeRO 的取舍(通信量、显存、气泡),就无法规划训练集群、估算成本、诊断瓶颈。这是大模型工程与普通深度学习的分水岭。
前置知识
kp-006/014(Block 与优化器状态)、GPU 显存层级概念。
核心概念
- 显存账本(为什么必须切):7B 模型混合精度训练 ≈ 权重 14GB + 梯度 14GB + Adam 状态 56GB(fp32 的 m/v)+ 激活若干 ≈ 100GB+——单卡 80GB 放不下 7B!AdamW 优化器状态是显存大头(kp-014 的账本),ZeRO 的靶心。
- DP(数据并行):每卡完整模型副本、切数据,反向后 all-reduce 梯度——最简单但显存不省(每卡全量)。ZeRO 三级:ZeRO-1 切优化器状态、ZeRO-2 再切梯度、ZeRO-3 再切权重(每卡只存 1/N 权重,用时临时聚合)——通信换显存的杠杆。
- TP(张量并行):单层内切矩阵(Megatron:注意力的 QKV 按头切、FFN 按列/行切)——前向后向各插入 all-reduce/all-gather 通信;好处:切得细、单卡显存占用均匀;只适合卡间高速互联(NVLink)——跨机 TP 会被通信延迟杀死。
- PP(流水线并行):按层切(前 12 层在卡 1、后 12 层在卡 2…),micro-batch 接力——通信量小(只传层间激活)适合跨机;代价是流水线气泡( GPipe/1F1B 调度把气泡压到 (p−1)/(m+p−1))。
- 3D 并行编排:TP 塞满节点内(NVLink 高速)、PP 跨节点(通信少)、DP 覆盖剩余卡——乘积=总卡数。例:Llama 级训练 = TP8 × PP8 × DP64 = 4096 卡。
- MoE 的专家并行(EP):kp-022 的专家分驻不同卡 + all-to-all 通信路由 token——并行家族的第五成员。
原理与机制
三种并行的通信-显存-气泡三角:
| 策略 | 通信量 | 省显存 | 气泡/瓶颈 |
|---|---|---|---|
| DP+ZeRO | 梯度 all-reduce(大) | ZeRO-3 切全量 | 通信带宽 |
| TP | 每层两次集合通信(频繁) | 均匀切 | 要求 NVLink 内 |
| PP | 层间激活(小、少次) | 按层切 | 流水线气泡 |
选择逻辑:节点内用 TP(吃 NVLink)、跨节点用 PP(通信小)、再叠 DP 扩吞吐——Megatron 的 3D 公式化。
ZeRO 的显存-通信兑换率:ZeRO-3 前向时每层临时 all-gather 权重用完即弃——显存 ÷N、通信量 ×2(前后向各一次 gather);与 TP 的区别:ZeRO 是"用时聚合的临时切分",TP 是"永久的计算切分"(TP 减少激活显存,ZeRO 不减)。
重计算(gradient checkpointing)的补充角色:激活显存不够时"前向不存、反向重算"——显存省 60~80%、计算 +30%——与 kp-029 的"以算换存"同源思想在训练侧的形态。
图示
DP: 卡间切数据, 梯度all-reduce (+ZeRO切状态/梯度/权重)
TP: 卡间切单层矩阵 (QKV按头/FFN按列) — 需NVLink
PP: 卡间切层, micro-batch接力 — 跨机友好, 有气泡
3D编排例: TP8(节点内) × PP8(跨机) × DP64 = 4096卡
MoE+: 专家并行EP (all-to-all路由)
账本: 7B训练≈100GB+/卡 → 必须切 (ZeRO靶心=优化器状态)
直观类比
训练像"盖万米高楼":DP=多个施工队各盖一栋(各持全套图纸);TP=一层楼的柱子由多个班组同时浇(精细协作、必须同场);PP=楼层分工(一层一层向上接力,交接有等待);ZeRO=图纸与工具不每队配全、用时从中央库调用(省仓储,多跑腿)。
实例或案例
- Megatron-LM:TP/PP 的工业标准实现(NVIDIA),3D 并行的教科书代码库。
- BLOOM 训练日志:176B 在 384 卡上的 DP+PP 编排与 spike 处理(kp-013 联动的公开案例)。
- FSDP(PyTorch 全分片):ZeRO-3 的官方框架化——中等规模训练的默认起点。
常见误区
- 误区一:"卡越多越快(线性扩展)"。并行效率<100%:TP 通信、PP 气泡、DP 同步都在吃效率——MFU(模型算力利用率)35~50% 已是优秀训练。
- 误区二:"TP 跨机也行"。TP 的每层两次通信在跨机网络(InfiniBand 延迟高)下成为灾难——TP 限制在 NVLink 域内是铁律。
- 误区三:"显存不够只想到 ZeRO-3"。ZeRO-3 通信大;先试梯度检查点(kp-013)+ ZeRO-1/2 + 激活切分——组合拳按"通信代价"从低到高打。
与其他知识点的关系
自测题
- 7B 模型混合精度训练的显存账本大约多少?大头是什么?
答:≈100GB+:权重 14 + 梯度 14 + Adam 状态 56(fp32 m/v)+ 激活——优化器状态是大头(ZeRO-1 的靶心)。
- 为什么 TP 不能跨机、PP 适合跨机?
答:TP 每层频繁集合通信(需 NVLink 低延迟);PP 只传层间激活(通信小但需micro-batch填气泡)——通信模式决定各自的位置。
- ZeRO-3 与 TP 的本质区别?
答:ZeRO-3 是"存储切分"(用时临时聚合全量权重,省权重/优化器显存);TP 是"计算切分"(永久性矩阵切分,还省激活)——一个省存储一个分计算。
延伸阅读
- Shoeybi 等, "Megatron-LM: Training Multi-Billion Parameter Language Models"(2019)。
- Rajbhandari 等, "ZeRO: Memory Optimizations Toward Training Trillion Parameter Models"(2020)。
- Huang 等, "GPipe"(2019,流水线并行)。