Appearance
推测解码 — 练习
练习 1:加速比分析
假设:
- 目标模型每步推理需要 10ms
- 草稿模型每步推理需要 1ms
- 草稿模型预测 5 个 token
- 验证 5 个 token 也需要 10ms(并行)
- 平均接受率 80%
计算:
- 传统解码生成 10 个 token 的时间
- 推测解码生成 10 个 token 的时间(平均)
- 加速比
参考答案
传统解码:10 × 10ms = 100ms
推测解码:
- 每轮:草稿 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
加速比:100 / 37.5 ≈ 2.67×
练习 2:方法选择
为以下场景选择最合适的推测解码方法:
- 低延迟对话场景,目标模型 7B
- 批量推理场景,高吞吐优先
- 硬件资源受限(单 GPU,显存紧张)
参考答案
EAGLE:准确率高,加速效果好。7B 模型的草稿模型很小(~100M 参数),额外显存开销小。
N-gram 或 Medusa:批量场景中推测解码的效果会降低(因为 batch 中各请求的接受率不同导致 padding 浪费)。N-gram 无额外计算开销最合适。Medusa 可以用 top-k 树验证,适合批量场景。
N-gram:零额外显存开销。或者 Medusa(只需添加几个线性头,显存开销很小)。EAGLE 需要额外的草稿模型,可能显存不够。
拓展挑战
- 阅读
vllm/v1/spec_decode/rejection_sampler.py,理解树形推测的验证逻辑 - 分析 EAGLE 的 hidden state 复用机制
- 研究推测解码如何处理结构化输出(JSON grammar)