PD分离中的“PD”指的是大语言模型(LLM)推理过程中的两个核心阶段:Prefill(预填充) 和 Decode(解码)。这两个阶段在计算特性和资源需求上存在显著差异,分离部署可优化整体性能。以下是详细解析:
🔧 一、PD 的具体含义
-
Prefill(预填充阶段)
- 任务:处理用户输入的整个提示(Prompt),为所有Token生成初始的键值缓存(KV Cache)和隐藏状态(Hidden States)。
- 特性:计算密集型(Compute-Bound),计算量与Prompt长度成平方关系(如512个Token的计算量≈512次Decode总和),需高并行算力(如NVIDIA H100)。
-
Decode(解码阶段)
- 任务:基于Prefill生成的KV Cache,逐个生成输出Token(自回归生成),直到生成结束符(如
[EOS]
)。 - 特性:内存带宽密集型(Memory-Bound),单步计算量小但需频繁读写显存(KV Cache占用显存大),依赖高内存带宽(如NVIDIA A100)。
- 任务:基于Prefill生成的KV Cache,逐个生成输出Token(自回归生成),直到生成结束符(如
⚖️ 二、为何需要分离?传统架构的瓶颈
在传统统一架构中,Prefill和Decode在同一GPU上执行,导致两大问题:
- 资源争抢:
- Prefill占用大量算力时,Decode任务被阻塞,增加后续Token的延迟(TPOT上升)。
- Decode频繁读写显存时,Prefill的计算效率下降(TFLOPS利用率低)。
- 延迟与吞吐矛盾:
- 优化TTFT(首Token延迟)需优先处理Prefill,但会牺牲TPOT(后续Token延迟)。
- 反之,优化TPOT会导致新请求的Prefill排队,TTFT升高。
✅ PD分离的核心价值:通过物理隔离两个阶段,独立分配硬件资源(如Prefill用高性能卡,Decode用高带宽卡),解决资源错配问题。
⚙️ 三、PD分离的架构实现
分离后的系统通常包含三类组件:
- 调度器(Scheduler)
- 接收请求,将新Prompt分发给Prefill集群,将生成任务分发给Decode集群。
- Prefill集群
- 由少量高性能GPU组成,专注处理长Prompt的并行计算(如生成512个Token的KV Cache仅需数十毫秒)。
- Decode集群
- 由大量高带宽GPU组成,通过Continuous Batching技术批量处理多个生成任务,提高吞吐量(如单卡支持数十个并发生成)。
- KV Cache传输层
- 通过RDMA、NVLink等高速网络传输KV Cache(可能压缩为INT4以减小体积),减少跨节点延迟。
📊 四、分离后的性能提升
指标 | 传统架构 | PD分离架构 | 提升效果 |
---|---|---|---|
TTFT | 高(Prefill排队) | 降低50%以上 | 首Token响应更快 |
TPOT | 不稳定 | 更稳定(±0.01s) | 后续Token生成更流畅 |
吞吐量 | 受限(单卡瓶颈) | 提升2~5倍 | 支持更高并发 |
硬件成本 | 高(统一用顶级卡) | 优化(按需配卡) | 成本降低30%+ |
💡 案例:在DeepSeek V3的实践中,PD分离使长文本(如10K Token)的TTFT从秒级降至毫秒级,同时Decode集群的GPU利用率从40%提升至80%。
⚠️ 五、技术挑战与应对
- KV Cache传输开销
- 方案:使用RDMA网络 + KV Cache量化(FP16→INT8),传输延迟控制在1ms内。
- 负载不均衡
- 方案:动态资源池(部分GPU可在Prefill/Decode角色间切换)。
- 调度复杂度
- 方案:全局调度器(如Mooncake的Conductor)预测负载并优化KV Cache复用。
💎 总结
- PD = Prefill + Decode,代表LLM推理的两个本质异构阶段。
- 分离目标:解决资源错配,独立优化TTFT与TPOT,实现高吞吐、低延迟、低成本。
- 适用场景:长Prompt问答(如Kimi Chat)、高并发生成(客服机器人)、实时流式输出(如Copilot)。
当前PD分离已成为大模型推理的工业级标准架构(如DeepSeek、阿里、Mooncake),未来将与MoE、投机解码等技术进一步融合,持续推动AI服务效率提升🚀。