← 返回题目列表

大模型推理中的 Tensor Parallel、Pipeline Parallel 和 Data Parallel 如何选择?

高频 困难 第 9 / 25 题 更新于 2026/07/25
Tensor ParallelPipeline ParallelData Parallel分布式推理

简化版

三种并行切分不同的东西:Tensor Parallel(TP) 把单层的矩阵切到多卡,降低每卡权重和计算,但每层都要高频通信,适合节点内 NVLink;Pipeline Parallel(PP) 按层切分模型,通信量小,但有流水线气泡Data Parallel(DP) 每卡放完整模型、分担不同请求,模型单卡放得下时扩吞吐最简单。选择顺序:先满足容量(模型放得下吗)→ 再满足延迟(TP 降单请求延迟)→ 最后优化吞吐/成本(DP 加副本)。通常优先节点内 TP,再按需组合 PP、DP。

详细版

  • TP:对 Attention 和 MLP 的线性层做列并行/行并行,用 All-Reduce 合并结果。让单个 token 同时用多卡,能降单请求延迟,但通信几乎贯穿每层,依赖 NVLink/NVSwitch,跨慢网络做大 TP 往往得不偿失。
  • PP:把连续的层分给不同设备,激活在阶段间传递。通信少,但单请求逐 token Decode 时流水线利用率低(气泡多),需要 microbatch 或多请求填充。
  • DP:每卡一个完整模型副本,请求路由到不同副本,副本间不在每个 token 上同步。扩容、路由、故障隔离都简单。

选择时先判断模型权重 + KV Cache 能否单卡容纳,再比较互联带宽、延迟目标、并发和故障域。加 GPU 不保证线性加速——通信、气泡、负载倾斜、切分后单卡算子变小都会降低扩展效率。

完整版教学

一、Tensor Parallel:切一层,通信频繁

TP 在层内部切矩阵。以 Transformer 的两大块为例(Megatron 经典切法):

  • MLP:第一个线性层按**输出维(列)切,各卡算一部分中间特征;激活后第二个线性层按输入维(行)**切,最后用 All-Reduce 把各卡结果加起来。
  • 注意力:按注意力头分配到各卡,每卡算一部分头,最后拼接。
每层前向/反向都要 All-Reduce 同步 → 通信次数 ∝ 层数
→ 必须靠 NVLink/NVSwitch 这种超高带宽低延迟互联
→ 跨机器(走以太网/IB)做大 TP 会被通信拖死

TP 让单个 token 的计算分摊到多卡,能降低单请求延迟(对延迟敏感场景有用),但代价是通信贯穿每一层。所以 TP 度数一般限制在单节点内(如 8 卡)。

二、Pipeline Parallel:切多层,承担气泡

PP 把不同的 Transformer 层放在不同设备上,前一阶段算完把激活传给下一阶段:

卡1: 层 1~20  →  卡2: 层 21~40  →  卡3: 层 41~60  →  卡4: 层 61~80

通信少(只在阶段边界传激活,不像 TP 每层 All-Reduce),每卡权重也少。但有个致命问题——流水线气泡(bubble):一个请求在阶段间串行流动,当卡1在算时,卡2/3/4 在空等;排空时反过来。

训练可以用大量 microbatch 填满流水线摊薄气泡;但在线 Decode 每步只生成一个 token、延迟敏感,很难攒够 microbatch,PP 的利用率和调度都更困难。所以推理里 PP 主要用于「模型大到必须跨节点」时的容量手段,而非提速手段。

三、Data Parallel:复制模型,分摊请求

DP 最简单:每卡(或每组卡)放一个完整模型副本,不同请求路由到不同副本独立处理。它不减少单副本的显存、也不降单请求延迟,但:

  • 扩容简单:吞吐不够就加副本;
  • 路由/故障隔离简单:一个副本挂了不影响其他;
  • 是模型单卡/单节点放得下时提高总吞吐的首选

一个易错点:各副本的 Prefix Cache 和 KV Cache 默认不共享,负载均衡要考虑 token 长度而非只看请求数(把几个长请求都路由到同一副本会打爆它)。

四、组合并行:3D 并行 + Expert Parallel

模型大到单节点放不下时,就组合

节点内:TP(8 卡,靠 NVLink 扛每层通信)
节点间:PP(把模型分成几段,跨节点接力)
最外层:DP(复制多组上述"模型并行组",扩吞吐)

MoE 模型还有 Expert Parallel:把不同专家分散到不同设备,token 按路由发给对应专家——这带来 All-to-All 通信专家负载不均的新问题。核心原则:并行拓扑要匹配物理网络拓扑——通信最频繁的 TP 放带宽最高的机内,通信少的 DP 放最外层跨机。

五、如何评估扩展效率

加卡不等于加速,要对比加 GPU 前后:

  • TTFT、TPOT、总吞吐(真的变好了吗);
  • 每卡显存、通信占比(通信是否吃掉了计算节省);
  • 单位 token 成本(更多 GPU 是否只是更贵)。

一个常见陷阱:TP 度数开太大,模型切得太碎,每卡的矩阵变得很小、算子效率低下,加上通信时间超过计算节省,结果更多 GPU 只提高了成本、没提高速度。所以 TP 要适度、优先机内。

六、选型决策树

1. 模型权重 + KV Cache 单卡放得下?
   → 放得下:用 DP 复制副本扩吞吐(最简单)
   → 放不下:先上节点内 TP(降每卡权重、还能降延迟)
2. 单节点 TP 还放不下?
   → 加 PP 跨节点(容量手段,注意气泡)
3. 吞吐不够?
   → 在模型并行组之外再加 DP 副本
顺序:先容量 → 再延迟 → 后吞吐/成本

七、加强记忆

三种并行记「切什么 + 什么代价」:TP 切层内矩阵(每层 All-Reduce、通信频繁、限机内 NVLink、能降单请求延迟)、PP 切层/深度(通信少但有气泡、推理利用率低、主要解决容量)、DP 复制整模型(分摊请求、扩吞吐最简单、不降单请求延迟)。选型顺序钉死:先满足容量(放得下吗)→ 再满足延迟(TP)→ 最后优化吞吐成本(DP)。超大模型用 3D 并行(TP 机内 + PP 跨节点 + DP 最外层),MoE 加 Expert Parallel;核心原则是并行拓扑匹配网络拓扑,且加卡不保证线性加速。