数据截至 (上游 commit e79cb4c1bae1)
01 · 五种并行维度与进程组网格
这一章讲什么: Megatron 的全局地图。五种并行各自「切的是哪样东西」、
initialize_model_parallel怎么把 world_size 张成进程组网格、以及训练入口pretrain()长什么样。读完你应该能对着一组--tensor-model-parallel-size之类的参数,说出每个 rank 在网格里的坐标。
1. 它要解决的小问题
一个 175B 参数的模型,bf16 光参数就 350GB,一张 80GB 的 H100 连参数都装不下,遑论梯度和优化器状态。
于是问题变成:沿哪个维度把训练切开,摊到几千张卡上? 而且切完之后,跨卡的部分还得拼出和没切时一模一样的数学结果。
Megatron 的历史贡献,是把「切法」系统化成了几个正交维度——每把刀切的方向不同、产生的通信模式不同,可以自由组合。这一章先把五把刀认全。
2. 五种并行,各切什么
一张表里认全五把刀。注意「切什么」这一列——它们切的是不同的东西,这正是「正交」的含义:
| 维度 | 全称 | 切什么 | 通信原语 | 代价特征 |
|---|---|---|---|---|
| TP | Tensor Parallelism 张量并行 | 单层的权重矩阵(按列/按行) | all-reduce(每层两次) | 通信量大,只敢开在节点内 NVLink 域(一般 ≤8) |
| PP | Pipeline Parallelism 流水并行 | 层(模型的不同段放不同卡) | P2P send/recv(只发生在段边界) | 通信量小,但有「气泡」 (卡等人) |
| DP | Data Parallelism 数据并行 | batch(每卡一份完整模型、不同数据) | 梯度同步(ZeRO 形态:reduce-scatter + all-gather) | 通信量与模型大小成正比,但能和计算重叠 |
| CP | Context Parallelism 上下文并行 | 序列(长序列切成块,attention 跨块交换 KV) | all-gather / P2P 环(attention 内部) | 专为长序列;切激活不切权重 |
| EP | Expert Parallelism 专家并行 | MoE 的专家(不同卡放不同专家) | all-to-all(按路由结果搬运 token) | 只在 MoE 模型里存在 |
还有一个常被一起提的 SP(Sequence Parallelism 序列并行):它不是独立维度,而是 TP 的补丁——把 LayerNorm/Dropout 处没被 TP 切开的激活再按序列维切一次,省显存。它复用 TP 的进程组,见 02 章。
一句话直觉
五种并行 = 五种切蛋糕的刀法。 蛋糕有三层(参数、激活、优化器状态),每把刀下刀的方向不同:
- TP 横着切参数矩阵;
- PP 竖着按层分段;
- DP 不切实物,复制整份蛋糕、各喂不同数据;
- CP 沿序列维切激活;
- EP 把 MoE 专家这盘菜分到不同桌上。
刀法可以叠加:world_size = TP × PP × DP × CP(EP 从 DP 里划出,见 §5)。这就是「5D 并行」说法的出处。