两种成本需要分别计算
自回归模型逐个生成 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。
原始资料
- Fast Inference from Transformers via Speculative Decoding:推测解码及保持目标分布的接受机制。
感谢阅读本文
如果你觉得内容有帮助,欢迎点赞支持或分享给同行开发者。
2301 次阅读221 人赞过