跳转至

混合并行

混合并行 (Hybrid Parallel) 组合数据并行、张量并行、流水线并行和专家并行,支撑超大模型训练。单个并行维度往往受限于通信或显存,混合并行通过多维度叠加,同时解决「放得下」和「跑得快」两个问题。

混合并行的由来是:每一种并行都有各自的失效边界——数据并行受「单卡放得下模型」限制,张量并行受高速互联域大小限制,流水线并行受气泡与 stage 均衡限制。当模型规模超过任一单维度的能力时,就需要把多个维度「乘」起来组成进程网格。Megatron-LM 的 3D 并行(数据 × 张量 × 流水线)与 DeepSpeed 的 ZeRO 三维并行是这一思想的代表实现,见 Megatron-LM 论文 。

快速开始

先用单一并行验证正确性,再按显存瓶颈加入维度;记录 DP、TP、PP、EP 的进程网格与节点拓扑。建议步骤:

  1. 先用纯数据并行 (DDP/ZeRO) 在小规模跑通正确性,得到可对比的 loss 基线。
  2. 定位显存瓶颈:单层权重放不下时引入张量并行,整个模型放不下时引入流水线并行,MoE 专家过多时引入专家并行。
  3. 明确进程网格,例如 (DP, TP, PP, EP) 各维度的取值,以及每个 rank 在网格中的坐标。
  4. 把通信密集的 TP group 映射到同机或 NVLink 域,DP 映射到可跨节点的更大域。
  5. 逐步叠加维度,每加一个维度都重新验证 loss 与吞吐。

验证成功:最终配置的 loss 与小规模基线一致,各维度通信耗时符合预期,且总 GPU 数等于各维度乘积。

设计原则

通信最频繁的 TP 应放在高速互联域,DP 可跨更大网络域。总 GPU 数通常等于各并行维度乘积:

\[ N = \text{DP} \times \text{TP} \times \text{PP} \times \text{EP} \]

这是因为不同并行维度的通信频率和通信量差异很大:张量并行在前向和反向的几乎每一层都要通信,必须放在低延迟、高带宽的域内;数据并行只在每个 step 做梯度同步,频率低,可以容忍跨节点的较慢网络;流水线并行只在 stage 边界传递激活和梯度,通信量更小。

各维度的通信量可粗略对比如下(\(b\)、\(s\)、\(h\) 分别为 batch、序列长度、隐藏维度,\(\Psi\) 为参数量):

并行维度 通信类型 每步通信量量级 频率
数据并行 DP all-reduce 约 \(2\Psi\) 每个 step 一次
张量并行 TP all-reduce 每层约 \(4 \times b s h\) 每层每个 token
流水线并行 PP 点对点 send/recv 约 \(2(P-1) b s h\) 每个 micro batch
专家并行 EP all-to-all 约 \(2 b s h k\)(\(k\) 为 top-k) 每个 MoE 层

因此,进程到物理拓扑的映射直接影响训练效率。把 TP 的 rank 打散到不同节点会导致大量跨节点通信,是常见的性能陷阱。合理的做法是「先定拓扑,再定映射」,让网格坐标与物理位置对齐。

混合并行的组合方式没有固定答案:总 GPU 数给定后,各维度的乘积可以有多种分解,而每种分解的通信量、气泡大小、显存占用都不同,需要结合模型规模和集群拓扑实际测量。

案例

以 64 卡按 DP=4、TP=8、PP=2 的配置训练为例。先测每种通信的耗时:TP 组内的 all-reduce、DP 组内的梯度同步、PP 边界处的激活传输,找到占总时间比例最高的一项。若 TP 的 all-reduce 跨节点且耗时明显偏高,说明进程映射未对齐拓扑,应调整映射让 TP 组落在同机内。

反之,若乘积关系满足但吞吐不理想,说明「乘积满足」只是必要条件而非充分条件:还要看每个维度的通信是否落在合适的网络域、气泡是否可控、各 stage 是否均衡。仅满足 64 = 4 × 8 × 2 并不保证高效。

相关主题