Prefill-Decode 解耦架构
大型语言模型的推理过程通常分为两个差异显著的阶段:Prefill(预填充) 与 Decode(解码)。将这两个阶段部署到不同的硬件资源池中,可以更好地匹配各自的计算特性,从而提升资源利用率、降低延迟并支持更长上下文。
1. 两个阶段的特点
1.1 Prefill 阶段
Prefill 阶段并行处理整个输入 Prompt,计算 Key/Value 并写入 KV Cache,然后生成第一个输出 Token。
- 计算特性:高度并行的矩阵运算,属于计算密集型任务。
- 主要开销:注意力计算与 KV Cache 构建。
- 影响指标:首 Token 延迟(TTFT)。
1.2 Decode 阶段
Decode 阶段基于 KV Cache 与已生成 Token,逐个自回归地预测下一个 Token。
- 计算特性:串行生成,每次只处理一个 Token,受限于内存带宽,属于内存密集型任务。
- 主要开销:读取不断增长的 KV Cache 与生成下一个 Token。
- 影响指标:Token 间延迟(ITL / TPOT)。
2. 混合部署的问题
在传统的单体式架构中,Prefill 与 Decode 共享同一 GPU,会相互干扰:
- 当 GPU 被计算密集的 Prefill 占用时,Decode 必须等待,导致 ITL 上升。
- 当 GPU 被内存密集的 Decode 占用时,Prefill 被阻塞,导致 TTFT 变长。
- 两个阶段适合的并行策略不同:Prefill 适合张量并行降低延迟,Decode 适合流水线并行提升吞吐。
因此,将两者混合部署难以同时优化 TTFT 与 ITL。
3. 什么是 Prefill-Decode 解耦
Prefill-Decode 解耦将两个阶段部署到不同的硬件资源池中:
- Prefill 集群:配备高算力、适合大规模并行计算的 GPU,侧重高吞吐。
- Decode 集群:配备大显存、高内存带宽的 GPU,侧重低延迟。
两者通过高速网络传输 KV Cache,使请求在 Prefill 完成后无缝移交到 Decode 节点继续生成。
4. 解耦的优势
| 优势 | 说明 |
|---|---|
| 专用资源分配 | 两个阶段可独立调度与扩展,根据负载动态分配资源。 |
| 并行执行 | Prefill 与 Decode 不再相互阻塞,提升并发性与整体吞吐。 |
| 独立优化 | 可分别采用不同的并行策略、量化方式与调度算法。 |
| 缓存复用 | 多轮对话或 Agent 工作流中,KV Cache 可在 Decode 节点复用,降低重复 Prefill。 |
多个开源框架正在积极探索 PD 解耦,包括 SGLang、vLLM、NVIDIA Dynamo 与 llm-d。
5. 面临的挑战
5.1 额外通信开销
Prefill 与 Decode 分离后,需要将 KV Cache 从 Prefill 节点传输到 Decode 节点,网络延迟与带宽可能成为瓶颈。
应对:
- 采用超低延迟、高带宽网络(如 NVLink、InfiniBand、RDMA)。
- 按 Token 粒度分区,最大化数据与 Decode 节点的邻近性。
5.2 调度复杂度提升
系统需实时协调双队列任务分配,否则 Decode 可能空等 Prefill 结果,或 Prefill 资源被 Decode 阻塞。
应对:
- 优先级调度:优先执行 Prefill 以保障 TTFT,公平调度 Decode 以维持 TPOT。
- 流水线并行:重叠 Prefill 与 Decode 执行,减少空闲等待。
5.3 实现复杂度高
框架与调度器需支持流水线操作、KV Cache 输出与异步执行,维护难度高于单机单 GPU 方案。
应对:
- 使用支持 PD 解耦的成熟框架(如 SGLang、vLLM、Dynamo)。
- 通过 RDMA 与零拷贝技术降低传输开销。
5.4 高内存占用
Prefill 阶段可能同时处理多个请求,Decode 阶段需保留完整 KV Cache,二者均带来显著内存压力。
应对:
- 分层存储:热数据保留在 GPU,温/冷数据存储在 CPU 或 NVMe。
- 内存池管理:通过复用减少动态分配开销。
- RDMA 加速:在分布式场景中实现快速 KV Cache 传输。
总结
Prefill-Decode 解耦通过将计算密集型与内存密集型阶段分离,能够降低延迟、提高吞吐量并优化内存使用。随着模型规模与上下文长度的增长,这一方法已成为保持 LLM 推理系统响应能力与可扩展性的关键技术。