Skip to content

推测解码 — 练习

练习 1:加速比分析

假设:

  • 目标模型每步推理需要 10ms
  • 草稿模型每步推理需要 1ms
  • 草稿模型预测 5 个 token
  • 验证 5 个 token 也需要 10ms(并行)
  • 平均接受率 80%

计算:

  1. 传统解码生成 10 个 token 的时间
  2. 推测解码生成 10 个 token 的时间(平均)
  3. 加速比
参考答案
  1. 传统解码:10 × 10ms = 100ms

  2. 推测解码

    • 每轮:草稿 5 × 1ms = 5ms + 验证 10ms = 15ms
    • 接受率 80%,每轮平均接受 5 × 0.8 = 4 个 token(简化计算)
    • 更精确:P(接受k个) = 0.8^k × 0.2(第k+1个被拒绝)
    • 平均每轮接受约 4 个 token
    • 生成 10 个 token 约需 10/4 = 2.5 轮
    • 2.5 × 15ms = 37.5ms
  3. 加速比:100 / 37.5 ≈ 2.67×

练习 2:方法选择

为以下场景选择最合适的推测解码方法:

  1. 低延迟对话场景,目标模型 7B
  2. 批量推理场景,高吞吐优先
  3. 硬件资源受限(单 GPU,显存紧张)
参考答案
  1. EAGLE:准确率高,加速效果好。7B 模型的草稿模型很小(~100M 参数),额外显存开销小。

  2. N-gram 或 Medusa:批量场景中推测解码的效果会降低(因为 batch 中各请求的接受率不同导致 padding 浪费)。N-gram 无额外计算开销最合适。Medusa 可以用 top-k 树验证,适合批量场景。

  3. N-gram:零额外显存开销。或者 Medusa(只需添加几个线性头,显存开销很小)。EAGLE 需要额外的草稿模型,可能显存不够。

拓展挑战

  • 阅读 vllm/v1/spec_decode/rejection_sampler.py,理解树形推测的验证逻辑
  • 分析 EAGLE 的 hidden state 复用机制
  • 研究推测解码如何处理结构化输出(JSON grammar)