先这样答
PD 分离就是把一次推理请求的两个阶段部署到不同实例池。Prefill 一次处理整段输入,计算各层的隐藏状态和注意力,并生成 KV Cache;它的并行度高,大矩阵计算多,通常更受算力限制。Decode 则基于已有 KV Cache 逐 token 推进,每轮计算量较小,却要反复读取模型权重和缓存,通常更受显存带宽限制。
两者混在同一批卡上时,长输入的 Prefill 会占用计算资源,让正在生成的请求出现 token 延迟抖动;持续运行的 Decode 也会挤占 Prefill 的调度空间,影响首 token 延迟。分离后,两类实例可以选择不同的批处理、并行和扩缩容策略,资源利用率通常更高。不过 Prefill 生成的 KV Cache 必须搬到 Decode 实例,额外增加网络传输、缓存管理和故障处理成本。
面试时可以收束为:PD 分离是在用一次 KV Cache 迁移,换取两种负载的独立调度和更匹配的资源配置。
面试官会怎么追问
-
「KV Cache 搬过去会不会把收益吃掉?」 会,所以网络带宽、传输时延和实例拓扑是落地关键。工程上会采用分块传输、计算与传输重叠,并尽量缩短 Prefill 与 Decode 实例之间的路径;如果缓存搬运太慢,分离未必有收益。
-
「Decode 一定是显存带宽瓶颈吗?」 不一定,这是常见负载下的主要特征,不是绝对结论。批量足够大、上下文很长或采用不同解码算法时,计算占比会上升,仍要结合模型、批大小和硬件做分析。
-
「什么场景不适合做 PD 分离?」 小请求、低并发或输入输出都很短时,混部已经能满足延迟和吞吐要求。此时增加路由、缓存传输和两套资源池,可能比节省的资源更贵。
回答的坑
- 只说 Prefill 快、Decode 慢,却不解释前者偏算力密集、后者偏显存带宽密集,也就没有说明分离部署的根本原因。
- 把 PD 分离说成必然降低延迟是不准确的,正确方向是同时评估独立调度的收益与 KV Cache 传输、资源碎片和运维复杂度。
同系列的题