GPU 并行策略详解:TP / PP / EP / SP

训练和推理大模型时,单卡显存和算力远远不够。本文系统梳理四种主流并行策略 —— Tensor Parallelism、Pipeline Parallelism、Expert Parallelism、Sequence Parallelism,关键机制配有可交互动画。

Tensor Parallelism (TP)

在单层内部切分权重矩阵,每张卡算一部分,再 AllReduce 合并结果。

Column Parallel:按列切分权重矩阵

把原始权重矩阵 按列切成两半,分给两张卡:

  • GPU 0 持有
  • GPU 1 持有

每张卡用完整输入 乘上自己那一半权重,得到完整结果的不同列。

交互动画:完整 MLP 层的 TP 计算流程(Megatron-LM 风格)

Megatron-LM 的精髓是 Column Parallel → GeLU(无通信)→ Row Parallel → AllReduce,整个 MLP 前向只需 1 次 AllReduce。下面动画逐步展示两张 GPU 上的完整计算流程:

**核心要点:**整个 MLP 前向只需 1 次 AllReduce!

**为什么:**Column Parallel 输出的 分别是完整结果的不同列。GeLU 是逐元素操作,不需要完整向量。Row Parallel 的输出 形状相同但值不同,加起来才是完整结果 → AllReduce 求和。

**对比朴素方案:**如果两个 Linear 都用 Column Parallel,中间需要 AllGather 拼接完整结果才能做第二次乘法。Megatron 的 Column→Row 组合巧妙地跳过了中间通信。

**典型配置:**TP = 8(单节点 8 卡 NVLink 900GB/s),每层 forward 1 次 AllReduce,backward 1 次 AllReduce。

Pipeline Parallelism (PP)

按层切分模型,每张卡(或一组卡)负责连续的几层,数据像流水线一样流过。

模型按层切分到 4 个 Stage

Stage GPU 负责的层
Stage 0 GPU 0 Layer 0-7 + Embedding
Stage 1 GPU 1 Layer 8-15
Stage 2 GPU 2 Layer 16-23
Stage 3 GPU 3 Layer 24-31 + LM Head

交互动画:1F1B Pipeline Schedule

1F1B(One Forward One Backward)调度让每个 stage 在稳态时交替执行一个 forward 和一个 backward 微批,最大化 GPU 利用率。下面动画展示 4 个 GPU、4 个 micro-batch 的 forward / backward 流转(深色 = Forward,浅色 = Backward,空格 = Pipeline Bubble):

**核心要点:**PP 按层切,每个 stage 只存自己那几层的权重和激活,stage 间通过网络传激活值。

**通信量:**只传激活张量(比 AllReduce 小很多),可跨节点。

**缺点:**Pipeline bubble(GPU 空等),需要足够多 micro-batch 来填满流水线。

**典型配置:**PP = 4-16,跨节点通过 InfiniBand / RoCE 连接。

Expert Parallelism (EP)

MoE 模型专属:每个 Expert 放在不同 GPU 上,Router 决定 token 发给哪个 Expert。

交互动画:Token Dispatch(Router → Expert 路由过程)

下面动画展示 token 经过 Router 计算 gating score、通过 All-to-All 发到目标 Expert 的 GPU、计算后再发回的完整 dispatch 过程:

EP vs TP 在 MoE 层的对比

方案 切分方式 通信 负载
TP=8(切每个 Expert 内部) 每卡持有所有 Expert 的 1/8 每层 AllReduce(大) 均衡(每卡算一样的量)
EP=8(每个 Expert 独占一卡) 每卡持有 1 个完整 Expert All-to-All(token dispatch) 可能不均(热门 Expert 更忙)

**核心要点:**EP 把不同 Expert 放在不同卡上,通过 All-to-All 通信交换 token。

**优势:**天然匹配 MoE 结构,每卡只需存一个 Expert 的权重和优化器状态。

**挑战:**All-to-All 通信量取决于 batch size 和 expert 数量;负载不均衡时部分卡空闲。

**典型配置:**EP = Expert 数量 或其因子(EP=8 for 8 experts)。

Sequence Parallelism (SP)

沿序列维度切分,TP 不能切的操作(LayerNorm、Dropout)由 SP 来分摊。

问题:TP 切不了 LayerNorm 和 Dropout

一个 Transformer Layer 内部的操作,可以分成两类:

  • 可以 TP 切(按隐藏维度切分):Self-Attention、FFN / MLP
  • 需要完整隐藏维度(TP 切不了):LayerNorm、Dropout + Residual

SP 的解法:在序列维度上切分这些操作

输入序列 [batch, seq_len, hidden_dim] 沿 seq_len 维度切给两张卡:

  • GPU 0:前半序列(如前 4 个 token)→ 在本地做 LayerNorm / Dropout
  • GPU 1:后半序列(如后 4 个 token)→ 在本地做 LayerNorm / Dropout

因为 LayerNorm / Dropout 都是沿 hidden 维度逐 token 独立的操作,按序列切分完全不影响正确性。

TP + SP 配合:完整的一层流程

1
2
3
4
5
SP 区域: LayerNorm (每卡只算自己那段序列)
↓ AllGather (拼完整序列给 TP)
TP 区域: Attention / FFN (按隐藏维度切分计算)
↓ ReduceScatter (AllReduce 拆成两步, 同时切回序列维度)
SP 区域: Dropout + Residual (每卡只算自己那段序列)

关键洞察:。SP 把这两步拆开,刚好在 TP↔SP 切换时自然完成通信,总通信量不变

**核心要点:**SP 不是独立的并行策略,是 TP 的配套补充。TP 切 Attention/FFN,SP 切 LayerNorm/Dropout。

**省了什么:**激活值显存。没有 SP 时,每张卡都要存完整序列的 LayerNorm 激活;有了 SP,每卡只存 seq_len/TP 的激活。

**通信开销:**用 AllGather + ReduceScatter 替代原来的 AllReduce,总量相同,但激活显存减少到 1/TP。

**典型配置:**SP = TP(永远跟 TP 一起开,Megatron-LM 默认行为)。

总结对比

策略 切分维度 通信类型 通信量 适用范围 典型值
TP Hidden dimension AllReduce 大(每层 2 次) 节点内 NVLink 2-8
PP Layer (depth) P2P (激活) 小(只传激活) 跨节点 4-16
EP Expert index All-to-All 中(token dispatch) MoE 层,跨节点 8-64
SP Sequence length AllGather + ReduceScatter = TP 通信量 配合 TP,节点内 = TP

1T MoE 模型:四种并行如何组合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌─────────────────── Node 0 ──────────────────────┐
│ │
│ ┌─── TP=8 + SP=8 (NVLink) ──────────────────┐ │
│ │ GPU0 GPU1 GPU2 GPU3 │ │
│ │ [Exp0] [Exp1] [Exp2] [Exp3] ← EP=8 │ │
│ │ GPU4 GPU5 GPU6 GPU7 │ │
│ │ [Exp4] [Exp5] [Exp6] [Exp7] │ │
│ │ │ │
│ │ Layer 0-9 (PP Stage 0) │ │
│ └────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
│ PP: 传激活 (InfiniBand)

┌─────────────────── Node 1 ──────────────────────┐
│ ┌─── TP=8 + SP=8 ───────────────────────────┐ │
│ │ Layer 10-19 (PP Stage 1) │ │
│ └────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘


... (PP Stage 2, 3, ...)

× DP copies (数据并行副本)

本文正文 markdown 渲染,3 个交互动画通过自定义 {% anim %} 标签以隔离 iframe 嵌入,源自 Arkive 教程。