今天是个清淡日,但有一条结构性意义的进展:MTP 投机解码第一次跨进了视觉语言模型(vLLM #53121,NVIDIA Nemotron VL)。此前投机解码基本停留在纯文本域,多模态场景吃不到这份加速——难点不在草稿头本身,而在视觉与文本的边界上。SGLang 侧近 24 小时无新提交,稳定线仍是 v0.5.18。
★ 今日最值得关注
vLLM #53121:Add MTP support for Nemotron VL models(NVIDIA)——MTP 投机解码首次扩展至视觉语言模型。
先回顾 MTP 在纯文本里是怎么工作的:主模型之外挂一个轻量草稿头,单次前向预测未来 N 个 token,然后一次验证——把 decode 的有效产出从 1 提到 N。它的成立前提是:下一个 token 的分布与再往后几个 token 的分布高度相关,一个足够小的头就能猜个八九不离十。
到了 VLM,这个前提在视觉-文本边界上会断掉。 具体有三个坑:
- 图像占位符不进文本 next-N 草稿。 输入序列里那成百上千个图像 token,对文本解码来说是一段「不可预测的外部注入」——让草稿头去猜它们没有任何意义,但草稿头必须知道它们的存在,否则位置编码与 KV 偏移全错。
- 文本侧草稿在图像注入后必须重启。 一张图插在 prompt 中间时,图像之后的文本 token 的条件分布与图像之前完全不同。草稿链不能跨过这个边界继续延伸,必须在注入点断开重启。
- 验证阶段要按边界切段。 主模型验证的是「图像 token 之后」的真实分布,而草稿链若跨过了注入点,给出的就是「假设没有图像」的延续——两者的接受率判定不能混在一起算。
最危险的是这类缺陷不会报错。 按日报的说法,边界处理不当时会静默退化成 1 token/步——不崩溃、不告警,你以为开了投机解码、监控上看着也正常,实际上一点加速都没有,还白白多付了草稿头的显存和算力。这是典型的「实现了但没生效」型缺陷,比崩溃难发现得多,判断方法只有一个:直接量 mean_acceptance_length,而不是看进程有没有起来。
为什么这条值得关注:2026 年投机解码的主线正在从纯文本向多模态扩散。08-23 vLLM 刚给 Qwen3-Omni 上了 DSpark 投机解码(#52560),今天又给 Nemotron VL 上了 MTP(#53121)——两条技术路线在同一周内先后跨进多模态,这不是巧合,而是多模态推理吞吐压力已经到了必须动用投机解码的地步。
另一个值得记的点是路线同源:NVIDIA 的 Nemotron VL 走 MTP,与 Step 的多模态 + MTP 是同一条路子。MTP 因为草稿头是模型自带的(训练时就一起训了),在多模态上天然比外挂式草稿头更有优势——它「知道」图像边界在哪。
一、关于本期论文侧日报
本期没有 AI 论文 / 产业侧日报。 本系列的日报归档中不存在 2026-08-24 的论文摘要文件,因此本篇不设「AI 产业与论文热点」章节——不编造、不用相邻日期的内容顶替。这一篇只覆盖 vLLM / SGLang 工程侧。
二、vLLM & SGLang 社区跟踪
近 24 小时两家均无新版本 tag:vLLM 稳定线 v0.27.1(v0.28.0 仍在 rc2),SGLang 稳定线 v0.5.18(08-22)。
vLLM
- #53121(新特性 / 模型):MTP 支持 Nemotron VL 模型(见上文 ★)。
- #53460(Bug 修复 / 多模态):Fix KV cache layout and optimize Dots3 NOTE Omni encoders——修正多模态编码器的 KV 布局并做优化。
影响:多模态 KV 的正确性与显存利用同时改善。KV 布局这类问题的危险之处在于它往往在长序列或多图输入时才暴露,短输入的冒烟测试发现不了。
- #53372:多模态编码器 / 提示路径重构(与 #53460 同属本期的多模态稳健性工作)。
- #52209(MoE):Add routed expert loading for gpt-oss——稀疏 MoE 的路由专家分块加载。
影响:gpt-oss 这类模型的部署更顺。路由专家按需加载对显存吃紧 + 专家数多的场景意义更大。
- #51896 + #51034(稳健性):完整下载前拒绝超大媒体;空闲流式 SSE keep-alive。
这两条是给公网多模态服务兜底的。 前者防的是「客户端声称要传一个巨大文件、服务端傻傻先把整个 body 收完」这类资源耗尽型攻击;后者解决长流在空闲期被中间代理(Nginx / 负载均衡)掐断的老问题。做对外多模态 API 的,这两条比任何性能数字都实在。
SGLang
近 24 小时无新提交,无实质增量,处于 v0.5.18 发布后的静默期。状态维持项:
- #32017 重叠检查点载入(启动 2.38×,Qwen3-32B 84.8s → 35.6s)
- #32313 TP LMHead 改 All-to-All(DS-V4-Pro B200 320µs → 169µs)
- #28836 torch 2.13.0 落地
- #32434 统一内核缓存到
SGLANG_CACHE_DIR
静默日本身也是信息:一个 710 PR 的版本刚发布,次日无提交是正常的收敛节奏,不必过度解读。
常驻专题进展
PD 分离。 本期无新增。维持上一期的判断:vLLM 侧重 KV 卸载与并行解耦,SGLang v0.5.18 已专设 Disaggregation + PD 条目,双方均进入「能运维」阶段。
架构演进。 主轴清晰:MTP 投机解码跨入多模态(#53121) + 多模态编码器 / 提示路径重构(#53460 / #53372) + 阶跃官方 MTP 文档化。三点指向同一个结论——2026 年投机解码正在从纯文本向多模态扩散。
PyTorch vs transformers。 本期无「脱离 transformers 自研」的 PR。vLLM 继续双后端(原生 MRv2 + transformers v5)分层收敛,SGLang 数据面自研保持稳定。结论不变:模型定义向 transformers 求广度、数据面自研求确定性,分层而非二选一。
Step 适配(本期出现一个重要的口径澄清)。 阶跃官方在 HF / ModelScope 的部署指南补全了 MTP 说明:
| 路径 | MTP 配置 |
|---|---|
vLLM(阶跃官方 stepfun37 预建镜像) | num_speculative_tokens: 3 |
SGLang(dev-step-3.7-flash + EAGLE) | 多层 MTP |
这修正了上一期(08-23)那个偏悲观的读数。上一期依据 ModelScope 文档「Full MTP3 not yet available in vLLM」得出的结论是「vLLM 上只能给 1」——那个约束针对的是上游原生 vLLM,而阶跃的预建镜像已经自带补丁,可以吃到 num_speculative_tokens: 3 的加速。
选型结论需要按这个新信息修正:想在 Step 上吃 MTP 收益,有两条路——用阶跃官方预建镜像(省事,但绑死在他们的镜像上、升级节奏不由你控制),或者走 SGLang 的
dev-step-3.7-flash(上游原生,但要自己跟 dev 分支)。不建议的路径是:拿上游原生 vLLM 直接跑 Step,然后疑惑为什么投机解码没效果。
上游 PR 仍然全 open(vLLM #49642 / #49490,SGLang #35206 / #32325)。与 DSv4、GLM-5.2 的一等适配相比,Step 的合入节奏确实偏慢——这是投入问题,不是技术问题:阶跃有产出(MTP 文档、预建镜像、TensorCast 这样的学术合作),但就是不往上游推。
三、一句话结论
今天最值得记的不是某个数字,而是投机解码的边界从纯文本跨到了多模态——vLLM #53121 给 Nemotron VL 装上 MTP,紧接 08-23 的 Qwen3-Omni DSpark,两条路线在一周内先后越过视觉-文本边界,而真正的难点不是草稿头本身,是「图像注入点之后草稿链必须重启」这个边界条件——它一旦实现错就静默退化成 1 token/步,不崩不报、只是白花钱;另外,如果你在 Step 上用上游原生 vLLM 跑投机解码却没效果,去看一眼阶跃的预建镜像或换 SGLang 的 dev-step-3.7-flash,num_speculative_tokens: 3 是可以拿到的。
信息来源:vLLM commits/main;vLLM PR #53121 / #53460 / #52209 / #51896 / #51034 / #53372 / #49642 / #49490;SGLang releases(v0.5.18,2026-08-22);SGLang PR #32017 / #32313 / #28836 / #32434 / #35206 / #32325;Step-3.7-Flash 部署指南(Hugging Face 模型卡)。
💬 留言
NaphJohn/LLM-blog尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。