Skip to content

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 解耦,包括 SGLangvLLMNVIDIA Dynamollm-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 推理系统响应能力与可扩展性的关键技术。

Maintained by Robin