Skip to content

模型并行详解:张量并行、流水线并行与序列并行 ​

说明:本篇为综述/无第一手实验数据,采用 Megatron-LM/公开大模型训练实践路线。

实验目标 ​

单卡装不下大模型时,除了数据并行(09 章 DDP/FSDP),还有模型并行:张量并行把一层切到多卡、流水线并行把层按阶段分卡、序列并行把序列维度切分。本篇目标:讲清三种模型并行的原理(怎么切)→ 显存与通信权衡 → Megatron 实践 → 与数据并行组合的工程矩阵。读完能回答:什么场景用哪种并行、通信代价多大、怎么组合。

代码逐段拆解 ​

第一段:张量并行——把一层切开 ​

python
# 张量并行(Tensor Parallelism, TP):一层内的矩阵运算切到多卡
# 以 Linear 层为例(Megatron 列/行并行拆分):
#   列并行:W 按列切 W=[W1, W2],各卡算 Y_i = X·W_i,AllReduce 合并
#   行并行:W 按行切,各卡算部分和,AllReduce 累加
# 通信:每层一次 AllReduce(与层数成正比)
# 显存:每卡只存 1/TP 权重 + 1/TP 激活
def tp_linear(X, W, tp=8):
    W_split = split_col(W, tp)            # 各卡持有 1/8
    Y_local = X @ W_split[rank]           # 本地部分
    Y = all_reduce(Y_local)               # 层内通信一次
    return Y

要点:

  1. TP 是"层内切":矩阵运算切到多卡,各卡算部分结果后 AllReduce——通信量与层数成正比(每层都同步)。
  2. 显存收益直接:权重和激活都只有 1/TP——TP 主要解决"单层装不下"(超大 hidden size)。
  3. TP 通信最重:每层都 AllReduce,所以 TP 必须配高速互联(03 章),一般只在一节点内(8 卡 NVLink)使用。

第二段:流水线并行——按阶段分卡 ​

python
# 流水线并行(Pipeline Parallelism, PP):层按阶段切,卡按阶段分配
#   模型层分成 PP 个阶段,阶段 i 的卡只算自己的层
# 数据按 micro-batch 流过流水线(1F1B 调度减少气泡)
# 通信:只在阶段边界传激活/梯度(低频,远小于 TP)
# 显存:每卡只存本阶段层的权重+激活(但激活有流水线暂存)
# 气泡代价:PP 越大气泡越大(调度不当)
def pp_forward(model, micro_batches, pp=4):
    for mb in micro_batches:
        out = stage[rank](mb)      # 每卡只跑自己的阶段
        send(out, rank+1)          # 阶段间低频通信

要点:

  • PP 是"层间切":按层分阶段,各卡只存本阶段——解决"整模型装不下"而非"单层装不下"。
  • 通信低频:只在阶段边界传数据,通信量远小于 TP——PP 对互联要求低(跨节点友好)。
  • 代价是气泡:流水线启动/排空有气泡(空闲卡),1F1B 调度缓解但 PP 规模过大气泡上升——PP 太大收益递减。

原理讲解 ​

三种并行对比(估算口径) ​

维度张量并行 TP流水线并行 PP序列并行 SP
切分方式层内矩阵切层按阶段切序列维度切
解决什么单层装不下整模型装不下长序列激活
通信每层 AllReduce(重)阶段边界(轻)注意力区(中)
互联要求高(节点内)低(跨节点)中
显存收益权重+激活 1/TP权重 1/PP激活 1/SP

核心认知:三种并行解决不同问题——TP 治"层太大"、PP 治"模型太长"、SP 治"序列太长"(SP 与长上下文预训练 10 章衔接)。通信与显存收益是反比:TP 收益直接但通信重、PP 通信轻但有气泡、SP 只压激活。

组合矩阵:数据并行 × 模型并行(3D 并行) ​

大模型训练 = 数据并行(DP/FSDP)× TP × PP
  DP 管"数据副本"(吞吐)     → 显存友好(FSDP 分片)
  TP 管"层内"(单层)         → 节点内 8 卡
  PP 管"层间"(整模型)       → 跨节点
组合规则(经验):
  TP 不出节点(NVLink 带宽);PP 跨节点(低频通信);
  DP 最大化(并行度最高);显存不足再加深 TP/PP。

组合判断:先 DP/FSDP 吃满数据并行,单层装不下加 TP(节点内),整模型装不下加 PP(跨节点)——按"先数据、再层内、再层间"的顺序加深并行(11 章 Megatron 实操衔接)。

实验结果 ​

(估算口径,非实测;示意性趋势)

方案可训练规模通信压力气泡
DP/FSDP中(分片)低-中无
+ TP(8)大(单层)高(节点内)无
+ PP更大(整模型)低(阶段间)有(可控)

工程启示 ​

  1. 先想清楚"哪装不下":单层大 → TP;整模型大 → PP;序列长 → SP——对症下药,别一上来 3D 并行。
  2. TP 不出节点:TP 每层 AllReduce,必须配节点内高速互联(03 章/01 章 NVLink),跨节点 TP 通信会失控。
  3. PP 通信轻但有气泡:阶段间低频通信适合跨节点;1F1B 调度控制气泡,PP 规模别过大。
  4. 组合按"先数据、再层内、再层间":DP/FSDP 打底 → TP 治层 → PP 治模型(11 章 Megatron 实操衔接)。

下一篇预告:模型并行讲完,预训练侧补最后一块——"后训练对齐:SFT/RLHF/DPO 的算力与工程"。

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com