🏠 总目录📚 本教程 并行策略组合
📑 本页目录(点开跳转)

14 · 并行策略怎么组合

22 分钟 | ⭐⭐ 把前四章拼成一个能用的方案


🎯 一句话

数据并行、张量并行、流水线并行不是三选一,是三个维度而它们的排列顺序不是偏好问题 —— 是第 5 章的带宽算出来的唯一答案。

数据并行每张卡一份【完整模型】各喂不同数据GPU0整个模型GPU1整个模型GPU2整个模型GPU3整个模型张量并行一层被【切开】分到多张卡上GPU0同一层的一片GPU1同一层的一片GPU2同一层的一片GPU3同一层的一片流水线并行不同【层】分到不同卡上GPU0第 1 段层GPU1第 2 段层GPU2第 3 段层GPU3第 4 段层同样是 4 张卡,切法完全不同通信:每步同步梯度(AllReduce)通信:每层内部都要同步,最频繁通信:只在段与段之间传激活,最省⭐ 实际大模型训练是三者【组合】使用 —— 张量并行放机内(带宽高),流水线/数据并行跨机
同样 4 张卡,三种切法完全不同 —— 切的分别是数据、一层的内部、层与层之间。⭐ 通信量差异巨大:张量并行最频繁(所以放机内),流水线最省(所以能跨机)。

🏛️ 一、黄金法则

   ⭐ 按【通信频率】从高到低,映射到【带宽】从高到低的层级:

   张量并行 TP   → 通信最频繁(每层 4 次) → 放【机内 NVLink】
   流水线并行 PP → 通信较少(每切分点一次)→ 放【跨机】
   数据并行 DP   → 通信最少(每步一次)    → 放【最外层】
   一个 64 卡(8 机 × 8 卡)的典型配置:

   TP=8   ← 机内 8 张卡,走 NVLink
   PP=4   ← 4 组机器,跨机传激活
   DP=2   ← 剩下的维度做数据并行

   8 × 4 × 2 = 64 ✅
物理布局:TP=8 在机内 · PP=4 跨机 · DP=2 在最外层 PP stage 0 这两台机器 = DP 的两个副本 TP=8 在机内 机器 0 0 1 2 3 4 5 6 7 机器 1 8 9 10 11 12 13 14 15 PP:激活传到下一级 PP stage 1 机器 2 16 17 18 19 20 21 22 23 机器 3 24 25 26 27 28 29 30 31 ⋯ 机器 4–7 同理,继续排成 PP stage 2 和 stage 3
横着看是 DP 的两个副本,竖着看是 PP 的相邻 stage,一台机器内部的 8 张卡是 TP 组(走 NVLink)。8 × 4 × 2 = 64。

🔑 记住这个顺序的方法通信最凶的贴着最快的线。 就这一句。


🧭 二、决策流程(照着走)

   ① 模型能装进一张卡吗(含优化器状态)?
      是 → 【纯数据并行 + ZeRO-2】,结束 ⭐
      否 ↓

   ② 上 ZeRO-3 / FSDP 能装下吗?
      是 → 【FSDP】(多机用 HYBRID_SHARD),结束 ⭐
      否 ↓

   ③ 单层能装进一张卡吗?
      否 → 必须加【张量并行】(TP ≤ 8,机内)
      是 ↓

   ④ 还是装不下?
      → 加【流水线并行】(跨机,注意 M ≥ 4P)

   ⑤ 是 MoE 模型?
      → 加【专家并行 EP】(见下)

   ⑥ 序列特别长(≥32K)?
      → 加【序列/上下文并行】

最重要的一条能用 FSDP 解决就别上 3D 并行。 3D 并行的工程复杂度是数量级的差别 —— 调试、checkpoint、 负载均衡、超参都会变难。只在 FSDP 真的不够时才上。


📐 三、怎么定各个维度的大小

TP:先定它,且不超过 8

   TP = 让【单层能装下】的最小值,且 ≤ 单机卡数

   ⭐ 判断依据:单层参数 + 单层激活 < 单卡显存的 60%
   ⭐ TP=8 是甜点,TP=16 通信占比已经很难看(第 12 章)

PP:让每级的显存刚好装下

   PP ≈ 总层数 / (单卡能装下的层数)

   ⚠️ 然后检查气泡:M ≥ 4P(第 13 章)
      如果全局 batch 不够大到支撑 M ≥ 4P,
      → 说明 PP 太大了,往回调 ⭐

DP:剩下的全给它

   DP = 总卡数 / (TP × PP)

   ⚠️ DP 太大时,全局 batch 会大到影响收敛
      → 这时该考虑增大 micro-batch 或减少 DP

💡 一个常被忽略的约束:全局 batch

   全局 batch = micro_batch × M × DP

   ⚠️ 它不能无限大:
   · 太大 → 收敛变差(大 batch 泛化问题)
   · 太小 → M 不够,气泡大;DP 的通信占比也高

   ⭐ 实践中常常是【先定一个合理的全局 batch】,
     再反推 DP、M、micro_batch 的组合

🧠 四、MoE 的专家并行(EP)

   MoE:每个 token 只激活少数几个专家
        → 参数量巨大但计算量不变

   ⭐ 专家并行:把不同的专家放到不同的卡上

   GPU0: 专家 1-2    GPU1: 专家 3-4
   GPU2: 专家 5-6    GPU3: 专家 7-8

   每个 token 经过路由后,被【All2All】发送到对应专家所在的卡
   算完再 All2All 送回来
特点 说明
通信原语 All2All第 5 章),不是 AllReduce ⭐
通信量 中等,但模式不规则
主要难点 负载不均衡 —— 有的专家被路由到很多 token,有的很少
常见解法 辅助损失鼓励均衡、容量因子(超出就丢弃)、专家容量上限

💥 负载不均衡是 MoE 训练最头疼的问题: 如果 90% 的 token 都路由到同一个专家, 那张卡就成了瓶颈,其他卡在等它 —— 整个集群的效率被一张卡拖垮。


🧵 五、序列/上下文并行(长序列时)

   问题:序列 128K 时,激活显存爆炸(即使有 FlashAttention)

   ✅ 上下文并行(Context Parallel / Ring Attention):
     把【序列维度】切开分给多卡
     attention 需要全局信息 → 用环形通信传递 K、V

   ⭐ 和 TP 正交,可以叠加

💡 这是 128K+ 上下文训练的必需品。 Ring Attention 的思路和 FlashAttention 一脉相承 —— 都是"分块 + 增量累积 softmax",只是一个在片上分块,一个跨卡分块。


📋 六、几个真实配置参考

场景 配置
7B 微调,8 卡 FSDP(HYBRID_SHARD)+ 梯度检查点,不用 TP/PP
7B 预训练,64 卡 DP=64 + ZeRO-2 ⭐
70B 预训练,512 卡 TP=8, PP=8, DP=8 + 序列并行
175B+ 预训练,数千卡 TP=8, PP=16, DP=n + 交错式 1F1B
MoE(如 8×7B),64 卡 EP=8, TP=1~2, DP=剩余
长上下文(128K) 上下文并行 + TP + FSDP

注意第一行和第二行大部分人的实际场景是这两行。 3D 并行是千卡以上才需要考虑的事 —— 别过度设计。


🔬 七、怎么验证你的配置是对的

   ① 算 MFU(第 4 章)—— 低于 35% 说明配置有问题
   ② 分别测:
      · 只开 DP 的单步时间
      · 加上 TP 后的单步时间   → 差值就是 TP 的通信开销
      · 加上 PP 后的单步时间   → 差值就是气泡 + PP 通信
   ③ 用 profiler 看 nccl kernel 的占比
   ④ ⭐ 做一次【扫描实验】:固定总卡数,试几组 (TP, PP, DP)
# ⭐ 一个实用的扫描脚本骨架
for tp in [1, 2, 4, 8]:
    for pp in [1, 2, 4, 8]:
        dp = total_gpus // (tp * pp)
        if dp < 1: continue
        if micro_bs * n_micro * dp != global_batch: continue
        run_benchmark(tp, pp, dp)      # 记录 MFU 和单步时间

🔑 不要凭理论选配置 —— 实测扫描 30 分钟,能省下几周的低效训练。 理论只用来缩小搜索范围(比如 TP ≤ 8),最终答案靠测。


🔗 和站内其他章的关系

相关的地方 这里的位置
第 5 章 带宽层级 黄金法则的唯一依据
第 10 章13 章 本章把它们拼起来
第 11 章 HYBRID_SHARD 决策树第二步
第 4 章 MFU 验证配置的标准
第 8 章 分块累积 Ring Attention 同源
《大模型全景导论》04 训练三阶段 预训练占 99% 算力 那边给的是"要烧多少算力",本章是这些算力怎么切到卡上
《强化学习基础》12 RLHF 全流程 阶段 3 的工程现实 四个模型各要一套并行配置(两个在训、两个冻结)—— 本章决策流程最难的一次实战 ⭐

✅ 检查点

  1. 黄金法则是什么?用一句话概括记忆方法。
  2. 64 卡(8 机×8 卡)的典型配置是什么?
  3. 决策流程的第一步是什么?最重要的一条建议是什么?
  4. TP 怎么定?为什么不超过 8?
  5. PP 定完后要检查什么?不满足怎么办?
  6. 全局 batch 的约束是什么?实践中的定法?
  7. MoE 用什么通信原语?最头疼的问题是什么?
  8. 上下文并行和 FlashAttention 有什么共同点?
  9. 怎么验证配置是对的?为什么不能只凭理论?
👀 答案
  1. TP 放机内 NVLink、PP 跨机、DP 最外层。记忆方法:通信最凶的贴着最快的线
  2. TP=8(机内)、PP=4(跨机)、DP=2,8×4×2 = 64。
  3. 第一步:模型能装进一张卡吗(含优化器状态)——能就纯 DP + ZeRO-2。最重要的建议:⭐能用 FSDP 解决就别上 3D 并行,它的工程复杂度是数量级差别。
  4. TP = 让单层能装下的最小值,判断依据是单层参数+激活 < 单卡显存 60%。不超过 8 是因为跨机带宽撑不住(TP 通信量和 TP 度无关但计算被分摊,TP=16 通信占比已很难看)。
  5. 检查气泡:M ≥ 4P。如果全局 batch 不够大到支撑 M ≥ 4P,说明 PP 太大了,要往回调
  6. 全局 batch = micro_batch × M × DP。太大收敛变差,太小则 M 不够气泡大、DP 通信占比高。实践:先定一个合理的全局 batch,再反推 DP、M、micro_batch
  7. All2All(不是 AllReduce)。最头疼的是负载不均衡——如果 90% 的 token 路由到同一个专家,那张卡成为瓶颈,整个集群被一张卡拖垮。解法:辅助损失、容量因子。
  8. 都是分块 + 增量累积 softmax——FlashAttention 在片上分块,Ring Attention 跨卡分块。
  9. ①算 MFU(<35% 有问题)②分别测只开 DP / 加 TP / 加 PP 的单步时间,差值就是各自开销 ③profiler 看 nccl 占比 ④做扫描实验。不能只凭理论是因为实测扫描 30 分钟能省下几周的低效训练——理论只用来缩小搜索范围,最终答案靠测。

🛑 可以停在这里

走神救援

⭐⭐三种并行不是三选一,是三个维度,排列顺序由带宽唯一决定。⭐黄金法则:TP 放机内 NVLink、PP 跨机、DP 最外层——记忆方法是「通信最凶的贴着最快的线」;64 卡典型配置 TP=8 × PP=4 × DP=2决策流程:①装得进一张卡 → 纯 DP + ZeRO-2 ②ZeRO-3/FSDP 能装下 → FSDP(多机 HYBRID_SHARD)单层装不下 → 必须加 TP(≤8,机内) ④还不够 → 加 PP(注意 M≥4P)⑤MoE → 加 EP ⑥超长序列 → 上下文并行。⭐最重要的一条:能用 FSDP 就别上 3D 并行(工程复杂度是数量级差别)。定维度:TP 取"让单层装下"的最小值(单层参数+激活 < 单卡显存 60%);PP 定完必须检查 M≥4P,不满足说明 PP 太大要回调;DP 拿剩下的。⭐常被忽略的约束:全局 batch = micro_batch × M × DP,太大收敛差、太小气泡大 → 实践是先定合理的全局 batch 再反推MoE 的专家并行All2All(不是 AllReduce),⭐最头疼的是负载不均衡(90% token 路由到同一专家 → 整个集群被一张卡拖垮),解法是辅助损失和容量因子。上下文并行(Ring Attention)切序列维度,和 FlashAttention 同源——都是"分块+增量累积 softmax",一个片上一个跨卡。真实配置:⭐7B 微调 8 卡就用 FSDP+梯度检查点,不要 TP/PP;7B 预训练 64 卡用 DP+ZeRO-2;70B/512 卡才是 TP=8,PP=8,DP=8——3D 并行是千卡以上的事,别过度设计。⭐验证靠实测扫描(固定总卡数试几组 TP/PP/DP),30 分钟的扫描能省几周的低效训练;理论只用来缩小搜索范围

下一节 👉 15-推理和训练是两回事.md ⭐⭐

打卡记录保存在你的浏览器里,首页能看到总进度