跳转到内容

混合并行与配置方法论

真实的千亿模型训练从不用单一并行方式,而是 TP × PP × DP(× SP/CP × EP)的 3D/4D 组合。本章给出配置的完整方法论:每种并行的"先后顺序"、每种度怎么从集群与模型的约束里推出来、以及一个可以直接套用的推导模板。

四种并行通信量与频率完全不同,配置顺序就藏在这里:

优先级并行通信特征为什么先/后
①DP(ZeRO)每 step 一次梯度 all-reduce,可重叠通信可藏,扩展最线性
②TP + SP每层 4 次 all-reduce,GB 级通信贵,必须 NVLink 域内
③EP每层 2 次 all-to-all通信贵且乱,尽量节点内
④PP每 step 2 次边界激活通信最便宜,跨机可用,但气泡贵
⑤CP环形传 K/V只在长序列时启用

推导顺序(从零开始配一个训练):

  1. 先决定 TP:单层装不下的最小 TP 度(2/4/8),配 SP
  2. 再决定 EP(若是 MoE):专家数与卡数的匹配
  3. 再决定 PP:TP+EP 之后模型还装不下的部分,用 PP 跨机切层
  4. 剩下的全给 DP:数据并行的规模决定总吞吐
  5. 长序列才加 CP

问题:7B 模型(dense,hidden 4096,32 层)、seqlen 8k、256 张 H100(32 节点 × 8 卡)、NVLink 域内 + 400G IB 跨机。

第一步:TP。 7B 单层装得下,但 8k 序列的激活大:batch 4 × 8k × 4096 的激活每层 ~6 GB,单卡还要装权重 14 GB + 激活 + KV。选 TP=4(配 SP):权重 3.5 GB、激活 ÷4。

第二步:PP。 TP=4 占 4 卡,单卡还有余量,理论上不用 PP。但 8k 序列的 KV/激活在大 batch 下会溢出——选 PP=2 摊一半层。

第三步:DP。 4 × 2 = 8 卡一组,256 ÷ 8 = DP=32。

第四步:验证。

  • 气泡:PP=2,微批 M=32 → 气泡 p−1M=3%\frac{p-1}{M} = 3\% ✅
  • TP 通信:NVLink 域内 ✅
  • DP 梯度同步:7B 梯度 14 GB ÷ 32 卡(ZeRO-1 分片),与反向重叠 ✅
  • 全局 batch:32 DP × 4 微批 × 8k token ≈ 1M token/step,在稳定区间 ✅

配置:TP=4 × PP=2 × DP=32(+SP)。每一步都是约束推出来的,不是拍脑袋。

每个并行度都有硬约束,配置前先对表:

度上限约束下限/代价约束
TPNVLink 域大小(8 或 72);单层激活被除后仍有余每加一倍通信翻倍;能小则小
PP全局 batch 允许拆出足够微批(M≥4pM \ge 4p)气泡 p−1M\frac{p-1}{M} 线性涨
DP集群剩余卡数;全局 batch 上限梯度同步量 = 模型梯度,越大越贵
EP专家数;网络容量(all-to-all)负载不均的失衡损失
CP序列长度 ÷ CP 度 ≥ 单卡可承受环形通信 + 负载不均

全局 batch 是所有度的交汇点:

全局 batch=DP×微批×CP 段数×每微批 token 数\text{全局 batch} = \text{DP} \times \text{微批} \times \text{CP 段数} \times \text{每微批 token 数}

它必须落在训练稳定区间(大模型典型 1M–64M token)——这个约束反过来限制 PP 的微批数、DP 的规模,是混合并行里最常被忽略的联动约束。

配置定稿前,把单卡显存完整算一遍(7B、TP=4、PP=2、微批 4、8k 序列):

组成计算大小
权重14 GB ÷ TP43.5 GB
优化器状态84 GB ÷ TP4 ÷(ZeRO-1 再除 DP)~0.1 GB
梯度14 GB ÷ TP43.5 GB
激活(每层,有选择性重计算)~6 GB ÷ TP4 ÷ PP2 × 微批4~3 GB × 层数摊销
KV/杂项—~2–4 GB
CUDA 上下文固定~1–2 GB
合计~20–30 GB ✅

留 20–30% 余量给碎片与峰值——显存打满是 OOM 的第一来源。

配置跑起来后,调优按收益排序:

  1. MFU 基线:先算理论 step time(见效率与成本卷),对比实测,差距大再细查
  2. 重叠确认:DP 梯度同步、PP 激活传输是否与计算重叠(利用率曲线锯齿 = 没重叠)
  3. TP 通信:节点内 all-reduce busbw 应 >85%(见 NCCL)
  4. 气泡:PP 气泡占比实测 vs 公式
  5. 负载均衡:EP 的 max/mean、CP 的负载分布
  6. 微批与 batch:在稳定区间内微调
反模式症状修正
TP 跨机step time 慢 5–10 倍,节点内正常TP 收回 NVLink 域内
PP 太深微批太少利用率锯齿 + 均值低减 PP 或加微批
无脑最大 batchloss 曲线异常/不稳回到稳定区间,梯度累积调
显存打满OOM 随机出现留 20–30% 余量
CP 用在短序列上慢而显存没省短序列关 CP
  • 配置顺序:TP(节点内)→ EP → PP(跨机)→ DP(剩余全给)→ CP(长序列才加)。
  • 每个度有硬约束:TP 上限是 NVLink 域,PP 要求微批 ≥ 4p,全局 batch 是交汇约束。
  • 推导模板:约束驱动,每一步"装不下的最小切分",不是拍脑袋。
  • 显存核算模板 + 20–30% 余量;OOM 的第一来源是打满。
  • 调优从 MFU 基线开始,逐层往下查重叠、通信、气泡、负载均衡。