什么是 P/D 分离(PD Disaggregation)?大模型推理吞吐提升 50% 的核心架构全解析
30 秒快速回答
P/D 分离(Prefill-Decode Disaggregation)是把大模型推理拆成两个独立阶段、分别部署在不同 GPU 池上的架构:高算力需求的预填充阶段(Prefill,处理用户输入、生成首 Token)跑在”预填充池”,高带宽需求的解码阶段(Decode,逐 Token 生成)跑在”解码池”,中间通过 RDMA 网络把 KV Cache 从 P 池传到 D 池。这样两个阶段不再抢占同一批 GPU 资源,吞吐最高提升约 50%,长上下文请求的延迟也大幅下降。2026 年,P/D 分离已成为 vLLM、SGLang、DeepSeek 等生产推理系统的标准配置。
核心价值一句话: 把”算力密集型”和”带宽密集型”的两类任务各归其位,让每块 GPU 只干自己擅长的事,用同样的硬件换更高的吞吐。
为什么需要 P/D 分离?两个阶段在”打架”
大模型推理天然分两个阶段:Prefill 一次性处理整个输入 prompt(如 1000 个 Token),计算密集、需要大量并行算力;Decode 逐个生成输出 Token,显存带宽密集、算力利用率低。
| 维度 | Prefill(预填充) | Decode(解码) |
|---|---|---|
| 计算特性 | 计算密集,可大规模并行 | 访存密集,逐 Token 串行 |
| 瓶颈 | GPU 算力(FLOPs) | 显存带宽(HBM) |
| 时长占比 | 低(一次完成) | 高(占总时长 70%+) |
| 最佳部署 | 高算力卡(如 H100 大 batch) | 高带宽卡 + 大 KV Cache |
把两者放在同一批 GPU 上跑,就像让”搬运工”和”计算员”共用同一张办公桌:Prefill 突发占用全部算力时,正在 Decode 的请求被迫排队;Decode 请求占满带宽时,Prefill 的并行度又被拖慢。于是系统吞吐被”最差耦合”锁死,还常出现”一个长 prompt 拖垮整批短请求”的尾延迟问题。
P/D 分离怎么工作?一个请求的完整旅程
P/D 分离的架构很简单:P 池只做 Prefill,D 池只做 Decode,中间靠高速网络传 KV Cache。
用户请求
│
▼
[P 池 · Prefill GPU 集群] ← 高算力池,并行处理输入,产出 KV Cache
│ 生成中间态 KV Cache(可高达数 GB)
│ 通过 RDMA / NVLink 高速传输(关键路径)
▼
[D 池 · Decode GPU 集群] ← 高带宽池,加载 KV Cache 后逐 Token 生成
│
▼
输出 Token 流式返回用户
关键设计有四点:① 弹性配比——P 池与 D 池按业务负载独立扩容(如 1:3),互不拖累;② KV Cache 传输——用 RDMA 网卡把 Prefill 产出的 KV Cache 直接送到 D 池显存,避免落盘;③ 无状态化——请求在 D 池解码完毕后即释放,D 池无需为长连接保活;④ 调度协作——由路由层把同一请求的 Prefill 与 Decode 绑定到相邻节点,减少跨机房传输。DeepSeek 等系统还会叠加 PD+EP(专家并行),让专家网络也按阶段独立调度。
收益有多明显?一体化 vs P/D 分离实测对比
业界公开数据(vLLM 文档与多篇系统论文口径)显示,P/D 分离带来的收益相当可观:
| 指标 | 一体化部署 | P/D 分离 | 变化 |
|---|---|---|---|
| 吞吐量(TTFT 稳定前提) | 基线 | 提升 30%-50% | ↑ |
| 首 Token 延迟(TTFT) | 长 prompt 下抖动明显 | 稳定、不拖累短请求 | 大幅改善 |
| 算力利用率 | 混合负载下 40% 左右 | 各池独立优化至 65%+ | ↑ |
| 故障域 | 单个节点故障影响全流程 | P/D 池可各自降级 | 隔离性更好 |
| 部署成本 | 单套集群 | 多池 + RDMA 网络 | ↑(硬件门槛) |
需要清醒的是:P/D 分离不是免费午餐——它要求你拥有多节点集群和高速内部网络(至少 200Gbps 级 RDMA),对小规模单机部署反而增加复杂度。它的最优场景是高并发、长上下文、混合负载的生产服务,而非个人本地推理。
怎么落地?vLLM 与 SGLang 的配置示例
当前主流推理框架原生支持 P/D 分离。vLLM 采用”一个引擎多角色”模式:同一集群内用 vllm serve 启动两个引擎实例,分别指定 --role prefill 与 --role decode,并通过共享 KV 传输服务通信:
# P 池节点:只跑 Prefill
vllm serve Qwen/Qwen3-72B-Instruct \
--role prefill \
--kv-transfer-config '{"kv_connector":"NcclConnector","kv_role":"kv_producer","kv_parallel_size":2,"kv_rank":0,"kv_leader_addr":"pd-svc:8000"}' \
--tensor-parallel-size 2
# D 池节点:只跑 Decode
vllm serve Qwen/Qwen3-72B-Instruct \
--role decode \
--kv-transfer-config '{"kv_connector":"NcclConnector","kv_role":"kv_consumer","kv_parallel_size":2,"kv_rank":1,"kv_leader_addr":"pd-svc:8000"}' \
--tensor-parallel-size 2
SGLang 则通过数据并行 + 分阶段配置实现:--dp-size 控制 Prefill/Decode 数据并行度,--enable-pd-disagg 开启分离模式,再配合 --pd-tp-comm-overlap 让 KV 传输与计算重叠。要点是:P 池与 D 池的模型并行配置必须一致(TP 数相同),否则 KV 分片对不上;同时为 KV 传输预留独立网卡或至少独立队列,避免与业务流量争抢带宽。
什么时候该上 P/D 分离?
| 场景 | 是否值得 | 说明 |
|---|---|---|
| 高并发 API 服务(>50 QPS) | ✅ 强烈推荐 | 吞吐收益明显,TTFT 稳定 |
| 长上下文/长文档问答 | ✅ 推荐 | 长 prompt 的 Prefill 不再拖垮短请求 |
| 单机/双卡部署 | ⚠️ 谨慎 | 网络与显存开销可能超过收益 |
| 内部实验、批量离线推理 | ❌ 不建议 | 用连续批处理 + 量化更简单 |
取舍心法:判断标准不是”酷不酷”,而是”你的流量里 Prefill 与 Decode 是否长期互抢资源”。如果是,P/D 分离就是性价比最高的解;如果负载很轻,先把连续批处理和 KV Cache 优化做好更划算。
总结与延伸阅读
P/D 分离用一句话概括:让算力干算力的活、带宽干带宽的活。它把推理系统的吞吐天花板抬高了 30%-50%,是 2026 年生产级大模型服务绕不开的架构演进。理解它并不难——抓住 Prefill/Decode 资源特性差异、KV Cache 高速传输、P/D 池独立扩缩容这三个关键词就够了。
想继续深入,推荐阅读站内教程: