大模型推理的并行约束:硬件拓扑决定你能做什么
聊 LLM 推理并行策略的文章很多,大多数的结论长这个样子:DP 适合模型单卡放得下的场景,TP 适合单层参数量大的情况,PP 适合层数多的模型,实际部署用 3D 并行。
这些话都对,但都没说清楚一件事:这个决策树背后的约束是什么。
技术选型不是在菜单上挑菜,每个选项背后都有它成立的前提条件。理解前提比记住结论更有用。
通信是并行策略的真正成本
三种并行策略——数据并行(DP)、张量并行(TP)、流水线并行(PP)——在显存分布和计算方式上各不相同,但它们真正的差异在通信模式上。
DP 的通信发生在梯度同步阶段(训练时)。推理场景中,DP 本质上是多个独立副本,不需要实时通信,通信开销可以忽略。
TP 的通信发生在每一层内部。以 Transformer 的 Attention 和 FFN 为例,张量按列/行切分到多张卡后,每层结束都需要一次 AllReduce 来聚合结果。模型有多少层,就有多少轮跨卡通信。这个通信是同步的、高频的、延迟敏感的。
PP 的通信发生在层边界,只需要传递激活值(中间层的输出),数据量远小于模型权重。一次 forward pass 里,PP 的通信次数等于流水线的级数,不随层数增长。
这个差异直接决定了每种策略对网络带宽的依赖程度:TP 最高,PP 次之,DP 最低。
带宽层级是硬约束
现代 AI 服务器里存在两个显著不同的通信层级:
- 节点内:NVSwitch 互联,单向带宽约 900 GB/s(H100 SXM)
- 节点间:InfiniBand HDR/NDR,带宽约 200~400 GB/s
两者的带宽差在 2~4 倍之间。听起来不大,但对 TP 这种每层都要 AllReduce 的策略来说,这个差距是致命的。
以 Llama-70B 为例,每个 Transformer 层的 AllReduce 需要传输约 8192 维的激活张量(bfloat16)。如果 TP 跨节点,每次 AllReduce 都要走 IB 而不是 NVLink,通信时间直接拖累每层的计算效率。
这就是为什么TP 的实际上限通常是 8 卡(单节点内 GPU 数量),不是因为算法限制,而是因为跨节点的通信开销会把 TP 的收益吃掉。
PP 就不同了。层边界的激活传输是异步友好的,可以用流水线掩盖通信延迟,而且单次传输量可预期、可调度。用 PP 跨节点是常见且合理的选择。
所以 3D 并行的实际配置规律不是”自由组合”,而是:TP 限制在节点内,PP/DP 可以跨节点。
1 | |
Prefill 和 Decode 是两种不同的工作负载
大模型推理有一个常被低估的结构性问题:Prefill 和 Decode 阶段的计算特性截然不同。
Prefill 处理用户输入的 prompt,所有 token 并行计算,是典型的计算密集型(compute-bound)操作。批量越大,GPU 算力利用率越高。
Decode 逐 token 生成,每一步只有一个新 token 参与计算,但需要读取所有层的 KV Cache 和模型权重。读的数据多,算的工作少——这是典型的内存带宽密集型(memory-bound)操作。
用 Roofline 模型量化一下:Decode 阶段(batch=1)的算术强度(FLOPs/Byte)大约只有 Prefill 的 1/1000 量级。提升算力对 Decode 几乎没有帮助,唯一有效的方向是提升内存带宽或增大批次大小。
这个特性差异引出了 PD 分离(Prefill-Decode Disaggregation)的设计思路:把 Prefill 和 Decode 分配到不同的节点,让每种节点针对性地优化。
Prefill 节点追求高算力和快速处理批量请求;Decode 节点追求低延迟和高并发服务。两者之间通过高速网络(RDMA)传递 KV Cache。
PD 分离不是一个优化技巧,而是对两种工作负载的本质差异做出的架构响应。如果你的服务同时面临 TTFT(首 token 延迟)和 TBT(逐 token 延迟)的 SLA 压力,混合部署会让两个指标都难以达标。
GPU 间通信的几个关键机制
TP 之所以能在节点内高效运行,依赖几个硬件和软件层面的支持:
NVLink/NVSwitch 是节点内 GPU 全互联的物理基础。NVSwitch 让任意两张 GPU 之间都能以接近 NVLink 峰值速率通信,而不是通过 CPU 中转。
NCCL(NVIDIA Collective Communications Library)是上层软件抽象,负责 AllReduce、AllGather、ReduceScatter 等集体通信操作的调度和执行。NCCL 会自动感知拓扑,在有 NVSwitch 的环境里选择最优的通信算法(Ring 或 Tree)。
GPUDirect RDMA 是跨节点通信的关键。它允许 RDMA 网卡直接读写 GPU 显存,绕过 CPU 内存和内核缓冲区,把 KV Cache 从 Prefill 节点传到 Decode 节点的延迟从 ~1ms 降到 ~10μs 量级。这是 PD 分离在工程上能成立的底层支撑。
部署决策的真实逻辑
综合以上,一个实际的部署决策路径大概是这样的:
第一步:模型能放入单卡吗?
能放下,DP 加连续批处理(Continuous Batching)是最简单有效的起点,不要引入不必要的并行复杂度。
第二步:需要多卡并行时,模型的瓶颈在哪?
单层参数量大(Attention、FFN 矩阵维度高)→ TP,限制在节点内。
层数多,单层参数不大 → PP,可以跨节点。
两者都是 → 3D 并行,TP 节点内,PP 跨节点。
第三步:服务有严格的延迟 SLA 吗?
TTFT 和 TBT 都有压力 → 考虑 PD 分离,分别针对 Prefill 和 Decode 优化资源配置。
只关注吞吐 → 混合部署 + 激进批处理,成本更低。
第四步:跨节点通信的带宽够吗?
PP 和 PD 分离都需要跨节点高速传输。InfiniBand 是目前的主流选择,RoCEv2 是成本敏感场景的备选,但需要正确配置 DCB(数据中心桥接)才能保证性能。
结语
LLM 推理并行策略的核心不是记住哪种策略适合哪种场景,而是理解每种并行带来的通信开销,以及你的硬件能否承受这个开销。
带宽层级(NVLink vs InfiniBand)决定了 TP 的物理边界。Prefill/Decode 的工作负载差异决定了 PD 分离的合理性。这些约束不会因为框架更新或模型换代而消失,它们是当前硬件架构下的基本事实。
在这个基本事实上做决策,比在文档里找”最佳实践”更可靠。