SGLang 速懂:Speculative Decoding 如何让小模型先猜、大模型并行验

小模型先写草稿,大模型一次检查一串 token。SGLang 的 Speculative Decoding 试图把 decode 阶段的串行等待,换成「起草 + 并行验收」;它的收益来自 target model 能以接近单 token 的代价评分多个候选,不代表每次都能加速。1

先看懂这条链路

  1. Draft model 自回归生成候选 token。
  2. Target model 一次前向并行评分。
  3. 接受连续的候选;遇到不匹配的位置,按 modified rejection sampling 拒绝并重采样。
正确实现时,输出分布可以保持与 target model 单独采样一致,所以 draft model 负责提速,不负责改答案。2

在 SGLang 里怎么开

图 4 使用 SGLang 官方文档的 STANDALONE 示例:target 是 Qwen/Qwen2.5-7B-Instruct,draft 是 Qwen/Qwen2.5-1.5B-Instruct。推测解码由服务端启动参数决定,客户端仍可使用 OpenAI 兼容的 /v1 接口。3
官方当前文档还提供 EAGLE-2、EAGLE-3、DFLASH、NGRAM 与 MTP 等路径:EAGLE-3 偏向速度/质量优先,EAGLE-2 偏向更广泛兼容;不同算法的约束不能混用。3

调参只盯三个数字还不够

--speculative-num-steps 控制 draft 深度,--speculative-eagle-topk 控制分支宽度,--speculative-num-draft-tokens 控制验证窗口。官方要求这三个参数要么全部交给自动调优,要么一起显式设置。树更大可能提高候选覆盖,也会增加起草开销和显存压力。4
收益小的常见原因是 draft 太慢、和 target 不匹配、target 本身已经很小,或者 batch 已把内存带宽吃满。研究也发现,实际加速更依赖 draft 的延迟,而不只是它的语言建模能力。5

跑实验时的检查单

先用自动参数做一条无推测基线,再对比端到端延迟、吞吐、接受长度和显存。遇到 OOM,SGLang 文档建议依次考虑降低 --mem-fraction-static、减小 CUDA graph decode batch、缩小 draft tree、限制并发;STANDALONE 还不支持 --enable-dp-attention3
这套机制值得开的前提很具体:draft 足够快,猜测和 target 足够接近,显存也留有余量。先测接受率和真实延迟,再决定是否保留。

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content

Comments