适用读者:要调流水并行度、要设计 checkpoint 策略与故障恢复、要评估 RL 训练可行性的人。
前置:S23-J27(容量与分片)、J16(重计算)、J21(重叠与关键路径)。
覆盖旧文:A-4343 §10.3–§10.5(流水调度与通信重叠 + 数据/checkpoint/故障恢复 + 强化学习,480 点)→ 480 点。
扩展点:E-S23-102(气泡与利用率u = m/(m+p−1):p=4、m=8 → 72.7%)、E-S23-103(1F1B 多花 3% 时间换显存 −62%:2.57 → 0.97 GB)、E-S23-104(checkpoint 写带宽决定重做量:7 vs 20 GB/s → 30 vs 10 s)、E-S23-105(异步保存的"提交点"才是可用恢复点)。
上一篇:S23-J27 · 训练容量估算与状态分片
下一篇:S23-J29 · 资源需求与环境生命周期。
1. 一句话结论
流水并行的两根轴要一起看:时间(气泡)和显存(激活驻留)。 1F1B 比填满排空慢 3%(347 vs 337 ms),却把峰值激活从 2.57 GB 降到 0.97 GB(−62%)——在容量紧张时,"慢一点但跑得起来"才是正确选择。
出处:AI Infra 教材 §10.3–§10.5(
id 4343),Qwen3-8B 36 层分 4 阶段、8 个 micro-batch。
T = (m + p − 1)(t_f + t_b) u = m/(m + p − 1)
2. micro-batch 与梯度累积(§10.3.1)
| 概念 | 含义 | 影响 |
|---|---|---|
| micro-batch | 一次前向/反向实际处理的切片 | 越小 → 气泡越少、矩阵效率越低 |
| 梯度累积 | 多个 micro-batch 的梯度累加后再更新 | 等效全局 batch,不增加显存 |
| 全局 batch | micro × 累积 × DP |
决定梯度信噪比(J27 的 B_noise) |
判据:micro-batch 的取舍是"气泡 vs 矩阵效率"。 切太小,M 变小进入 J17 的低效区;切太大,激活装不下。
3. 流水线:气泡与激活驻留(E-S23-102、E-S23-103)
p 个平衡阶段,每阶段前向 t_f、反向 t_b:
填满排空:T = (m + p − 1)(t_f + t_b),气泡 = (p−1)(t_f+t_b)
p=4, m=8 → u = 8/11 ≈ 72.7%
本算例(Qwen3-8B):36 层 / 4 阶段 = 9 层/阶段;8 个 micro-batch;t_f = 10 ms、t_b = 20 ms、边界传输 1 ms、更新 1 ms。
| 调度 | 时间 | 峰值激活+缓冲 | 能否放进 1 GB |
|---|---|---|---|
| 填满排空 | 337 ms | 约 2.57 GB | ❌ |
| 1F1B | 347 ms | 约 0.97 GB | ✅ |
两者气泡相同:(p−1)(t_f+t_b) = 3×30 = 90 ms
1F1B 的 3% 额外时间来自交错引入的依赖等待(如阶段 3 的 2 ms 空档)
判据:"1F1B 更好"只在显存这根轴上成立。 容量充裕时填满排空更快;容量紧时 1F1B 是唯一能跑的选择。
推论:u = m/(m+p−1) 说明 阶段越多、micro-batch 越少,效率越差。p=4 想上 90%,需要 m≥27。
4. 反向依赖与通信重叠(§10.3.3)
反向顺序 = 前向的逆序 → 梯度一就绪就可以开始归约
分桶(bucket):把小梯度打包,减少启动次数(J19 的 α)
| 手段 | 重叠什么 | 前提 |
|---|---|---|
| 梯度分桶 + 异步 AllReduce | 通信 ↔ 后续层反向计算 | 桶足够大(摊薄 α) |
| 激活重算 | 显存 ↔ 算力 | 重算代价低于省下的字节 |
| 通信/计算多流 | 不同资源并行 | 不争同一接口 |
判据:重叠的天花板是"通信时间 ≤ 计算时间"(J21 的 max 公式)。超过就没有可藏的空间。
4.1 MoE 与长上下文的变化(§10.3.4)
| 负载 | 调度变化 |
|---|---|
| MoE | All-to-All 夹在专家层之间,气泡形状改变;EP 组越大,通信越难重叠 |
| 长上下文 | 激活随序列线性涨 → 必须重算或切 SP;prefill 阶段算力主导 |
5. checkpoint:写带宽决定重做量(E-S23-104)
同步保存:生成一致快照 → 写完 → 继续训练。
异步保存:快照复制到独立缓冲(快)→ 后台写(慢)→ 提交完成后才可用。
算例:每份快照 112 GB。
| 存储档 | 写带宽 | 一份耗时 | 每 20 s 一份的需求 | 结论 |
|---|---|---|---|---|
| Good(1 SU) | 7 GB/s | 16 s | 5.6 GB/s | ✅ 跟得上 |
| 每 10 s 一份 | 7 GB/s | 16 s | 11.2 GB/s | ❌ 队列持续增长 |
| Better | 20 GB/s | 5.6 s | 5.6 GB/s | ✅ 余量大 |
故障在第 50 秒:
| 方案 | 提交时刻 | 可恢复到 | 重做量 |
|---|---|---|---|
| 7 GB/s | 36.5 s、56.5 s(第二份未完成) | 第 20 s | 30 s |
| 20 GB/s | 26.1 s、46.1 s | 第 40 s | 10 s |
前台暂停都是 2×0.5 s = 1 s(一样)
差别只在后台写带宽 → 可用恢复点更近 → 少重做 20 s
判据:checkpoint 的收益要用"重做量×故障率"衡量,不是"保存频率越高越好"。 频率超过写带宽承载能力,队列只会越积越长。
6. 故障规模与掉队者(§10.4.4–10.4.5)
| 现象 | 影响 | 手段 |
|---|---|---|
| 故障率高 | 重做量 × 频率 = 有效算力损失 | 缩短保存周期、异步提交 |
| 掉队者(straggler) | 全体等最慢节点 | 检测 + 剔除/重调度,容忍异步更新 |
| 慢存储 | 数据加载卡住流水 | 预取、打包、本地缓存 |
有效训练进度 ≈ 总时间 × (1 − 故障损失率)
故障损失率 ≈ (MTTR + 重做量) / MTBF
判据:"有效进度"才是最终指标。 卡再多,故障与掉队吃掉的部分也算不进去。
7. 强化学习训练(§10.5,要点)
一轮包含:生成(rollout)→ 验证/打分 → 参数更新。
| 阶段 | 资源特征 | 与监督学习的差别 |
|---|---|---|
| 生成 | 推理式、KV 密集、长尾 | 用推理引擎,不是训练图 |
| 打分 | 规则/奖励模型 | 可能 CPU 或另一模型 |
| 更新 | 与 SFT 相同 | 样本来自自己,分布漂移 |
判据:RL 的瓶颈常在"生成"而非"更新"——rollout 是推理负载(J22–J24 的所有规律都适用),而更新只是一个小步。
8. 可复算(实测)
$ cd /root/博客运营官/blog-v2 && python3 tools/s23_book_calc.py | tail -8
流水 p=4, m=8: u = 0.727;气泡 (4−1)×30 = 90 ms
填满排空 337 ms(峰值 2.57 GB)vs 1F1B 347 ms(峰值 0.97 GB,-62%)
checkpoint(112 GB/份)
7 GB/s: 16.0 s/份;每 10 s 需求 11.2 GB/s > 带宽 → 积压;每 20 s 需求 5.6
20 GB/s: 5.6 s/份;每 10 s 需求 11.2 GB/s;每 20 s 需求 5.6
7 GB/s 提交 36.5/56.5 s;第 50 s 故障 → 恢复到 20 s,重做 30 s
20 GB/s 提交 26.1/46.1 s;第 50 s 故障 → 恢复到 40 s,重做 10 s
9. 前提与边界
| 结论 | 成立条件 | 不成立时 |
|---|---|---|
u = m/(m+p−1) |
各阶段平衡、无传输 | 阶段不均 → 最慢阶段决定 |
| 1F1B 省 62% 显存 | 依赖关系允许提前反向 | 某些算子必须等全批 → 无法交错 |
| 重做量 = 提交间隔 | 写带宽跟得上 | 跟不上 → 按写带宽算 |
| 异步保存更快 | 有独立缓冲 | 缓冲与训练争显存 → 变小 batch |
10. 常见误区
| 误区 | 纠正 |
|---|---|
| "1F1B 一定更快" | 慢 3%,省的是显存 |
| "气泡只跟阶段数有关" | 还跟 m 有关:u = m/(m+p−1) |
| "checkpoint 越勤越好" | 超过写带宽就积压 |
| "保存完就能恢复" | 要等提交完成 |
| "RL 主要花在更新" | 常花在 rollout 生成 |
11. 自测
- p=4、m=8,利用率多少?气泡多少 ms(
t_f+t_b=30)? - 填满排空与 1F1B 的时间与峰值显存各多少?为什么选 1F1B?
- 112 GB 快照、7 GB/s、每 20 s 一份,会积压吗?第 50 s 故障重做多少?
- 写带宽提到 20 GB/s,同一故障重做多少?
答案
8/11 ≈ 72.7%;气泡3×30 = 90 ms。- 337 ms / 2.57 GB vs 347 ms / 0.97 GB;容量只给 1 GB 时只有 1F1B 能跑。
- 需求 5.6 GB/s < 7,不积压;提交 36.5/56.5 s → 恢复到 20 s,重做 30 s。
- 提交 26.1/46.1 s → 恢复到 40 s,重做 10 s。
12. 下一篇
S23-J29 · 资源需求与环境生命周期 —— 进入第 11 章:一个集群的电力、制冷、网络与存储怎么配,从到货到退役要经历哪些阶段。