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 支撑超高吞吐 |
三、核心逻辑
-
TP 是必选的
- 因为 单层矩阵太大,哪怕 GPU 很多,也无法让一张卡存完整层
-
PP 是可选的
- 当 GPU 少、模型大 → PP 可降低显存压力
- GPU 多、显存充足 → PP 主要用于吞吐优化
-
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 不能无限增大,原因有三:
-
通信代价
- 每一层都有 All-Reduce / All-Gather
- TP 越大,延迟越高,GPU 利用率下降
-
硬件拓扑限制
- NVLink / NVSwitch 通常 4 / 8 / 16 张卡是高效上限
- 跨机 TP 性价比极差
-
算子效率
- 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 做一份 真实数值决策示例
你选哪个?

浙公网安备 33010602011771号