vLLM架构TP PP DP选择

总结

理论知识

TP,PP参数配置
TP 在服务器的内部,内部并行策略。 一般一个服务器不超过8个GPU.
PP 跨服务器: 当TP无法满足的情况下,才选择PP。 因为同一个服务器的GPU通讯性能(NVLink/NVSwitch)是跨GPU服务器(光模块)的10x 甚至更多。

1. Tensor Parallel (TP) 的作用

  • TP 是拆分每层矩阵计算的手段
  • 即使你有 100 张或 1000 张 GPU,单层矩阵太大仍然需要 TP
  • 因为单层参数量巨大,单张卡无法存储或计算整个层

2. Pipeline Parallel (PP) 的作用

  • PP 是跨层拆分
  • 当 TP 已经能让每张卡存储单层矩阵时,PP 可以视情况选择
  • 小规模 GPU → PP 可以减少层跨卡压力
  • 大规模 GPU → PP 主要用来增加吞吐或降低 latency

在工程上可接受的 TP 粒度内,单个 TP group 是否能完整承载其负责的模型层。

如果在 TP=4 或 TP=8 的情况下,
权重 + 激活 + KV + buffer 能装进单卡显存,
那么 不需要 PP,直接用 TP + DP 即可。

只有当 TP 已经达到通信可接受上限,但单卡仍然 OOM,
才会引入 PP,把层数再拆分。

3. Data Parallel (DP) 的作用

  • DP 用于 batch 并行 / 请求并行
  • GPU 数量越多,DP 越重要

用多套模型副本,同时服务多份数据。
TP × PP = 一条流水线,拆得很细,协作完成一件产品(一次 query)
DP = 多条完全相同的流水线,每条流水线独立做自己的产品
TP/PP 内部拆分 → “工人分工协作”
DP → “复制多条流水线,增加产能”
所以可以理解成“小集群”的概念:
每个 DP 副本占用自己的一小组 GPU(TP×PP),可以独立工作。

案例

* 总 GPU 数 = 1024 张
* 模型:Qwen-MAX 325B
* TP = 8 → 每层矩阵拆 8 块
* PP = 4 → 96 层拆成 4 段
* TP × PP → 每次 query 占用 8 × 4 = 32 张 GPU

---

## 二、DP 计算逻辑

**DP = TP × PP 的副本**

* 每个 DP 副本占用 **32 张 GPU**
* 总 GPU 数 = 1024 张
* 可以创建的 DP 副本数量:

[
\text{DP 副本数} = \frac{\text{总 GPU 数}}{\text{单个 DP 副本占用 GPU 数}} = \frac{1024}{32} = 32
]

✅ 所以 **可以同时运行 32 个 query**(每个 query 对应一个 DP 副本)

二、重新整理部署策略表(TP 必须)

GPU 数量 每卡显存 TP PP DP 说明
4 张 88 GB/卡 ✅ 必须 ✅ 可选 ❌ 可选 每卡存 1/4 层矩阵 → TP 必须;PP 可选;DP 可选(吞吐低)
20 张 17.7 GB/卡 ✅ 必须 ❌ 可选 ✅ 建议 权重被拆成更小块 → TP 必须;PP 可省;DP 用于提高吞吐
100 张 3.5 GB/卡 ✅ 必须 ❌ 可选 ✅ 必须 每层拆分得更细 → TP 必须;PP 可省;DP 必须支持高并发
1000 张 0.35 GB/卡 ✅ 必须 ❌ 可选 ✅ 必须 每层拆分极小 → TP 必须;PP 不必要;DP 支撑超高吞吐

三、核心逻辑

  1. TP 是必选的

    • 因为 单层矩阵太大,哪怕 GPU 很多,也无法让一张卡存完整层
  2. PP 是可选的

    • 当 GPU 少、模型大 → PP 可降低显存压力
    • GPU 多、显存充足 → PP 主要用于吞吐优化
  3. DP 是可选 / 必选

    • 少量 GPU → 可选
    • 大量 GPU → 必须,提高 batch 并行与吞吐

换句话说,TP 永远存在,PP/DP 根据 GPU 数量和吞吐需求来调节。


要不要PP

这是一个非常关键、而且面试官真正想听到的判断题。你的直觉方向是对的,但需要把判断逻辑说得工程化、可量化,而不是一句“装得下就不用 PP”。

我给你一个可直接在面试中使用的判断框架


一句话结论(先给结论)

是否需要 PP(Pipeline Parallel)只有一个根本判断标准:
在“可接受的 TP 粒度”下,单个 TP group 能否完整承载其负责的模型层(权重 + 激活 + KV + buffer)。

如果能 → 不需要 PP
如果不能 → 必须引入 PP

“装得下”是必要条件,但不是充分条件


一、先澄清一个常见误解(很重要)

误解
“模型拆成 4 或 8 份后能装进 GPU,就不用 PP 了”

正确说法
“在合理的 TP 宽度下,如果单个 TP group 可以承载完整 layer block,则可以不使用 PP”

原因:

  • TP 拆的是层内矩阵
  • PP 拆的是层数
  • PP 是为了解决 “单 TP group 装不下其负责的层” 这个问题

二、判断是否需要 PP 的工程化流程(面试加分)

Step 1:确定 TP 上限(不是想拆多大就多大)

TP 不能无限增大,原因有三:

  1. 通信代价

    • 每一层都有 All-Reduce / All-Gather
    • TP 越大,延迟越高,GPU 利用率下降
  2. 硬件拓扑限制

    • NVLink / NVSwitch 通常 4 / 8 / 16 张卡是高效上限
    • 跨机 TP 性价比极差
  3. 算子效率

    • GEMM 太碎 → SM 利用率下降

工程经验值(推理)

场景 合理 TP
单机 NVLink 4 / 8
多机 ≤ 8(强烈不建议 >8)

👉 所以判断 PP 的前提是:TP 不会无限放大


Step 2:计算“单个 TP group”的显存占用

一个 TP group(比如 TP=8),检查:

TP group 显存 =
  该 group 的权重
+ 激活(含 checkpoint 或 recompute)
+ KV Cache
+ 临时 buffer
+ CUDA runtime

如果 > 单卡显存必须 PP


Step 3:如果 TP group 装不下 → 引入 PP

PP 的作用是:

把“TP group 承担的层数”再拆小

例如:

  • 原来:TP=8 → 承担 96 层
  • 加 PP=4 → 每个 TP group 只承担 24 层

三、用你刚才的例子严谨回答

场景:Qwen-MAX 325B(8bit)

  • 总权重 ≈ 325 GB
  • A100 96GB
  • 假设 TP=8(工程可接受)

情况 A:TP=8 后,每卡还能装下全部层

  • 每卡权重 ≈ 40 GB
  • KV + buffer + runtime < 50 GB
  • 结论
    不需要 PP
    只用 TP + DP

这是很多线上推理系统的真实选择


情况 B:TP=8 后,每卡还是 OOM

  • 比如:

    • 权重 + KV + buffer > 96GB
  • 结论
    必须引入 PP

比如:

  • TP=8
  • PP=4
  • 每个 TP group 只负责 1/4 层

四、一个非常标准的面试回答模板(建议直接背)

是否需要 Pipeline Parallel,取决于:

在工程上可接受的 TP 粒度内,单个 TP group 是否能完整承载其负责的模型层。

如果在 TP=4 或 TP=8 的情况下,
权重 + 激活 + KV + buffer 能装进单卡显存,
那么 不需要 PP,直接用 TP + DP 即可。

只有当 TP 已经达到通信可接受上限,但单卡仍然 OOM,
才会引入 PP,把层数再拆分。


五、终极总结(你这个问题的精确答案)

条件 是否需要 PP
TP=4/8 后,单卡显存能承载完整层 ❌ 不需要
TP 已经很大,但单卡仍 OOM ✅ 必须
为了吞吐做深流水线 ⚠️ 可选
小模型 / 高显存 GPU ❌ 不需要

如果你愿意,下一步我可以帮你做一件非常有面试杀伤力的事

  • “是否需要 PP” 画成一张 判断流程图
  • 或直接用 Qwen-MAX 325B + A100 96G 做一份 真实数值决策示例

你选哪个?

posted @ 2026-01-17 11:49  向着朝阳  阅读(4)  评论(0)    收藏  举报