技术笔记

推测解码:接受率与 KV cache 的成本边界

自回归模型逐个生成 token。

2026年5月20日阅读约 2 分钟
推测解码KV cache推理

两种成本需要分别计算

自回归模型逐个生成 token。推测解码让较小的草稿模型提出候选,再由目标模型验证多个候选。正确实现的接受和修正采样可保留目标分布;直接接受草稿文本则不具备这个性质。

设一次提出 m 个候选,草稿成本为 D(m),目标验证成本为 V(m),平均接受候选数为 A。粗略吞吐估计为 (A+1)/(D(m)+V(m))。它只用于定位成本,不保证线性加速:批处理、内存带宽和验证后的剩余 token 都会影响结果。

KV cache 的容量估算

普通注意力配置下,缓存元素数量约为 2×层数×序列长度×KV 头数×头维度。前面的 2 对应 Key 和 Value;再乘元素字节数得到缓存大小。GQA 应使用 KV 头数,不能误用查询头数。批量大小和并发请求数会继续放大容量。

可运行的容量计算

import assert from "node:assert/strict";
function cacheBytes({layers, tokens, kvHeads, headDim, bytes}) {
  const values = [layers, tokens, kvHeads, headDim, bytes];
  if (values.some(x => !Number.isSafeInteger(x) || x < 0))
    throw new Error("invalid dimensions");
  return 2 * layers * tokens * kvHeads * headDim * bytes;
}
const bytes = cacheBytes({
  layers: 32, tokens: 4096, kvHeads: 8, headDim: 128, bytes: 2
});
assert.equal(bytes / 1024 ** 3, 0.5);

测量与失败模式

比较同一硬件、量化格式、上下文长度和输出长度下的首 token 延迟与稳态生成速度。草稿接受率低时,额外运行草稿模型可能抵消收益;大批量服务也可能已经充分利用目标模型的计算能力。

容量公式没有计入权重、激活、分配器碎片和分页开销。真实最大并发必须通过显存峰值测试确定。涉及不同 tokenizer 的草稿模型时,还需要专门的对齐算法,不能直接比较 token ID。

原始资料

感谢阅读本文

如果你觉得内容有帮助,欢迎点赞支持或分享给同行开发者。

2301 次阅读221 人赞过