Skip to content

推理优化 · 推测解码

先判断它为什么只在合适负载下有效。草稿树、EAGLE / Medusa 细节看全量笔记

0. 总图

Decode 一步通常只出 1 个 token,大模型前向很贵却常常吃不满算力。推测解码让小模型(或附加头)先猜一串,大模型一次前向并行校验,对上的整段收下。

两个角色:

  1. Target — 要加速的大模型,最终以它的分布为准。
  2. Draft — 便宜的草稿(小模型或 Medusa / EAGLE 头),连猜 k 个 token。

不是「字一样就收」。Draft 有概率 p,Target 给同一位置打分 q,用 min(1, q/p) 决定收不收,统计上仍是 Target 自己在采样。

它打的是 Decode 生成太慢(一步一字、Memory-Bound)。不替代 PagedAttention 或 Continuous Batching。

先查什么

  1. Decode 是不是 Memory-Bound — 算力闲着、batch 不大,草稿那点额外计算才能填闲置算力。
  2. 接受率 α — 收下的 draft / 总 draft。经验:> 0.6 才像样,< 0.4 先换草稿或缩短 draft_len
  3. 开销比 — Draft 耗时 / Target 耗时。草稿必须足够便宜;开销比接近 1,再高的 α 也被吃掉。
  4. 当前 batch — 车上已经挤满时,再塞草稿计算会和大模型抢算力,加速比掉下来。

何时用、何时关掉

值得开

  • 低到中等并发,Decode 明显 Memory-Bound。
  • 草稿和 Target 同系列、同 tokenizer,接受率稳。
  • 只挂在 Decode。Prefill 已经是大矩阵乘,再猜没有意义。

先别开 / 减步数

  • 大 batch、高并发,GPU 已接近 Compute-Bound。面试口条:车没坐满时多拉人划算,满员再塞人不划算。
  • 草稿太贵或 α 太低:等于白付一次前向。
  • 小流量短请求、TTFT 才是瓶颈:先看 Prefill / 缓存,不是推测。

生产上常对低 batch / 长尾请求开推测,满载时关或减小草稿长度。数字必须按当前模型、版本、硬件压测,不要背论文倍数当自己的结果。

和另外几层怎么叠

口条:分页打底,两边各自持续批,推测只给 Decode,PD 决定它们分家。

  1. PagedAttention — 两端都要,管 KV 怎么切块。接受留页、拒绝还页。
  2. Continuous Batching — P 池、D 池各自调度。推测不替代插队。
  3. 推测解码 — 只开在 Decode
  4. PD 分离 — 最外层。拆开后推测挂在 D 池;P 池不用开。

vLLM 前两样默认就有;EAGLE 用投机模型配置接入。Medusa-1 冻主干保无损,Medusa-2 联合训练更快但能动底座。

深入