✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

在大模型训练中,数据并行(Data Parallelism)、张量并行(Tensor Parallelism)和流水线并行(Pipeline Parallelism)分别解决什么问题?实际训练中通常会怎样组合使用?

创建时间:2026-09-18 更新时间:2026-09-18 阅读次数:1289 次 分类:分布式训练与工程优化

一、整体思路

大模型训练面临的核心矛盾是:单卡显存装不下模型,单卡算力也跑不动训练。

三种并行策略分别从不同维度拆解这个矛盾:

并行方式 主要解决什么 切分对象 通信特点
数据并行 DP 吞吐不够、单卡 batch 太小 数据 梯度 All-Reduce
张量并行 TP 单层参数太大,单卡放不下 层内参数/矩阵 高频、高通信量
流水线并行 PP 模型层数太多,单卡放不下 层间切分 点对点激活传输

实际训练中,三者通常不是二选一,而是组合使用,也就是常说的 3D 并行。


二、数据并行(Data Parallelism)

1、解决什么问题

数据并行解决的是:

  • 单卡算力有限,训练吞吐不够;
  • 单卡 batch size 太小,梯度噪声大、训练不稳定;
  • 希望利用多张卡同时处理不同数据,提高整体吞吐。

它的基本思想是:每张卡上放一份完整模型,但每张卡处理不同的数据 batch。

2、工作流程

假设有 $N$ 张 GPU:

  • 1、每张 GPU 复制一份完整模型参数;
  • 2、将全局 batch 切成 $N$ 份,每张卡拿一份;
  • 3、每张卡独立前向、反向,计算本地梯度;
  • 4、对所有卡的梯度做 All-Reduce,求平均或求和;
  • 5、每张卡用相同的平均梯度更新参数,保持参数一致。

3、优点

  • 实现简单,PyTorch 的 DistributedDataParallel 就是典型代表;
  • 扩展性好,增加卡数通常能提升吞吐;
  • 对模型结构无侵入。

4、缺点

  • 每张卡都要存一份完整模型参数、梯度、优化器状态,显存冗余严重;
  • 当模型大到单卡放不下时,纯 DP 直接失效;
  • 梯度 All-Reduce 通信量大,尤其是大模型参数量巨大时。

5、适用场景

  • 模型能单卡放下;
  • 主要瓶颈是吞吐,而不是显存;
  • 中小模型训练,或大模型训练中作为最外层并行维度。

6、补充:ZeRO 与 DP 的关系

ZeRO 可以看作是对数据并行的显存优化:

  • ZeRO-1:切分优化器状态;
  • ZeRO-2:再切分梯度;
  • ZeRO-3:再切分模型参数。

所以 ZeRO 本质上仍属于数据并行范畴,但通过切分冗余状态,让 DP 能支撑更大的模型。


三、张量并行(Tensor Parallelism)

1、解决什么问题

张量并行解决的是:

  • 单层参数太大,单卡显存放不下;
  • 单个矩阵乘法规模太大,单卡算不动。

它的基本思想是:把一层内部的参数矩阵切分到多张卡上,共同完成这一层的计算。

2、典型切分方式

以 Transformer 的线性层为例,假设权重矩阵为 $W$,有两种常见切分:

(1)按列切分

$$ Y = XW $$

将 $W$ 按列切成 $W_1, W_2$,分别放在两张卡上:

$$ Y_1 = XW_1,\quad Y_2 = XW_2 $$

两张卡各自计算一部分输出,最后拼接:

$$ Y = [Y_1, Y_2] $$

(2)按行切分

将 $W$ 按行切分:

$$ Y = X_1W_1 + X_2W_2 $$

每张卡拿到部分输入和部分权重,计算部分结果后做 All-Reduce 求和。

3、在 Transformer 中的应用

Megatron-LM 是典型代表:

  • Self-Attention:Q、K、V 的投影矩阵按列切分,输出投影按行切分;
  • MLP:第一个线性层按列切分,第二个线性层按行切分;
  • 这样中间只需要在特定位置做 All-Reduce 或 All-Gather。

4、优点

  • 能显著降低单卡参数显存;
  • 单层计算被拆分,计算并行度高;
  • 适合单层特别大的模型。

5、缺点

  • 通信非常频繁,几乎每层都要通信;
  • 对网络带宽和延迟要求极高,通常只在 NVLink/NVSwitch 同一节点内使用;
  • 实现复杂,需要深入修改模型结构;
  • 张量并行度过高时,通信开销会吃掉计算收益。

6、适用场景

  • 单层参数极大,单卡放不下;
  • 同一节点内多卡,且卡间带宽很高;
  • 常与流水线并行、数据并行组合。

四、流水线并行(Pipeline Parallelism)

1、解决什么问题

流水线并行解决的是:

  • 模型层数太多,整体放不下一张卡;
  • 希望按层切分模型,让不同卡负责不同层。

它的基本思想是:把模型按层切成多个 stage,每个 stage 放在不同 GPU 上,数据像流水线一样依次经过各 stage。

2、工作流程

假设模型有 24 层,4 张卡:

  • GPU 0:第 1–6 层;
  • GPU 1:第 7–12 层;
  • GPU 2:第 13–18 层;
  • GPU 3:第 19–24 层。

一个 batch 进入 GPU 0,算完后把激活传给 GPU 1,依次往后传。

3、核心问题:流水线气泡

如果一次只处理一个 micro-batch,那么同一时刻只有一张卡在计算,其他卡在等待,利用率极低。

解决办法是 micro-batch 流水线:

  • 把一个 batch 切成多个 micro-batch;
  • 让不同 micro-batch 在不同 stage 上重叠执行;
  • 例如 GPipe、PipeDream、1F1B 调度等。

但即使如此,仍然存在 流水线气泡:

  • 填充阶段:前面 stage 在工作,后面 stage 空闲;
  • 排空阶段:后面 stage 在工作,前面 stage 空闲。

4、优点

  • 能支持非常深的模型;
  • 通信量相对张量并行小,只需传激活;
  • 跨节点也能用,对带宽要求低于 TP。

5、缺点

  • 存在流水线气泡,设备利用率下降;
  • micro-batch 越多,气泡越小,但显存占用越高;
  • 调度复杂,需要仔细设计 1F1B 等策略;
  • 负载不均衡时,stage 划分需要仔细调优。

6、适用场景

  • 模型层数极多,单卡放不下;
  • 跨节点多机训练;
  • 常与数据并行、张量并行组合。

五、实际训练中如何组合使用

实际大模型训练中,通常是 3D 并行:数据并行 DP × 流水线并行 PP × 张量并行 TP

1、典型组合方式

以 Megatron-LM + DeepSpeed 为例:

  • 最内层:张量并行 TP

    • 放在同一节点内,利用 NVLink 高带宽;
    • 切分单层大矩阵。
  • 中间层:流水线并行 PP

    • 跨节点切分层;
    • 减少跨节点通信量。
  • 最外层:数据并行 DP

    • 复制多份模型,提高吞吐;
    • 配合 ZeRO 切分优化器状态、梯度、参数。

2、一个具体例子

假设有 64 张 GPU,可以这样配置:

  • TP = 8:同一节点内 8 卡做张量并行;
  • PP = 4:4 个 stage 跨节点流水线;
  • DP = 2:再复制 2 份做数据并行。

总卡数:

$$ 8 \times 4 \times 2 = 64 $$

3、选择原则

维度 优先解决 放在哪里 原因
TP 单层太大 节点内 通信频繁,需要高带宽
PP 层数太多 跨节点 通信较少,只需传激活
DP 吞吐不足 最外层 实现简单,扩展性好

4、实际中的权衡

  • TP 太大:通信开销高,效率下降;
  • PP 太大:流水线气泡多,利用率下降;
  • DP 太大:梯度同步通信量大,但可用 ZeRO 缓解;
  • 所以实际配置需要根据 模型大小、节点数、网络拓扑、显存容量 综合调优。

六、简单评价这道面试题

1、这道题的价值

这道题是一道非常典型的 大模型分布式训练入门必问题,优点是:

  • 覆盖面广:一道题能考察 DP、TP、PP 三个核心概念;
  • 区分度好:初级候选人可能只答出 DP,中级能说清 TP/PP,高级能讲清 3D 并行组合与权衡;
  • 贴近实战:实际训练大模型时,确实需要组合使用这三种并行策略;
  • 有延展性:可以继续追问 ZeRO、Megatron、流水线气泡、通信优化等。

2、这道题的不足

  • 题目本身比较宽泛,如果候选人只背概念,容易答得泛泛;
  • 没有具体场景约束,比如“多少卡、什么模型、什么网络拓扑”,导致答案可能不够聚焦;
  • 对高级候选人来说,如果只答基本定义,深度不够,需要追问才能区分水平。

3、建议的追问方向

如果候选人答得不错,可以继续追问:

  • 1、ZeRO 和 DP 是什么关系?ZeRO-3 为什么能进一步省显存?
  • 2、TP 为什么通常只在节点内做?如果跨节点做 TP 会有什么问题?
  • 3、PP 的流水线气泡怎么计算?1F1B 调度相比 GPipe 有什么改进?
  • 4、如果 64 卡训练一个 70B 模型,你会怎么配置 TP/PP/DP?
  • 5、如何判断当前训练是计算受限还是通信受限?

4、总体评价

这是一道 很好的中高级面试题,适合用来考察候选人对大模型训练系统的整体理解。但它更适合作为 开场题或框架题,真正区分水平还需要配合追问。如果候选人能把三种并行的原理、优缺点、组合方式和实际权衡都讲清楚,基本可以判断其具备大模型分布式训练的系统性认知。


📌 面试天下网:一款服务于大一新生的口袋书,让大家在无聊的公共课上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...