桃子桃子快讯
返回首页
工具

Muse Glimmer 30B 启用 DFlash 推测解码需打 6 个补丁,速度提升约 2.3 倍

社区用户在 vLLM 上为 Meta 新模型 Muse Glimmer 30B 启用 DFlash 推测解码时发现 6…

2026.08.11 · 周二6 分钟阅读

Meta 近日发布的 Muse Glimmer 30B 模型在 vLLM 上启用 DFlash 推测解码(speculative decoding)时,会触发一连串配置与代码层面的错误。Reddit 用户 r/LocalLLaMA 板块的开发者通过抓取 Docker 镜像层并逆向读取源码,找到了 6 处需要打补丁的位置,并给出了一份可复现的 Dockerfile。在 RTX PRO 6000 Blackwell、BF16、TP=1、FlashAttention 2 的测试条件下,启用 DFlash 后解码速度从约 25 tok/s 提升到约 57 tok/s,约 2.3 倍加速。

模型与方法说明

Muse Glimmer 30B 是 Meta 发布的一个实验性大模型,vLLM 提供了官方镜像但未公开源码。DFlash 是该模型配套的推测解码方案,配置文件 dflash 指向一个辅助 drafter 模型 meta-models/Muse-Glimmer-30B-assistant,官方推荐的启动参数为 num_speculative_tokens: 15。按 vLLM 官方文档直接启用会直接报错。

六处需要修改的问题

开发者在逆向镜像后逐一修复,共涉及 6 个独立问题:

  • 注册表命名不一致:drafter 的 config 类名为 MuseGlimmerAssistantModel,但 DFlash 代码在注册表查询前将其改名为 DFlashMuseGlimmerAssistantModel,导致配置校验失败。
  • vocab 与滑动窗口默认值缺失:vLLM 将 drafter 映射到 Qwen3Config,而 Muse JSON 中未提供 vocab_sizeuse_sliding_window。默认 vocab_size=151936 与模型实际的 202048 不符,使 151936 之上的 token(含 EOS 200001)无法被推测;sliding_window=None 也会在构造层时崩溃。
  • 权重张量重命名未映射:注释称 drafter 权重与 DFlashDraftModel 完全一致,但实际上 encoder.fcencoder.output_norm_enc 两个张量被重命名为 fchidden_norm,加载器缺少映射,权重加载失败。
  • 缺少 .model 包装层:Muse 的 get_language_model() 直接返回 decoder,而非带 .model 属性的包装对象,spec decode 路径中有两处假设包装结构。同样的问题在 eagle、dspark、gemma4 路径上同样存在。
  • 草稿 vocab 取值方式不当:原先通过 getattrvocab_size,改为从 vllm_config.model_config.get_vocab_size() 获取。
  • max-num-seqs 未设置:官方单卡命令未设 --max-num-seqs,默认 1024 乘以每序列 14 个 draft 槽位超过 8192 的分块预填预算,会出现 max_num_scheduled_tokens is set to -6144 的报错;建议设为 64。

性能实测与对比

在 BF16、TP=1、FlashAttention 2、温度采样(temp 1.0、top_p 0.95、top_k 64)的设置下,开发者测得:

  • 不启用推测解码:约 25 tok/s
  • 启用 DFlash 后峰值持续解码:约 57 tok/s,约 2.3 倍
  • 平均接受长度:每验证步约 2.5 个 token
  • 总体 draft 接受率:约 10%(952/9720)
  • 按位置接受率:位置 0 约 73%,位置 1 约 40%,位置 2 约 15%,位置 5 后接近 0

这意味着默认的 15 个 draft 槽位中,约 10 个对基础 prompt 几乎没有贡献。官方说明 num_speculative_tokens: 15 为「固定值,未调优」,可能存在优化空间。

需要指出的是,Meta 此前公布的 3.1 倍加速是在 llama.cpp 上使用 17GB K-quant 量化模型、并采用贪心解码得到的,测试条件不同,不宜直接对比。在 2.6 平均接受长度下,开发者估算的温度采样理论上限约为 65 tok/s,实测 57 tok/s 与之接近,差距主要来自温度采样下的接受率下降,而非实现开销。

临时方案与建议

由于 vLLM 镜像中的代码尚未正式发布,所有上述问题大概率会在官方后续更新中修复。在此之前,开发者给出了一份带 assert 校验的 Dockerfile,6 个补丁各对应一处特定修改,并附上启动命令(含 --max-num-seqs 64 --max-num-batched-tokens 16384)。

如果不愿意自行打补丁,也可以选择 llama.cpp 或 SGLang——根据社区反馈,两者均可直接在该模型上运行 DFlash 而无需上述修改。

信源