跳转至

Prefill and Decode

自回归 LLM 生成分为资源特征不同的两个阶段。

Prefill

Prefill 一次并行处理完整输入,计算隐藏状态并为各层建立 KV Cache。长 prompt 会带来大规模矩阵 计算,通常更偏计算密集,并直接影响首 token 延迟。

Decode

Decode 每轮处理一个新 token,读取历史 KV Cache,追加当前 Key/Value 并产生下一 token。它并行度 较低、重复次数多,通常更受显存带宽和 KV Cache 访问影响。

为什么要区分

同一硬件和调度策略很难同时适合两个阶段。常见优化包括:

  • Chunked Prefill,避免长输入长期占用调度;
  • Prefill/Decode 分离部署;
  • Decode 请求持续合批;
  • 共享前缀复用 Prefill 产生的 KV Cache。

阶段分离增加了 KV 传输、路由和容量规划复杂度,应在真实请求分布下验证收益。