Prefill / Decode(预填充 / 解码)

LLM 推理的两个阶段:Prefill 阶段一次性处理整个输入 prompt(计算密集,可并行),Decode 阶段逐 token 生成输出(内存密集,串行)。两阶段的瓶颈不同,优化策略也不同。

Prefill / Decode(预填充 / 解码)

一句话理解

Prefill 是"读题",Decode 是"答题"——读题可以一目十行(并行),答题只能一个字一个字写(串行)。

两阶段详解

Prefill(预填充)

处理用户输入的整个 prompt,一次性计算所有 token 的 Key 和 Value 并填入 KV Cache。

  • 输入:完整的 prompt(如 128 个 token)
  • 计算特点:大矩阵乘法,计算密集型,可充分利用 GPU 并行能力
  • 输出:填满的 KV Cache + 第一个生成 token 的概率分布

Decode(解码)

逐 token 生成输出,每步只处理 1 个新 token

  • 输入:上一步生成的 token
  • 计算特点:小矩阵(1×d)与大缓存(t×d)的乘法,内存带宽密集型,GPU 计算单元大量闲置
  • 输出:下一个 token 的概率分布

为什么区分两阶段

text
用户输入 (128 tokens)          模型生成 (64 tokens)
├─ Prefill ──────────┤├─── Decode ──────────────┤
│  一次处理 128 token │  逐个生成 64 token       │
│  GPU 满载          │  │  GPU 大量闲置           │
│  ~50ms             │  │  ~640ms (10ms/token)    │

两阶段的瓶颈完全不同:

PrefillDecode
瓶颈计算量(FLOPS)内存带宽(读取 KV Cache)
处理方式并行串行
耗时占比通常 5-10%通常 90-95%
优化方向Flash Attention、算子融合KV Cache 量化、投机解码

对 API 设计的影响

这就是为什么 LLM API 通常区分 input tokenoutput token 的计费:

  • Input token → Prefill 阶段处理,并行效率高,成本低
  • Output token → Decode 阶段生成,串行效率低,成本高(通常是 input 的 2-4 倍)

OpenAI 的 GPT-4 定价就反映了这个成本差异。

首 token 延迟(TTFT)

用户感知的"模型反应速度"主要由 Prefill 阶段决定——从发送请求到收到第一个 token 的时间叫 TTFT(Time To First Token)。Prompt 越长,Prefill 越慢,TTFT 越高。这就是为什么超长 context 的请求"启动"更慢。

引用本术语的文章