跳到主要内容
推理优化

6.1 推理并行策略总览:目标、维度与组合

推理并行与训练并行的目标差异(显存/延迟/吞吐 vs 梯度/收敛)、TP/PP/DP/EP 四种策略的本质与适用场景、以及 TP×PP×DP 的组合逻辑

分布式推理张量并行流水线并行数据并行专家并行并行策略

从这一章开始,话题从”单卡怎么优化”切换到”多卡怎么组织”。触发分布式推理的通常是两个现实问题:模型装不下(70B FP16 要 140GB,单卡装不下)或单卡不够快(吞吐上限、延迟不达标)。但”把模型拆到多卡”有完全不同的拆法——按矩阵切、按层切、按请求切、按专家切——每种切法解决不同的问题,也有不同的通信代价。这一节先建立全局坐标系,后面 6.2-6.6 逐一展开。

📑 目录


1. 推理并行 vs 训练并行:目标完全不同

模块三(分布式训练)里你已经见过 TP、PP、DP 这些词,但推理场景下它们的目标和评价标准完全不同。先把这个差异钉死,后面才不会用训练的思路去理解推理的并行选择。

维度训练并行推理并行
核心目标梯度同步正确、模型收敛模型能装下、延迟达标、吞吐够用
关键指标收敛速度、FLOPS 利用率、通信占比TTFT / TPOT、吞吐(Tokens/s)、显存分布
每步同步每步都要 AllReduce 梯度(强同步)前向内部通信(TP),或几乎无同步(DP)
数据流前向 + 反向 + 梯度同步,通信量翻倍只有前向,通信量减半
批量特性固定 batch,追求吞吐动态 batch(Continuous Batching),延迟敏感
失败容忍训练可以断点续跑服务不能中断(高可用)

📌 关键点:训练里”通信占比高”是吞吐问题;推理里”通信占比高”直接变成延迟问题——TPOT 每增加几毫秒都在消耗用户的耐心。所以推理场景对通信的敏感度更高,也更容易得出”TP 别太大”的结论。

一个更根本的差异:推理的并行策略服务于”单请求延迟”和”系统吞吐”两个指标,而这两个指标有时互相冲突(第 5.4 节投机解码已经见过这种冲突)——并行策略的选择,本质是在这条延迟-吞吐曲线上选点。


2. 四种并行策略的本质

先给一张总览表,后面每节展开细节:

策略拆什么通信模式解决什么问题一句话本质
TP(张量并行)单个权重矩阵每层前向 2 次 AllReduce(NVLink 内)单卡装不下 / 单请求延迟一个算子的计算拆到多卡
PP(流水线并行)模型层(按深度切段)层间激活传递(每 micro-batch 1 次,节点间网络)跨节点装下超大型号计算流水线按深度分段
DP(数据并行)请求/数据(模型复制)几乎无通信(仅负载均衡)单卡吞吐不够复制引擎,横向扩吞吐
EP(专家并行)MoE 的 Expert 参数All-to-All(每 token 路由)MoE 超大模型装不下按”知识”拆,token 找专家

💡 提示:记忆锚点——TP 拆算子、PP 拆层、DP 拆请求、EP 拆专家。拆的对象不同,通信发生的频率和位置就不同:TP 每层都通信(最频繁)、PP 每段边界通信(较稀疏)、DP 基本不通信、EP 在路由时通信(按需)。

2.1 为什么推理中 TP 是第一选择

推理场景(尤其 vLLM)里 TP 是最常用的策略,原因有三个:

  1. 单请求延迟最优:TP 把单个请求的前向拆到多卡并行,TTFT/TPOT 随卡数下降(通信开销抵消一部分),是唯一能”让一个请求变快”的策略
  2. 显存分摊均匀:权重按矩阵切开,每卡只存 1/TP 的权重,显存压力线性下降
  3. NVLink 内通信便宜:TP 的 AllReduce 走 NVLink(单节点内 900GB/s 级),通信延迟可控

而 DP 复制模型不降低单请求延迟(一个请求还是只在一张卡上跑),PP 则因为流水线填充(bubble)反而让单请求延迟上升。“哪个策略能让单个请求更快”——只有 TP。

2.2 推理中 DP 的含义与训练不同

训练里 DP 是”每卡一份模型 + 梯度 AllReduce”;推理里没有梯度,DP 退化为”多份独立模型副本,请求按负载均衡分发”——vLLM 里就是多副本引擎(或者 MoE 场景下的 attention 复制)。所以推理 DP 的通信开销几乎为零,代价是每份副本都要一份完整的权重显存

2.3 EP 是 MoE 时代的特殊策略

MoE 模型(Mixtral、DeepSeek-V3、Qwen3-MoE)里,Attention 层是稠密的(所有 token 都要),Expert 层是稀疏的(每个 token 只路由到 2-3 个专家)。EP 把不同 Expert 放到不同卡上,token 通过 All-to-All 通信”上门”找专家。它和 TP 的关键区别:TP 是”数据不动、权重切”(权重在卡间切分,token 全量广播),EP 是”权重不动、数据上门”(专家完整放单卡,token 被路由过来)。

📌 关键点:EP 的动机和 TP 一样是”装不下”,但方式相反。TP 切矩阵需要层内 AllReduce(通信量与 hidden size 成正比),EP 路由 token 需要 All-to-All(通信量与 token 数成正比)。模型越大、hidden size 越大,EP 相对 TP 越有优势——这就是为什么 DeepSeek-V3 这类超大 MoE 都用 EP。


3. 适用场景速查:装不下还是不够快

选型先回答两个问题:

Q1:模型单卡装得下吗?

  • 装得下 → 不需要任何并行(除非吞吐不够)
  • 装不下,但单节点多卡能装下 → TP
  • 单节点也装不下 → TP(节点内)+ PP(节点间)

Q2:单卡吞吐够吗?

  • 不够 → DP(多副本横向扩展)或 EP(MoE 场景)

官方文档给出的决策流程(vLLM parallelism scaling):

模型能放单卡吗?
├─ 能 → 不分布式(分布式大概率是浪费)
└─ 不能 → 单节点多卡能放下吗?
    ├─ 能 → 张量并行(tensor_parallel_size = 节点内 GPU 数)
    └─ 不能 → TP + PP 组合(TP = 每节点 GPU 数,PP = 节点数)

边缘情况(官方文档专门指出):

  • GPU 数不能整除模型:用 PP 支持不均匀切分(如 TP=1, PP=GPU 数)
  • 节点内没有 NVLink(如 L40S 等 PCIe 互联的卡):优先 PP 而非 TP——TP 的 AllReduce 在 PCIe 上太贵,PP 的层间通信量小得多

💡 提示:最后一条经常被忽视——TP 好不好用,取决于节点内互联带宽。A100/H100 节点(NVLink)TP=8 很常见;L40S(PCIe Gen5 仅 64GB/s 级)TP>2 就得不偿失。买卡的时候就要想好并行策略。


4. 组合策略:TP×PP×DP 怎么乘

并行维度可以同时叠加,vLLM 中三者相乘得到总 GPU 数

GPU 总数=TP×PP×DP\text{GPU 总数} = \text{TP} \times \text{PP} \times \text{DP}

以 16 卡为例,几种典型配置:

配置含义典型用途
TP=8, PP=2, DP=18 卡张量并行一组,两组流水线串起来2 节点 × 8 卡跑超大模型(TP 吃满 NVLink,PP 跨节点)
TP=4, PP=1, DP=44 卡一组张量并行,4 组互为数据并行4 节点 × 4 卡,横向扩吞吐
TP=2, DP=82 卡 TP,8 组 DP(MoE 场景)EP 自动 = TP×DP = 16,见 6.4

组合的原则(也是官方推荐的默认思路):

  1. TP 优先给单节点内的卡:TP 通信最频繁,必须待在 NVLink 内
  2. PP 用于跨节点:PP 通信稀疏(每段边界一次),可以忍受节点间网络(IB/RoCE)
  3. DP 放最外层:DP 之间几乎无通信,跨节点完全没问题

📌 关键点:官方文档给的黄金组合是 TP = 每节点 GPU 数、PP = 节点数(例如 2 节点 × 8 GPU → TP=8, PP=2)。它把”通信最热的维度”锁在节点内、把”通信最冷的维度”放在节点间——这是分布式推理最实用的配置直觉,比死记任何公式都管用。

4.1 MoE 场景的特殊组合

MoE 模型(见 6.4)的组合逻辑不同:EP 取代 TP 处理 Expert 层,EP_SIZE = TP × DP。比如 TP=2, DP=4(8 卡):

  • Attention 层:按 TP=2 切分(4 个 DP 组内各自张量并行)
  • Expert 层:按 EP=8 切分(全部 8 卡组成一个专家并行组)

这就是 vLLM --enable-expert-parallel 的自动行为——EP 开启后,Expert 层和 Attention 层走不同的并行策略


5. 通信代价:并行策略的隐形税

每种并行都有通信税,选型时先算通信账:

策略通信原语频率通信量量级对互联的要求
TPAllReduce每层 2 次O(hidden×batch)O(\text{hidden} \times \text{batch})NVLink(节点内)
PPP2P 激活传输每 micro-batch 1 次O(hidden×batch)O(\text{hidden} \times \text{batch})节点间网络可接受
DP几乎为零仅路由/负载均衡O(1)O(1)无要求
EPAll-to-All每层 1 次O(token×hidden)O(\text{token} \times \text{hidden})节点间网络可接受(DeepEP 优化)

💡 提示:一个直观的通信量对比——TP 的 AllReduce 每层都要做,PP 的 P2P 每段边界才做一次。Transformer 层数动辄几十上百,所以 TP 对带宽的渴求远大于 PP。这也是”TP 不跨节点、PP 才跨节点”的根本原因:跨节点带宽(25-400Gb/s)只有 NVLink 的几十分之一,只配得上稀疏的通信。


6. vLLM 的并行抽象:world size 与并行组

落到 vLLM,需要理解两个基础概念,后面 6.5/6.6 会反复用到:

6.1 World Size:一个模型副本占用多少进程

vLLM 中每个**模型副本(replica)**的进程数:

world size=TP×PP\text{world size} = \text{TP} \times \text{PP}
  • TP=1, PP=1 → world size 1(单进程)
  • TP=8, PP=2 → world size 16(16 个进程组成一个副本)
  • DP 不增加 world size——DP 是”多份副本”,每份副本的 world size 仍是 TP×PP,副本之间通过负载均衡分发请求

6.2 并行组(Parallel Group)的层级

vLLM(沿袭 Megatron-LM 的约定)按维度组织通信组:

TP 组:同一层的卡之间(AllReduce 频繁,必须 NVLink)
PP 组:不同层段的卡之间(P2P 稀疏,可跨节点)
DP 组:副本之间(基本无通信)

进程的 rank 按”TP 最内层、PP 中间、DP 最外层”排列(对应 4.1 的组合原则)。这也是 vLLM 启动日志里 rank 0 / rank 1 划分的依据——排查通信问题时,先分清一个报错发生在哪个组内。

📌 关键点:vLLM 中 --tensor-parallel-size--pipeline-parallel-size--data-parallel-size 三个参数直接对应三种并行组。改变任何一维,进程的 rank 编号和通信拓扑都变——所以”加一张卡”不是简单改一个数字,而是重新规划整个拓扑(6.6 实战会验证)。


📝 总结

  • 推理并行的目标与训练不同:显存装载、延迟、吞吐,而非梯度同步与收敛
  • 四种策略的本质:TP 拆算子(每层 AllReduce)、PP 拆层(段间 P2P)、DP 拆请求(多副本)、EP 拆专家(All-to-All)
  • TP 是唯一降低单请求延迟的策略,也是推理的第一选择
  • 选型两步:装不下 → TP(节点内)/ TP+PP(跨节点);不够快 → DP / EP
  • 黄金组合:TP = 每节点 GPU 数,PP = 节点数;DP 放最外层
  • MoE 特殊:EP_SIZE = TP × DP,Expert 层与 Attention 层走不同并行
  • 通信税:TP 最热(每层)、PP 次之(每段)、DP 为零、EP 按需——互联带宽决定策略选择

🎯 自我检验清单

  • 训练和推理场景下,DP 的含义有什么不同?
  • 为什么 TP 是唯一能让单请求变快的策略?PP 和 DP 为什么不能?
  • 你的模型单卡装不下,第一反应应该试哪种并行?为什么?
  • 为什么说”TP 不跨节点”?用通信频率和互联带宽解释
  • GPU 总数与 TP×PP×DP 的关系?world size 又是什么?
  • 无 NVLink 的节点(如 L40S)为什么优先 PP?

📚 参考资料