Academy

Prefill 与 Decode

大模型生成文字的两个阶段:「理解」和「输出」

Prefill Decode KV Cache TTFT

阅读时间 ~10 分钟

Chapter 01

两个阶段

当你向大模型提问时,模型并不是"思考一下然后回答"——它其实经历了两个截然不同的阶段。就像考试一样:先读题,再写答案

第一个阶段叫 Prefill,模型一次性"阅读"你的全部输入;第二个阶段叫 Decode,模型开始一个字一个字地"书写"回答。

互动演示:对话生成全过程

请用三句话介绍量子计算
点击「播放」开始演示
KV Cache 0%
💡 Prefill 像老师快速浏览你的作文(一目十行),Decode 像老师一个字一个字写评语。
Chapter 02

Prefill 阶段

在 Prefill 阶段,模型将你的所有输入 token 并行处理。这意味着无论你的 prompt 有 10 个 token 还是 1000 个 token,它们都是"同时被理解"的——就像 GPU 同时运算数千个矩阵乘法。

在这个过程中,模型为每个 token 计算出一对向量:K(Key)V(Value),存入 KV Cache。这个缓存会在后续的 Decode 阶段反复使用,避免重复计算。

互动:并行处理输入 Token

输入 Token(点击播放后全部同时亮起):

KV Cache 构建:
K vectors
V vectors
显存占用 0%

Prefill 的计算量与输入长度的平方成正比(因为 Attention 机制),因此长 prompt 会显著增加 Prefill 时间。但好消息是:这些计算高度并行,GPU 可以充分利用其算力。

💡 Prefill 就像把整本书一次性拍照——不需要一页页翻,而是用相机一次全拍下来。
Chapter 03

Decode 阶段

Prefill 完成后,模型进入 Decode 阶段。此时模型逐个生成 token:每生成一个 token,都会把它作为输入送回模型,生成下一个 token。这就是所谓的 auto-regressive(自回归)生成。

关键优势在于:每次生成新 token 时,模型不需要重新处理之前的所有 token——它直接读取 KV Cache 中已存储的信息。这意味着每次只需做一次前向传播。

互动:自回归生成过程

KV Cache (from Prefill)
11 tokens cached
等待生成...
注意:每个新 token 只需一次前向传播 + 查询 KV Cache,无需重新计算之前所有 token。这就是 KV Cache 的核心价值。

Decode 阶段的瓶颈不在计算量——每次只处理 1 个 token 的计算其实很少——而在于内存带宽。每生成一个 token,都需要将整个模型的权重从显存读入计算单元。模型越大,读取越慢。

💡 Decode 像写书法——每一笔都要等上一笔干了才能写下一笔,但有了 KV Cache 就不用每次重新研墨。
Chapter 04

TTFT vs TPS

理解了两个阶段,我们就能理解两个关键性能指标:

TTFT (Time To First Token) —— 从你发送请求到看到第一个字的等待时间。这个时间主要由 Prefill 阶段决定。prompt 越长,TTFT 越大。

TPS (Tokens Per Second) —— 模型输出文字的速度。这个由 Decode 阶段的单 token 生成时间决定,与 prompt 长度几乎无关。

互动:时间线可视化

拖动滑块改变 Prompt 长度,观察 TTFT 如何变化:

Prompt 长度 512 tokens
12851220484096
■ Prefill (TTFT) ■ Decode (每个 Token)
~200ms
TTFT
~50 tok/s
TPS
~20ms
单 Token 延迟
💡 TTFT 是水龙头打开后第一滴水出来的时间,TPS 是之后水流的速度。长 Prompt = 水管更长 = 等更久。
Chapter 05

为什么 Prefill 是瓶颈?

Prefill 和 Decode 面临的硬件瓶颈完全不同。理解这一点,就理解了为什么不同的硬件架构在这两个阶段有不同的表现。

🔥

Prefill

计算密集型 Compute-bound
GPU 算力利用率~90%
内存带宽利用率~40%

大量并行矩阵运算
GPU 满负荷工作

💾

Decode

内存密集型 Memory-bound
GPU 算力利用率~10%
内存带宽利用率~85%

每次只处理 1 个 token
但要读取全部模型权重

这就是为什么 ANE 特别适合 Prefill —— ANE 擅长密集矩阵运算,正好是 Prefill 需要的。
💡 Prefill 像搬一整栋楼的家具(计算密集),Decode 像每次只搬一件但要不停跑(带宽密集)。
Chapter 06

总结

01

Prefill = 理解

并行处理所有输入 token,构建 KV Cache。计算密集型,GPU 满载运行。

02

Decode = 输出

自回归逐 token 生成,复用 KV Cache。内存带宽密集型,算力利用率低。

03

TTFT vs TPS

TTFT 取决于 Prefill 速度,TPS 取决于 Decode 速度。两者优化方向不同。

04

KV Cache 是桥梁

KV Cache 连接两个阶段,用空间换时间,避免 Decode 时重复计算。

"理解 Prefill 和 Decode,就理解了为什么大模型'先等后快'——以及如何优化它。"

下一篇我们讲 ANE 如何用混合推理将 Prefill 加速 11.3 倍

ANE 混合推理加速 →