ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

SGLang 的推测解码算法(EAGLE3、EAGLE、MTP、UNO、DFLASH)怎么选?

2026/9/13 17:34:32 拓冰建站 浏览量
SGLang 的推测解码算法(EAGLE3、EAGLE、MTP、UNO、DFLASH)怎么选? SGLang 的推测解码算法EAGLE3、EAGLE、MTP、UNO、DFLASH怎么选【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang在 SGLang 上部署推理服务后如果 decode 阶段成为吞吐瓶颈可以用推测解码让目标模型一次校验多个 draft token。SGLang 提供了多套实现EAGLE-2--speculative-algorithm EAGLE、EAGLE-3--speculative-algorithm EAGLE3、针对 MTP 模型的推测解码路径、UNOLoRA 适配器方式、DFLASH线性块校验另外还有不需要额外模型的 NGRAM 变体。选择依据不是哪个最快而是你手上有什么 draft 资源、目标模型是否内置 MTP、以及并行方式的限制。本文按先判断资源、再给出每种算法的启动命令、最后调参和验证的顺序走一遍所有命令和参数均来自 SGLang 的 推测解码文档。先看你手上有什么 draft 资源选算法的第一步是盘点资源而不是比较性能。SGLang 文档给出的选择依据如下你已有的资源应选的算法启用方式关键限制EAGLE-3 draft checkpointEAGLE3--speculative-algorithm EAGLE3--speculative-draft-model-path ...需要独立 draft 模型文档基准中吞吐最高EAGLE-2 draft checkpoint兼容面最广的默认选择EAGLE--speculative-algorithm EAGLE--speculative-draft-model-path ...调--speculative-num-steps、--speculative-eagle-topk、--speculative-num-draft-tokens目标模型自带 MTP 头MTP走推测解码流程--speculative-algorithm EAGLE通常配小步数部分 MTP 模型可省略 draft path目标模型训练好的 UNO LoRA 适配器UNO--speculative-algorithm UNO--uno-lora-path ...CUDA FA3要求 TPPP1不支持 DP attention匹配的 DFlash draft checkpointDFLASH--speculative-algorithm DFLASH--speculative-draft-model-path ...不支持--enable-dp-attentionpp_size 1会关闭 overlap scheduler 和 mixed chunked prefill更小规模的 draft LLMSTANDALONE--speculative-algorithm STANDALONE--speculative-draft-model-path ...不支持--enable-dp-attention没有额外模型NGRAM--speculative-algorithm NGRAM仅 CUDA不支持--enable-dp-attention性能参考文档示例LLaMA-Instruct 3.1 8B 在 MT bench 上、1x H100 的结果不开推测解码 158.34 tokens/sEAGLE-2 为 244.10 tokens/sEAGLE-3 为 373.25 tokens/s。这是文档给出的基准示例不代表你环境下的固定预期选型后仍建议用自己的负载验证。EAGLE-2 / EAGLE-3有 draft checkpoint 时的主路径EAGLE-2 和 EAGLE-3 的参数基本一致核心是--speculative-num-steps自回归 draft 深度、--speculative-eagle-topk每步分支因子、--speculative-num-draft-tokens并行校验容量三个参数。文档给出的默认规则三者要么全部不设走 auto-tuning要么全部显式设置来调参topk1时num_draft_tokens会自动调整为num_steps 1。auto 默认值方面Llama/Grok 系是num-steps5 / topk4 / num-draft-tokens8多数其他模型是3 / 1 / 4。EAGLE-2 启动示例目标模型 Llama-2-7b-chat-hfpython3 -m sglang.launch_server \ --model meta-llama/Llama-2-7b-chat-hf \ --speculative-algorithm EAGLE \ --speculative-draft-model-path lmsys/sglang-EAGLE-llama2-chat-7B \ --speculative-num-steps 3 \ --speculative-eagle-topk 4 \ --speculative-num-draft-tokens 16 \ --mem-fraction-static 0.7 \ --cuda-graph-max-bs-decode 8 \ --log-level warningEAGLE-3 启动示例目标模型 Llama-3.1-8B-Instructpython3 -m sglang.launch_server \ --model meta-llama/Meta-Llama-3.1-8B-Instruct \ --speculative-algorithm EAGLE3 \ --speculative-draft-model-path jamesliu1/sglang-EAGLE3-Llama-3.1-Instruct-8B \ --speculative-num-steps 3 \ --speculative-eagle-topk 4 \ --speculative-num-draft-tokens 16 \ --mem-fraction-static 0.7 \ --cuda-graph-max-bs-decode 8 \ --dtype float16 \ --log-level warning注意--speculative-token-map对 EAGLE-3 模型会被忽略该参数是 EAGLE-2 场景下用 FR-Spec 高频词表降低lm_head开销的优化仅在有对应 token map 文件时才有意义。draft 模型的其他常用参数--speculative-draft-model-quantizationdraft 模型量化方式默认与目标模型一致目标模型量化而希望 draft 不量化时用unquant。--speculative-draft-model-revision指定 draft 模型版本省略时自动取main。--enable-torch-compile可选--torch-compile-max-bs对 draft 模型做算子级优化。文档明确说明收益取决于硬件、模型和 batch size小 draft 模型在 H100 且启用 CUDA graph 时收益可能可忽略建议在自己的环境开/关各测一次再决定是否保留。MTP目标模型自带多 token 预测头时对内置 MTP 头的模型SGLang 通过推测解码工作流来使用 MTP算法仍是EAGLE但通常配较小的步数且部分 MTP 模型可以省略--speculative-draft-model-pathdraft 路径由模型自身处理。文档以XiaomiMiMo/MiMo-7B-RL为例python3 -m sglang.launch_server \ --model XiaomiMiMo/MiMo-7B-RL \ --host 0.0.0.0 \ --trust-remote-code \ --speculative-algorithm EAGLE \ --speculative-num-steps 1 \ --speculative-eagle-topk 1 \ --speculative-num-draft-tokens 2 \ --mem-fraction-static 0.7 \ --cuda-graph-max-bs-decode 8 \ --log-level warningDeepSeek V3.2 的 MTP 用法见 DeepSeek-V3.2 cookbook 4.2.3 节该 cookbook 给出的示例为--speculative-num-steps 3 --speculative-eagle-topk 1 --speculative-num-draft-tokens 4DP Attention 或纯 TP 两种启动方式并说明最小可行配置是--speculative-num-steps 1 --speculative-eagle-topk 1 --speculative-num-draft-tokens 2且 MTP 场景下--max-running-requests默认为 48需要更大 batch 时要显式调大。UNO目标模型有训练好的 UNO LoRA 适配器时UNO 不加载独立 draft 模型而是在每个推测周期的 draft 前向中复用目标 transformer每个请求的第一行走基座权重其余行走 UNO LoRA目标校验完全走基座。适配器必须是为目标模型 checkpoint 专门训练的当前集成已在Qwen/Qwen3-8B上验证启动时遇到不支持的 LoRA 目标层会直接报错拒绝。UNO 的数值用B/K/V表示draft 前向宽度 / 每次扩展保留候选数 / 校验宽度命令映射分两种模式Linear 模式B和V都取--speculative-num-draft-tokens并设--speculative-num-steps 1、--speculative-eagle-topk 1。Tree 模式K 1时进入B --speculative-num-steps 1K --speculative-eagle-topkV --speculative-num-draft-tokens。Linear 8/1/8 示例export UNO_LORA_PATHs-sahoo/uno-qwen3-8B sglang serve \ --model-path Qwen/Qwen3-8B \ --speculative-algorithm UNO \ --uno-lora-path $UNO_LORA_PATH \ --speculative-num-steps 1 \ --speculative-eagle-topk 1 \ --speculative-num-draft-tokens 8 \ --attention-backend fa3 \ --tp 1 \ --host 0.0.0.0 \ --port 30000Tree 8/32/8 示例--speculative-eagle-topk 32使其选择 tree 模式sglang serve \ --model-path Qwen/Qwen3-8B \ --speculative-algorithm UNO \ --uno-lora-path $UNO_LORA_PATH \ --speculative-num-steps 7 \ --speculative-eagle-topk 32 \ --speculative-num-draft-tokens 8 \ --attention-backend fa3 \ --tp 1 \ --host 0.0.0.0 \ --port 30000UNO 的硬性约束选型前必须确认需要 CUDA 且 prefill/decode 都用 FA3TP 和 PP 都必须是 1不支持 DP attention 和 context parallelism--uno-lora-path加载的是固定内部适配器不能与请求级可选的 Multi-LoRA 服务混用不要设--speculative-use-rejection-samplinggrammar 解码、返回 logprobs/hidden states、sampling penalties、min_p、logit bias、严格 thinking、确定性推理均不支持mixed chunked prefill 被关闭。tree 模式下两个 acceptance threshold 必须保持 1.0V B且V 128V * K 2048SGLang 会在启动时校验其余约束。DFLASH有匹配的 DFlash draft checkpoint 时DFLASH 与 EAGLE 的树校验不同它校验的是线性 draft block围绕 block size / draft window 配置。文档给出的适用示例是目标模型meta-llama/Llama-3.1-8B-Instruct搭配z-lab/LLaMA3.1-8B-Instruct-DFlash-UltraChatpython3 -m sglang.launch_server \ --model meta-llama/Llama-3.1-8B-Instruct \ --speculative-algorithm DFLASH \ --speculative-draft-model-path z-lab/LLaMA3.1-8B-Instruct-DFlash-UltraChatDFLASH 特有参数--speculative-num-draft-tokensDFlash 的 verify block size缺省时从 draft 配置推断推断不出则取 16。--speculative-dflash-block-size上者的别名。--speculative-draft-window-sizedraft KV 滑窗大小设置时必须 --speculative-num-draft-tokens。三个容易踩的通用配置点Overlap scheduler 与 topk 的冲突。推测解码默认运行 V2 speculative worker如EAGLEWorkerV2并启用 overlap scheduler传--disable-overlap-schedule可回退到同步路径。但 overlap scheduler 目前只支持--speculative-eagle-topk 1显式设topk 1服务器会直接报错省略该参数时auto-tuning 对部分模型如 Llama可能选出topk 1与 overlap scheduler 不兼容且不一定立刻报配置错误。所以想开 overlap 时显式写--speculative-eagle-topk 1。接受率随负载波动时用 adaptive 模式。若用 EAGLE 配topk 1且不同请求的接受率差异大可启用 Adaptive speculative decoding它在运行时根据观察到的接受长度动态调整speculative_num_steps / speculative_num_draft_tokens当前仅支持EAGLE/EAGLE3且topk 1不满足条件时回退到静态配置。调参用基准脚本。三个核心参数num-steps / topk / num-draft-tokens的最优组合没有通用答案文档指出的调参工具是仓库内的 bench_speculative.py用它在你自己的模型和负载上扫描组合。验证推测解码是否生效各算法启用后都通过标准 OpenAI 兼容接口验证。以 EAGLE 为例向启动的服务器默认端口 30000发一条请求import openai client openai.Client(base_urlhttp://127.0.0.1:30000/v1, api_keyNone) response client.chat.completions.create( modelmeta-llama/Llama-2-7b-chat-hf, messages[ {role: user, content: List 3 countries and their capitals.}, ], temperature0, max_tokens64, ) print(response.choices[0].message.content)能正常返回生成内容说明服务可用加速是否达到预期用bench_speculative.py对比开/关推测解码的吞吐来确认文档没有给出必须达到某数值的判定标准。OOM 时按这四步收内存推测解码会增加显存占用draft 树、CUDA graph、校验相关 buffer。文档给出的排查顺序降静态内存占比文档标注最有效--mem-fraction-static 0.5。该参数控制模型权重 KV cache 池的预算调低后为激活和 CUDA graph buffer 留出动态空间。注意省略时 SGLang 会按其他配置自动估算自动值对某些负载可能仍然激进。降 CUDA graph batch--cuda-graph-max-bs-decode 4显存更紧时降到 2。该参数省略时按显存和 TP 自动选择大显存 GPU 上可能很大。缩小 draft 树文档给的对照示例是从--speculative-num-steps 5 --speculative-eagle-topk 8 --speculative-num-draft-tokens 64收紧到--speculative-num-steps 3 --speculative-eagle-topk 1 --speculative-num-draft-tokens 4。限制并发--max-running-requests 4降低在途请求数。文档同时给了一份最小可用配置OOM 时可以先落到这份配置跑通再逐项放大python3 -m sglang.launch_server \ --model your-model \ --speculative-algorithm EAGLE \ --speculative-draft-model-path your-draft-model \ --speculative-num-steps 3 \ --speculative-eagle-topk 1 \ --speculative-num-draft-tokens 4 \ --cuda-graph-max-bs-decode 2 \ --mem-fraction-static 0.5 \ --max-running-requests 4 \ --log-level warning其中your-model、your-draft-model替换为你实际的目标模型和 draft 模型路径。恢复顺序先逐步增大--speculative-num-draft-tokens、--speculative-eagle-topk、--cuda-graph-max-bs-decode--mem-fraction-static放到最后调且只在运行稳定之后调。边界与下一步选算法时先把限制条件摆上桌UNO 只支持 TPPP1 且要 FA3DFLASH 要求pp_size 1且不支持 DP attentionNGRAM 仅限 CUDA 且不支持 DP attentionSTANDALONE 不支持 DP attention——如果你的部署用了多卡 TP/DP 或 DP attention可选范围会明显收窄EAGLE 系列是文档中兼容性面最广的路径。完整的参数表含--speculative-accept-threshold-single、--speculative-attention-mode、--speculative-draft-attention-backend、ngram 系列参数和环境变量SGLANG_NGRAM_FORCE_GREEDY_VERIFY见 推测解码文档的 Full Parameter Reference 章节。【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考