如何用「小模型猜、大模型验」让推理速度翻倍?
10 分钟 阅读
大语言模型的推理是自回归的:每次只能生成一个 token,而每个 token 都需要把所有模型权重从内存中加载一遍。没有任何捷径——每一个 token 都要付出一次完整前向传播的代价。
以一个 9B 参数模型为例,在 800 GB/s 带宽的硬件上运行。加载 90 亿参数(FP16 约 18 GB)仅权重传输就需要约 18 ms/token。实际的计算远在数据到达之前就已完成——瓶颈在内存带宽,不在算力。
每个 token 都必须加载全部权重,观察时间如何累积:
如果一个小而快的草稿模型(如 0.8B 参数)能提前猜出多个候选 token 呢?然后让大目标模型(如 35B 参数)在一次前向传播中同时验证所有猜测。
这就是推测解码(Speculative Decoding)。草稿模型以极低成本自回归地提出 γ 个候选 token;目标模型一次性检查它们全部。从前到后依次接受 token,直到第一个不匹配——此时目标模型用自己的预测替换错误猜测,循环重新开始。
小模型快速草拟 token(橙色),大模型一次验证(紫色=通过,红色=拒绝):
混合专家模型(MoE)看上去很高效。一个 35B 总参数 的 MoE 每个 token 只激活 3B 参数。听起来应该很快对吧?问题在于:所有 35B 参数都必须驻留在内存中,因为你永远不知道下一个 token 会用到哪些专家。
这意味着 MoE 的推理速度受限于内存带宽,而非算力。GPU 或 NPU 大部分时间都在等待权重从内存中加载,而不是做数学运算。尽管每个 token 的激活参数只有 3B,你仍然要为 20-38 GB 的权重加载买单。
全部 128 个专家已加载
仅 2 个专家在工作
这是 AtomGradient 研究的核心发现:即使草稿模型的接受率不到 1%,推测解码在 MoE 上仍然能实现 1.26-1.30x 加速。为什么?
关键洞察:当目标模型验证 γ 个草稿 token 时,它只需加载一次权重就能处理 γ+1 个位置,而不是加载 γ+1 次。带宽开销被整个批次摊销,无论接受了多少 token。这是一种全新的加速机制——经典理论认为加速需要高接受率,而这项研究证明了摊销本身就是加速来源。
MoE Q8 模型 — 基线 vs 不同草稿长度的推测解码:
| 草稿长度 (γ) | 基线 (tok/s) | 推测解码 (tok/s) | 加速比 | 接受率 |
|---|---|---|---|---|
| γ = 4 | 49.9 | 58.9 | 1.18x | 0.2% |
| γ = 8 | 49.9 | 60.9 | 1.22x | 0.2% |
| γ = 16 | 49.9 | 64.8 | 1.30x | 0.2% |
数据来源: AtomGradient 306 次实验
更长的草稿 = 更多权重加载摊销,即使接受率接近零:
推测解码的加速比与模型的总参数量(内存占用)成正比,而非激活参数量。这是因为瓶颈在于内存带宽——加载权重——模型越大,可摊销的权重就越多。
更小的草稿模型效果更好:0.8B 草稿优于 2B 草稿。因为极小模型生成候选 token 的开销几乎可以忽略,把更多带宽预算留给主验证过程。
每个 token 都要加载全部权重。内存带宽而非算力,才是推理速度的瓶颈。
小草稿模型猜测 token,大目标模型在一次前向传播中验证全部猜测。
一次加载权重处理多个位置,即使接受率不到 1%,摊销依然有效。
模型越大加速越明显——从 1.12x (4B) 到 2.03x (Dense 9B)。
推测解码证明:即使猜错了 99%,批量验证的效率优势仍然存在。