> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/llm_internals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/llm_internals/di-er-bu-fen-xun-lian-pian/07_distributed_training/summary.md).

# 本章小结

本章用同一套算例（Llama 3 8B 与 70B，512 张 H100）给分布式训练的每一种手段各算了一笔账：省下什么，付出什么，边界在哪。

**数据并行。** 各卡分母相等时，梯度平均与大批次梯度严格相等，依据是求导的线性；各卡有效词元数不同则不再相等。Ring AllReduce 每卡发送 $2\frac{K-1}{K}M$ 字节，带宽项与卡数无关，延迟项随卡数线性增长。Llama 3 8B 在 64 张卡上同步一次约 0.63 s，要靠装桶和与反向重叠藏起来。硬上限是显存：每参数 16 字节，8B 的模型状态已是 128.5 GB。

**ZeRO 与 FSDP。** 三个阶段依次分掉优化器状态、梯度和参数，每卡模型状态降到 $4\Psi + 12\Psi/K$、$2\Psi + 14\Psi/K$、$16\Psi/K$。前两个阶段的通信量与数据并行同为 2Ψ，ZeRO-3 为 3Ψ。ZeRO-3 的峰值还要加上当前分片单元和预取单元的完整参数；它的 All-Gather 在关键路径上，跨慢链路、小批量时应改用节点内分片的 HSDP。ZeRO 不减少激活。

**张量并行。** MLP 先列切后行切，注意力按头切，一层前向 2 次、反向 2 次 AllReduce，每卡每层发送 $8\frac{t-1}{t}sbh$ 个元素。Llama 3 70B 的一个微批量要传 75.2 GB，走 NVLink 约 0.17 s，走节点间网口约 1.50 s，张量并行因此不出节点。序列并行把 LayerNorm 与 dropout 区域的 $10sbh$ 激活也除以 $t$，通信字节数不变。

**流水线并行与混合并行。** 气泡占理想计算时间的 $(p-1)/m$。1F1B 不减气泡，只把第 $i$ 级同时持有的激活从 $m$ 份降到 $p-i+1$ 份。通信最密且无法重叠的张量并行走节点内，流水线的点对点通信走节点间，数据并行放最外层。并行度受两条恒等式约束：$N = t \times p \times d$，全局批量等于 $d \times m \times b$。

**激活重计算。** 标准 Transformer 层每层要存 $sbh(34 + 5as/h)$ 字节，GPT-3 175B 在 2K 序列下是 2.87 GB，96 层共 275 GB。全量重计算只留层输入，计算量增加三分之一；选择性重计算只丢 `[a, s, s]` 的那几项，省 70% 的激活，多 2.7% 的运算，而这几项正是 FlashAttention 本来就不保存的。卸载到主机内存是第三条路，前提是带宽充足且传输能被计算盖住。重计算让 HFU 上升、MFU 下降，读利用率数字要先问清口径和分母。

**混合精度。** FP16 有两个失效：小梯度下溢为 0，靠损失缩放补救；小更新被权重吞掉，靠 FP32 主权重补救。BF16 的范围与 FP32 相同，省掉了损失缩放，省不掉主权重。模型状态仍是每参数 16 字节，省下的是激活显存、通信字节和矩阵乘法的时间。FP8 与 NVFP4 的关键都在缩放因子的粒度，NVFP4 折合每元素 4.5 位。

**检查点与容错。** 检查点每参数 12 到 14 字节，Llama 3 70B 接近 1 TB。最优保存间隔是 $\sqrt{2\delta M}$：按 Llama 3 公开的故障数据，集群 MTBF 约 3.09 小时，同步保存停顿 60 s 时约 19 分钟存一次，两阶段异步保存把停顿压到 5 s 后约 5.6 分钟。卡数变化后能否恢复，取决于元数据是否按逻辑张量的全局形状与分片区间记录。挂起、慢节点和静默数据损坏不会自己报错，要靠超时、逐卡监控和副本间比对发现。

这七节调的全是训练如何执行。7.7 落盘的那份检查点里，权重已经训好，却没有任何一步教过它在被提问时直接作答。

***

> 📝 **发现错误或有改进建议？** 欢迎提交 [Issue](https://github.com/yeasy/llm_internals/issues) 或 [PR](https://github.com/yeasy/llm_internals/pulls)。
