📑 本页目录(点开跳转)
14 · 并行策略怎么组合
⏱ 22 分钟 | ⭐ 把前四章拼成一个能用的方案
🎯 一句话
数据并行、张量并行、流水线并行不是三选一,是三个维度。 而它们的排列顺序不是偏好问题 —— 是第 5 章的带宽算出来的唯一答案。
🏛️ 一、黄金法则
信息关系
对照
一个 64 卡(8 机 × 8 卡)的典型配置:
TP=8 ← 机内 8 张卡,走 NVLink
PP=4 ← 4 组机器,跨机传激活
DP=2 ← 剩下的维度做数据并行
8 × 4 × 2 = 64 ✅
🔑 记住这个顺序的方法: 通信最凶的贴着最快的线。 就这一句。
🧭 二、决策流程(照着走)
流程图
⭐ 最重要的一条:能用 FSDP 解决就别上 3D 并行。 3D 并行的工程复杂度是数量级的差别 —— 调试、checkpoint、 负载均衡、超参都会变难。只在 FSDP 真的不够时才上。
📐 三、怎么定各个维度的大小
TP:先定它,且不超过 8
算一算
TP = 让【单层能装下】的最小值,且 ≤ 单机卡数
⭐ 判断依据:单层参数 + 单层激活 < 单卡显存的 60%
⭐ TP=8 是甜点,TP=16 通信占比已经很难看(第 12 章)
PP:让每级的显存刚好装下
算一算
PP ≈ 总层数 / (单卡能装下的层数)
⚠️ 然后检查气泡:M ≥ 4P(第 13 章)
如果全局 batch 不够大到支撑 M ≥ 4P,
→ 说明 PP 太大了,往回调 ⭐
DP:剩下的全给它
关键信息
💡 一个常被忽略的约束:全局 batch
信息关系
🧠 四、MoE 的专家并行(EP)
结果对照
| 特点 | 说明 |
|---|---|
| 通信原语 | All2All(第 5 章),不是 AllReduce ⭐ |
| 通信量 | 中等,但模式不规则 |
| 主要难点 | ⭐ 负载不均衡 —— 有的专家被路由到很多 token,有的很少 |
| 常见解法 | 辅助损失鼓励均衡、容量因子(超出就丢弃)、专家容量上限 |
💥 负载不均衡是 MoE 训练最头疼的问题: 如果 90% 的 token 都路由到同一个专家, 那张卡就成了瓶颈,其他卡在等它 —— 整个集群的效率被一张卡拖垮。
🧵 五、序列/上下文并行(长序列时)
结果对照
💡 这是 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 并行是千卡以上才需要考虑的事 —— 别过度设计。
🔬 七、怎么验证你的配置是对的
流程图
# 🧩 骨架:`total_gpus` 来自你自己的代码,这一段只看写法
# ⭐ 一个实用的扫描脚本骨架
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 同源 |
| 《大模型全景导论》主线 4 · 它怎样从续写机变助手 预训练占 99% 算力 | 那边给的是"要烧多少算力",本章是这些算力怎么切到卡上 |
| 《强化学习基础》12 RLHF 全流程 阶段 3 的工程现实 | 四个模型各要一套并行配置(两个在训、两个冻结)—— 本章决策流程最难的一次实战 ⭐ |
✅ 检查点
- 黄金法则是什么?用一句话概括记忆方法。
- 64 卡(8 机×8 卡)的典型配置是什么?
- 决策流程的第一步是什么?最重要的一条建议是什么?
- TP 怎么定?为什么不超过 8?
- PP 定完后要检查什么?不满足怎么办?
- 全局 batch 的约束是什么?实践中的定法?
- MoE 用什么通信原语?最头疼的问题是什么?
- 上下文并行和 FlashAttention 有什么共同点?
- 怎么验证配置是对的?为什么不能只凭理论?
👀 答案
- TP 放机内 NVLink、PP 跨机、DP 最外层。记忆方法:通信最凶的贴着最快的线。
- TP=8(机内)、PP=4(跨机)、DP=2,8×4×2 = 64。
- 第一步:模型能装进一张卡吗(含优化器状态)——能就纯 DP + ZeRO-2。最重要的建议:能用 FSDP 解决就别上 3D 并行,它的工程复杂度是数量级差别。
- TP = 让单层能装下的最小值,判断依据是单层参数+激活 < 单卡显存 60%。不超过 8 是因为跨机带宽撑不住(TP 通信量和 TP 度无关但计算被分摊,TP=16 通信占比已很难看)。
- 检查气泡:M ≥ 4P。如果全局 batch 不够大到支撑 M ≥ 4P,说明 PP 太大了,要往回调。
- 全局 batch = micro_batch × M × DP。太大收敛变差,太小则 M 不够气泡大、DP 通信占比高。实践:先定一个合理的全局 batch,再反推 DP、M、micro_batch。
- All2All(不是 AllReduce)。最头疼的是负载不均衡——如果 90% 的 token 路由到同一个专家,那张卡成为瓶颈,整个集群被一张卡拖垮。解法:辅助损失、容量因子。
- 都是分块 + 增量累积 softmax——FlashAttention 在片上分块,Ring Attention 跨卡分块。
- ①算 MFU(<35% 有问题)②分别测只开 DP / 加 TP / 加 PP 的单步时间,差值就是各自开销 ③profiler 看 nccl 占比 ④做扫描实验。不能只凭理论是因为实测扫描 30 分钟能省下几周的低效训练——理论只用来缩小搜索范围,最终答案靠测。
🛑 可以停在这里
⚡ 走神救援
先记住这几件事
- 数据、张量和流水线并行可以组合,但复杂度和通信成本也会叠加。
- 通信频繁的工作优先靠近高速互联,先尝试能装得下的较简单方案。
- 固定总卡数和训练条件,联合检查显存、全局 batch、气泡与实际吞吐。
下一节 👉 15-推理和训练是两回事.md ⭐