第四篇 · 训练系统与并行策略
一个几百 GB 的模型,怎么放到几千张卡上训出来
⏳ 本章待补充
这一章是整套教材的重心,也是 AI Infra 面试与科研最密集的区域。计划投入 3 周以上。
这一章要回答的问题
一个几百 GB 甚至上 TB 的模型,怎么放到几千张卡上训出来?
整章其实只在解决两个约束的对抗:显存不够 和 通信太慢。每一篇论文都是在二者之间找一个更好的平衡点。
前置知识
- 第二篇(知道显存里都放了什么)
- 第一篇 1.1 节(知道跨卡通信受限于带宽而非算力)
- 集合通信的 5 个基本操作:broadcast、reduce、all-reduce、gather、scatter(以及 all-gather、reduce-scatter)
先记住这张账
一个 参数、用 Adam 训练的模型,FP16 混合精度下每张卡要放:
| 项目 | 字节数 | 说明 |
|---|---|---|
| 参数(FP16) | 2P | |
| 梯度(FP16) | 2P | |
| 优化器状态(FP32 副本 + 动量 + 方差) | 12P | 最大的一块 |
| 合计 | 16P | 不含激活值 |
所以一个 7B 模型仅模型状态就要 112 GB——一张 80 GB 的卡都放不下。这就是 ZeRO 存在的理由。
计划覆盖的内容
| 小节 | 回答的问题 |
|---|---|
| 流水线并行 | GPipe 的气泡怎么算?PipeDream 的 1F1B 怎么省显存? |
| 张量并行 | Megatron 为什么每两层才需要一次 all-reduce? |
| 显存优化 | ZeRO 的三个 stage 各切了什么、多做了什么通信? |
| 3D 并行 | 给定集群规模,怎么决定 TP × PP × DP 的划分? |
| MoE | all-to-all 通信量与负载均衡怎么影响系统设计? |
| 动手实验 | 算清 ZeRO 三阶段显存;用 FSDP 在多卡上训一个小模型 |
对应的论文(见论文清单)
GPipe、PipeDream、Megatron-LM、ZeRO、Megatron-DeepSpeed、PyTorch FSDP、序列并行(MLSys 2023)、Alpa、GShard、Switch Transformers,以及 Llama 3 / DeepSeek-V3 的基建章节。
← 返回 首页 | 上一章:第三篇 · GPU 与算子优化