Hang Zhengyang

LLM 训练与推理中的并行:概念框架

本文说明大模型里常见的 DP / TP / PP / EP 等并行名词各自切什么、解决什么问题、典型代价是什么。不推导公式,按「先框架、后条目」组织;文末顺带交代常与并行一起出现的 显存技巧(严格说不算一种新的「并行维度」)。


一、先建立一个心智框架

并行可以按 三个问题 来记:

  1. 切什么:参数、激活、数据 batch、层、expert、序列维度……哪一块被切开或复制。
  2. 为了什么:显存不够、算力不够、通信瓶颈、延迟敏感、吞吐优先……哪类约束在主导。
  3. 付什么代价:多卡/多机 通信量与频率、负载均衡、实现复杂度、故障域 变大。

再按 训练 vs 推理 粗分:

维度 训练常见关注点 推理常见关注点
目标 大 batch、高吞吐、稳定收敛 低延迟、高并发、KV 显存
并行 DP、ZeRO、FSDP、TP、PP、EP、CP 等组合 多副本、TP、PP、EP、批处理调度、prefill/decode 拆解

两个大族(口语里常这样分):

  • 数据并行(data parallel):多份「同一逻辑模型」上跑 不同样本,靠 梯度同步 对齐权重。经典 DP、ZeRO、FSDP 都属于这一族(是否复制整卡参数、复制多少,实现不同)。
  • 模型并行(model parallel):把 一张计算图 切开到多设备。工程里说的 MP 多数时候 ≈ TP + PP(再叠 MoE 时加上 EP,长序列再加 SP/CP)。它不是第四种神秘算法,而是「图怎么切」的总称。

下面「名词 → 含义 → 典型场景 → 代价」逐条展开;先看速查表与通信配对,再读分条。


二、名词速查(并行类型一览)

缩写 英文 / 中文习惯叫法 一句话
MP Model Parallel,模型并行(总称) 口语里常指 TP + PP;本质是 切计算图,与「切 batch」的 DP 正交。
DP Data Parallel,数据并行 同一套模型参数,每张卡算不同 micro-batch,再聚合梯度。
ZeRO Zero Redundancy Optimizer 把 优化器状态 / 梯度 / 参数 分片到多卡,减少每卡冗余显存;常与 DP 同用。
FSDP Fully Sharded Data Parallel(PyTorch) 分片数据并行 的一种成熟实现:参数/梯度等按策略 shard 到各 rank,前向/反向时再 all-gather 等凑齐需要的那部分;思想上与 ZeRO-2/3 一类方案接近,生态在 torch.distributed。
TP Tensor Parallel,张量并行 单层内 的大矩阵乘(如 attention / MLP)按维度切到多卡,前向/反向都要频繁通信。
PP Pipeline Parallel,流水线并行 按层或按 stage 把网络竖着切开,不同卡负责不同层段,用 micro-batch 填流水线。
EP Expert Parallel,专家并行(MoE) 多个 expert 子网络 分布到不同设备;每个 token 只激活少数 expert,需 路由 + all-to-all。
SP Sequence Parallel,序列并行 在 序列长度维 上切激活(常与 TP 联用),缓解长序列激活显存。
CP Context Parallel / Ulysses 等 长上下文下对 注意力上下文 做跨设备划分(实现因框架而异),目标仍是长 seq + 省显存。
DP(推理) 多副本数据并行 多份完整权重服务更多请求;与训练 DP「同缩写不同侧重」。

三、集合通信:谁最常吃哪类「原语」

并行策略不同,瓶颈通信模式 往往不同。下面用工程直觉对齐名字(具体实现会有融合与优化,不必死记一次前向几次):

通信原语(直觉) 常见用途
all-reduce 经典 DP 的 梯度求和再广播;部分 TP 中间结果合并。
reduce-scatter + all-gather 分片梯度/分片优化器更新(ZeRO/FSDP 一类里常见),与「每 rank 只持久化一块 shard」搭配。
all-gather 某层前向需要 整层参数或完整激活块 时,从各 rank 凑片。
all-to-all EP(MoE) 里 token 与 expert 之间的 重分配;部分长上下文/路由场景。

拓扑提示:TP 爱在 小集群、高带宽链路(如机内 NVLink)上跑;跨机 DP / ZeRO / FSDP 更吃 网络带宽与延迟;EP 的 all-to-all 对 多机均衡与交换机 敏感。


四、分条说明(训练侧为主,顺带推理)

1. Data Parallel(DP)

  • 切什么:数据(不同样本子集);参数每卡一份(经典 DP)或配合 ZeRO / FSDP 分片。
  • 解决什么:单卡 batch 太小 → 用多卡拼等效大 batch;或提高吞吐。
  • 怎么做(直觉):各卡前向算自己的 batch → 对梯度做 all-reduce(或 reduce-scatter + all-gather,视实现而定)→ 各卡更新参数(或只更新本分片)。
  • 代价:梯度同步通信;batch 很大时 有效学习率 / 泛化 要重新调。

2. ZeRO 与 FSDP(同一思想谱系里的两种「名片」)

  • ZeRO(DeepSpeed 等):按阶段把 optimizer state / grad / params 的冗余砍掉;ZeRO-3 还会在前向/反向中 按需凑参数,通信与调度更复杂。
  • FSDP(PyTorch):把 全部分片数据并行 做成一等公民 API(FullyShardedDataParallel),可按层或按模块 wrap,prefetch / mixed precision / device mesh 等与 torch 训练栈集成紧。
  • 怎么选(粗线条):团队栈偏 DeepSpeed 常先 ZeRO;偏 原生 torch 分布式 常先 FSDP。二者都在解决「别每张卡都存一份完整优化器状态和参数」这件事,细节与默认策略不同,不必对立成两种「学派」。

3. Tensor Parallel(TP)

  • 切什么:单层的权重与计算(按 head 维、hidden 维等切分)。
  • 解决什么:单卡放不下整层 或单层算子过大;也常用于 降低单卡显存峰值。
  • 代价:每层多次集合通信(如 all-reduce / all-gather);TP 组通常要小且拓扑近(同一机内 NVLink 理想)。

4. Pipeline Parallel(PP)

  • 切什么:层堆叠方向 上的子图(stage 0 管前几层,stage 1 管接下来几层……)。
  • 解决什么:层数极多 时,单卡既放不下所有层,又不想 TP 切得太碎。
  • 代价:流水线气泡(bubble);需要 micro-batch、1F1B 等调度;负载要按层算力大致均衡。
  • 进阶(仍属 PP 族):interleaved pipeline(交错流水线)把 多个虚拟 stage(virtual pipeline stages) 叠在同一物理设备上,用更细的调度换更少的空泡;论文与 Megatron 系实现里常见,理解成「在气泡与显存之间再 trade-off 一档」即可。

5. Expert Parallel(EP,MoE)

  • 切什么:expert 模块 分布在多设备;非 expert 部分可能仍用 TP/DP。
  • 解决什么:总参数量巨大,但希望 每 token 实际计算量 可控(只激活 top-k expert)。
  • 代价:token → expert 路由 带来的 all-to-all 通信;负载均衡(某些 expert 过热);推理上还要考虑 延迟与调度。

6. Sequence Parallel(SP)与 Context Parallel(CP)

  • SP:多在 序列维 切 激活(有时与 TP 组合),减轻长序列激活占显存。
  • CP:面向 极长上下文 的注意力划分策略族(不同论文/框架命名略有出入),核心仍是:把长上下文相关的张量与计算跨设备分摊。
  • 代价:注意力相关的跨设备通信与实现复杂度;和 KV cache 管理(推理)强相关。

7. 常与并行一起出现:激活检查点与 Offload(不是新并行维度)

  • Activation checkpointing(重计算换显存):前向不存全部中间激活,反向时再算一遍;省显存、增计算,与 DP/TP/PP 都可叠用。
  • CPU / NVMe offload:把优化器状态或参数暂存到 主机内存或盘,需要时再拉回 GPU;省 GPU 显存、增 PCIe/IO 压力,调度与异步 prefetch 很关键。

它们不改变「图怎么切、batch 怎么分」的并行 分类,但决定你能不能 在现有并行组合下把训练跑起来。

8. 推理侧:同名缩写之外,还有「prefill / decode 拆解」

  • 多副本:多张卡各跑一份模型 → 类似「服务层的 DP」,扩 QPS。
  • TP / PP / EP:仍可出现,但优化目标常变成 首 token 延迟、每 token 延迟、KV 显存、连续批处理。
  • Disaggregated prefill / decode:把 prefill(吃算力、可批处理) 与 decode(吃带宽与 KV、逐步生成) 分到不同实例或池子上,用调度换 整体尾延迟与利用率;这是 服务架构 上的扩展手段,与 TP/PP 解决的是不同层面的问题,但对话里常与「推理并行」一起出现。

五、怎么组合(常见套路,非唯一)

用一句话串起来:

DP(+ZeRO 或 FSDP)扩 batch / 省冗余状态;TP 解决单层太大;PP 解决层太多;EP 解决 MoE 专家太多;SP/CP 解决序列太长。

常见训练组合(示意):

  • 中小模型:DP 或 DP + ZeRO / FSDP。
  • 大稠密模型:TP(机内)+ DP(跨机),必要时 + PP(含 interleaved 调气泡)。
  • MoE 大模型:EP(专家)+ TP(共享部分/大矩阵)+ DP + ZeRO/FSDP(数据面),再视情况加 PP。

六、延伸阅读(实现与关键词)

若在代码或论文里继续挖,可以按关键词搜:Megatron-LM(TP/PP、interleaved pipeline)、DeepSpeed ZeRO、PyTorch FSDP、1F1B pipeline、GShard / Switch Transformer(MoE+EP)、Ring Attention / Context Parallel、disaggregated inference(prefill/decode)。


七、文档结构小结(框架回顾)

  1. 三维提问:切什么、为什么、付什么代价。
  2. 数据并行族 vs 模型并行族:DP/ZeRO/FSDP 与 TP/PP/EP/SP/CP 的分工;MP ≈ TP+PP 的口语位置。
  3. 通信原语表:all-reduce、reduce-scatter、all-gather、all-to-all 与策略的直觉对应。
  4. 分条释义:含 ZeRO/FSDP 对照、PP 交错流水线、显存辅助、推理拆解。
  5. 组合直觉:一句口诀 + 常见套路。
  6. 落地关键词:方便你自己查实现与论文。