Skip to content

并行 ​

并行既用于容纳单个设备放不下的模型、激活和 KV Cache,也用于扩展吞吐与并发。前者沿张量、网络深度、序列或专家维度切分一次前向计算;后者沿批次或请求维度分配彼此独立的前向计算。至于权重是整模型复制还是以 TP/PP 分片组成副本,属于另一个维度的问题。

本文只讨论推理场景中的 Data Parallelism(DP)、Tensor Parallelism(TP)、Pipeline Parallelism(PP)、Sequence Parallelism(SP)、Context Parallelism(CP)和 Expert Parallelism(EP)。

并行分类 ​

设 Transformer 的输入激活为 X∈RB×S×H,模型包含 L 层和 E 个专家。其中 B 是批量大小,S 是序列长度,H 是隐藏维度。

推理并行按主要切分对象分成三类:Workload Parallelism 切分请求,Model Parallelism 切分模型结构,Sequence Parallelism 切分 token 激活或上下文状态。

分类方式主要切分维度每个设备持有主要通信主要用途
WorkloadDP批次或请求维度 B一套完整执行能力;可以是整模型,也可以是 TP×PP 分片组请求分发,经典 Dense DP 无逐层集合通信推理吞吐、并发与水平扩展
ModelPP层数 L一段连续或交错的网络层相邻阶段 P2P Send/Recv模型跨节点、降低每卡权重显存
ModelTP隐藏维度、注意力头每层的部分权重与激活All-Reduce、All-Gather、Reduce-Scatter单层过大、单机多卡推理
ModelEP专家维度 E部分 MoE 专家All-to-All Dispatch/Combine分布式 MoE 推理
SequenceSPtoken/序列维度 S非 TP 区域的部分激活All-Gather、Reduce-Scatter配合 TP 减少临时激活
SequenceCP上下文维度 S全网络的部分序列与 KVKV 交换或注意力结果归并长上下文 Prefill 与 KV Cache 扩展

三个分类描述主要作用域,而不是互斥的部署方案。一个执行副本可以同时使用 PP、TP、EP 和 CP,并在外层通过 DP 扩展请求吞吐。

Workload:工作负载 ​

Workload Parallelism 不拆分单次前向计算,而是把不同 Batch 分片或请求分配给多个执行副本。

DP:切分请求,复制执行能力 ​

Data Parallelism 的定义是沿数据维度切分工作:离线推理切 Batch,在线服务切独立请求。这里的“直接切 Batch”完全正确,但切分后必须有多个计算资源同时执行这些分片;因此每个 DP Replica 都需要一套能够完成前向计算的权重布局。

对于单卡可容纳的 Dense 模型,这通常表现为每张 GPU 都加载完整权重;若模型需要 TP 或 PP 才能运行,则每个 Replica 是一组 TP×PP 设备,复制的是相同的分片拓扑,而不是让每张 GPU 都保存完整模型。

离线推理可以沿批次维度切分输入。设模型为 fθ,输入批次被划分为 d 份:

X=[X0;X1;…;Xd−1],Yi=fθ(Xi),qquadY=[Y0;Y1;…;Yd−1]

推理数据并行:Batch 切分、执行副本与独立 KV Cache

各副本使用相同的参数语义 θ,但处理不同的 Xi。在线推理不需要预先形成固定 Batch:路由器把独立请求送入不同副本,各副本维护自己的等待队列、Continuous Batch 和 KV Cache。

对于 Dense 模型的经典副本式 DP,每个请求由一个副本独立完成 Prefill 和 Decode,副本之间通常不需要在每层执行集合通信。因此,DP 主要提升系统总吞吐、并发容量和可用性,不会直接缩短单个请求的计算路径,也不会降低每个副本保存权重与 KV Cache 所需的显存。

推理 DP 的核心开销从张量通信转移到了请求调度与资源复制。路由器应结合等待队列、运行中的 token 数量和 KV Cache 状态做负载均衡;需要复用 Prefix Cache 或会话 KV Cache 的请求还应尽量保持副本亲和性,否则切换副本会丢失本地缓存收益。

Hugging Face Accelerate 的多 GPU 推理会把输入切给多个进程,并在每个进程保留模型;DeepSpeed-MII 可配置多个 Replica,并让每个 Replica 内部继续使用 TP;vLLM 也把每个 DP Rank 作为独立 Core Engine,分别维护调度与 KV Cache。[4][5][6]

并非所有名为 DP 的推理实现都完全独立。vLLM、SGLang 和 TensorRT-LLM 的 MoE 部署常组合 Attention DP 与 Expert EP:Attention 按请求分片,但 MoE token 会跨多个 DP Rank 进入 EP 通信组。这种情况下只复制 Dense/Attention 的执行能力,专家权重仍是分布式的。[7][8][9]

Model:模型结构 ​

Model Parallelism 让多个设备共同完成同一次前向计算。PP 沿网络深度切分层,TP 沿层内张量切分矩阵,EP 沿 MoE 结构切分专家。

PP:按网络深度切分 ​

Pipeline Parallelism 将 L 层网络划分为 p 个阶段。阶段 i 只保存并执行函数 fi 对应的层,并把边界激活发送给下一阶段:

hi=fi(hi−1),f=fp∘fp−1∘⋯∘f1

流水线并行:层放置、边界激活与 Microbatch 时间表

PP 的通信只发生在阶段边界,通常是 P2P Send/Recv,不需要像 TP 一样在每层执行集合通信。因此常见的拓扑映射是:节点内使用 TP,节点间使用 PP。

流水线必须同时处理多个 Microbatch 或请求才能让各阶段持续工作。以只有前向计算、m 个耗时相同的 Microbatch 和 p 个阶段为例,理想化的启动与排空气泡比例为:

Bubble Ratio=p−1m+p−1

m 越大,流水线利用率越高;阶段计算不均衡、通信阻塞和请求长度差异都会扩大实际气泡。

在推理阶段,引擎可以将批次切成多个 Microbatch,使不同 Microbatch 同时占据不同流水线阶段;Continuous Batching 则持续为这些批次补充请求。但单个请求仍需依次经过全部阶段。PP 的主要价值是容纳更大的模型和跨节点扩展,而不是降低单请求端到端延迟。

TP:切分单层张量 ​

Tensor Parallelism 在每一层内部切分矩阵乘法。以两层 MLP 为例,省略偏置后有:

Z=ϕ(XA),Y=ZB

其中 A∈RH×F,B∈RF×H,F 是 MLP 中间维度。使用 p 路 TP 时,可以先按列切分 A:

A=[A1,…,Ap],Zi=ϕ(XAi)

每个设备独立计算 F/p 个中间特征。随后按行切分第二个权重:

B=[B1⋮Bp],Y=∑i=1pZiBi

最后的求和需要 All-Reduce;与 SP 结合时,也可以使用 Reduce-Scatter,让每个设备只保留一段输出。Attention 的处理方式类似:不同设备计算不同的 Q/K/V 头,输出投影后再归并结果。

张量并行:MLP 列切分、行切分与层内归并

TP 能同时切分 Attention、MLP 权重以及相应的 KV Cache,但几乎每个 Transformer 层都包含集合通信。因此:

  • 优势:单层权重和计算被分摊,设备共同完成同一个 token 的前向计算。
  • 代价:TP 度越大,本地矩阵乘法越小,集合通信占比越高。
  • 部署:通常优先把一个 TP Group 放在具备 NVLink、NVSwitch 等高速互联的单个节点内。
  • 约束:注意力头数、中间维度和量化分组等通常需要满足框架的可切分条件;GQA 的 KV Head 是切分还是复制取决于具体实现。

如果模型能够放入单卡,增加 TP 不一定降低延迟。它只有在并行计算收益大于通信与同步开销时才会加速。

主流推理框架通常优先把 TP Group 放在一台具有高速 GPU 互联的节点内。vLLM 使用 Megatron-LM 风格 TP,并建议在单节点多 GPU 上优先使用;跨节点时更常见的是“节点内 TP、节点间 PP”。[3]

EP:按 MoE 专家切分 ​

Expert Parallelism 将 MoE 层的专家分布到不同设备。对 token xt,Router 选择 Top-K 专家后,MoE 输出为:

yt=∑e∈TopK(xt)gt,eEe(xt)

Ee 是第 e 个专家,gt,e 是 Router 给出的权重。若目标专家不在本地,执行过程包含两次重分布:

专家并行:Top-K 路由、All-to-All Dispatch、专家计算与 Combine

EP 只切分专家参数;Attention、共享专家和其他 Dense 层仍需复制,或再通过 TP、PP 等方式切分。它使每个设备只保存部分专家,但性能高度依赖 token 分布与通信:

  • 负载均衡:热门专家收到的 token 过多时,最慢设备决定整层延迟。
  • 计算粒度:每个专家收到的 token 太少时,GEMM 难以充分利用 GPU。
  • 通信拓扑:Dispatch 和 Combine 产生 All-to-All 流量,跨节点带宽与延迟直接影响性能。
  • Prefill/Decode:Prefill 的 token 数量较多,容易形成大批量专家计算;低批量 Decode 更容易受小消息通信和负载波动影响。

EP 与 TP 不互相替代。EP 切分专家数量,TP 切分单个专家内部的矩阵;是否组合二者应根据单个专家大小、并发量和网络拓扑决定。

在 vLLM 中,EP Group 的大小等于 TP×DP,专家跨所有 EP Rank 分片,而 Attention 根据配置在各 DP Group 内复制或 TP 切分。SGLang 与 TensorRT-LLM 也支持 Attention DP + MoE EP;这解释了为什么某些部署同时出现 DP 和 EP,但 DP Rank 仍需要在专家层通信。[7][8][9]

Sequence:序列状态 ​

Sequence 类沿 token 或上下文维度切分运行时状态。SP 只处理 TP 区域外的临时激活,CP 则让序列分片贯穿 Attention 和 KV Cache。

SP:切分 TP 之外的激活 ​

在经典 TP 中,LayerNorm 和残差连接等逐 token 算子不适合沿隐藏维度切分,其输入往往在 TP Group 内重复保存。Sequence Parallelism 改为沿序列或展平后的 token 维度切分这些激活:

X=[X1;…;Xp],Xi∈RB×(S/p)×H

LayerNorm 等不依赖其他 token 的算子可以直接在各自的 Xi 上计算。进入张量并行的 Attention 或 MLP 前,通过 All-Gather 获得所需输入;离开 TP 区域时,用 Reduce-Scatter 代替 All-Reduce,使输出重新保持序列分片。

序列并行:TP 外部激活分片与 All-Gather/Reduce-Scatter

这里的 SP 特指与 TP 配套的 Sequence Parallelism。它让 LayerNorm、残差连接等区域保持 token 分片,但不切分模型参数,也不让单个设备独立完成完整的长序列 Attention。推理中的这些激活生命周期很短,因此 SP 通常只是 TP Kernel 的配套优化,不是扩展推理容量的首选。[1]

CP:切分完整上下文 ​

Context Parallelism 同样沿序列维度切分,但分片会贯穿整个网络,包括 Attention。每个设备只保存一部分 Query 和对应的 KV Cache:

Q=[Q1;…;Qp],K=[K1;…;Kp],V=[V1;…;Vp]

本地 Query Qi 仍需关注全局 K/V:

Oi=Softmax(QiK⊤d)V

因此 CP 不能只做本地 Attention。实现可以 All-Gather 完整 K/V,也可以让 K/V 分块在设备间环形传递,并使用在线 Softmax 逐块合并注意力结果。后者无需在每个设备上同时物化完整 K/V,但仍然需要跨设备通信。

上下文并行:Prefill 的 Q/KV 分块与 Decode 的历史 KV 分片

Prefill 与 Decode 需要分开理解:

  • Prefill:将 T 个新 token 切成多个 Q/K/V Chunk。中等长度可聚合完整 K/V,让每卡计算本地 Q;更长上下文则保持 Partial Q + Partial KV,通过 Ring Attention 等方式逐块交换 K/V。
  • Decode:每步只有少量新 Query,核心是将不断增长的历史 KV Cache 沿时间 T 切分,各卡计算局部注意力统计量后再归并。

vLLM 的 Context Parallel Deployment 也按这两条路径设计。其 Decode CP 会在 TP 的 KV Head 切分之后,继续沿时间维度消除由于 KV Head 数不足产生的 KV Cache 重复;CP 度增大可以降低 KV 占用,但会增加通信。[10]

SP 与 CP 的区别 ​

对比项SPCP
分片范围LayerNorm、残差等 TP 外部区域输入和所有层的激活,包括 Attention
Attention 是否看到本地序列分片否,通常进入 TP 区域前聚合是,本地 Query 配合全局 K/V 计算
是否切分 KV Cache通常否是
主要收益减少 TP 区域外的临时激活扩展上下文长度、分摊 Prefill 和 KV Cache
典型通信All-Gather + Reduce-ScatterKV 环形交换、All-Gather 或注意力归并

不同论文和框架对 Sequence Parallelism 的命名并不统一:部分长序列系统也把贯穿 Attention 的序列切分称为 SP。阅读配置或论文时,应以其是否切分 Attention 和 KV Cache 为判断依据,而不是只看名称。

组合与选择 ​

实际系统通常同时建立多组通信域。例如 TP=4、PP=2 表示一个执行副本包含两个流水线阶段,每个阶段由 4 张卡共同执行层内计算,共使用 8 张卡。若再设置 DP=2,则复制两套这样的执行副本,总共使用 16 张卡;不同请求被分配到两个 DP Replica,每个副本内部仍按 TP×PP 协同完成前向计算。

text
全局请求队列
  └─ DP:分配到多个执行副本
       └─ 每个副本可使用 CP 切分上下文
            └─ 每个上下文分片进入 PP 流水线
                 └─ 每个阶段内部使用 TP
                      └─ MoE 层可额外执行 EP Dispatch / Combine

常见选择顺序如下:

  1. 模型能放入单卡:优先使用单卡执行副本;吞吐或并发不足时增加 DP 副本。
  2. 单层或 KV Cache 放不下:先在高速节点内增加 TP。
  3. 整体模型仍放不下或必须跨节点:增加 PP,并通过批处理减少流水线气泡。
  4. 长上下文激活或 KV Cache 成为瓶颈:增加 CP。
  5. 使用 MoE 且专家权重过大:增加 EP,并重点检查路由负载和 All-to-All 性能。

并行度不是越大越好。增加设备会降低每卡显存与计算量,也会缩小本地算子并增加通信。最终配置应同时测量 Time to First Token(TTFT)、Time per Output Token(TPOT)、吞吐量、峰值显存和跨节点流量,而不能只以模型是否成功加载为标准。

参考 ​

  1. NVIDIA Megatron Core:Parallelism Strategies Guide
  2. DeepEP:Expert Parallel Communication Library
  3. vLLM:Parallelism and Scaling
  4. vLLM:Data Parallel Deployment
  5. Hugging Face Accelerate:Distributed Inference
  6. DeepSpeed-MII:Multiple Replicas and Tensor Parallelism
  7. vLLM:Expert Parallel Deployment
  8. SGLang:Prefill-Decode Disaggregation
  9. TensorRT-LLM:Optimizing MoE Communication with One-Sided All-to-All
  10. vLLM:Context Parallel Deployment