详细解释
解码阶段(Decode Phase) 就是模型”一个字一个字蹦出回答”的那个阶段。Prefill 完成后,Decode 会进入一个自回归循环:
- 输入上一个位置的 Token(只有 1 个 Token)
- 结合缓存里全部历史 Token 的 K、V(KV Cache)做注意力计算
- 预测下一个 Token 的概率分布,采样/贪心选一个
- 把这个新 Token 的 KV 追加到 Cache 末尾
- 重复直到遇到停止符或达到 max_tokens
Decode 的关键特征
| 维度 | Decode 阶段 |
|---|---|
| 每步输入 | 仅 1 个 Token(或小步长若干个) |
| 计算方式 | 强串行——必须等第 N 个出来才能生成第 N+1 个 |
| 主要瓶颈 | GPU 显存带宽(每次要读整段 KV Cache,KV 越长越慢) |
| 时间占比 | 短 Prompt + 长回答时占总延迟大头 |
| 平均速度 | 就是常说的 TPS(每秒Token数) |
Decode 速度为什么越来越慢
你会感觉生成回答后半段比开头”卡”:因为每 Decode 一步,KV Cache 都在变长一点点 → 每步要读的显存字节数线性增长 → 单步时间越来越长。生成 8000 Token 的结尾部分,单步时间是第 1 步的 3–5 倍很正常。
唯元智创(Weimeta)在选品聚合时对每个模型都实测了 2K/32K 上下文的 Decode 稳定 TPS,并在模型详情页展示;如果你是长文生成业务,可以直接按长 Decode TPS 选型,避免踩”短 Prompt 跑分好看长文就拉胯”的坑。
常见问题
为什么 Decode 阶段不能并行像 Prefill 那样快?
因为第 N+1 个输出依赖第 N 个 Token 作为输入(因果语言模型的因果掩码),天然串行。加速 Decode 只能靠投机采样(Speculative Decoding)、连续批处理(Continuous Batching)、架构压缩 KV(GQA/MLA),不能靠一次性并行多个。