AREXOpen in interactive Feed

AREX Feed Article

vLLM 官方致谢 zwljohnny、Tri Dao 与 NVIDIA:ReplaySSM 的 Mamba2 标准解码与 FlashInfer-backed MTP 已在 vLLM 中

October 13, 2026

北京时间 2026 年 10 月 13 日 12 时 35 分,vLLM 项目官方 X 账号 发帖,致谢 @zwljohnny、Tri Dao(@tri_dao)与 NVIDIA 在 ReplaySSM 上的工作,并称 Mamba2 标准解码(standard decode)与 FlashInfer-backed MTP 支持“已经在 vLLM 中”,方式是缓存 SSM 输入、仅在需要时更新 checkpoint(检查点),以降低循环状态(recurrent-state)的内存流量。帖文没有给出任何性能数字或基准结果。

这两项能力并不是当天才上线的。GitHub 记录显示,相关改动自 7 月下旬起分三个 PR 合入 vLLM 主干,其中两项已分别随 v0.27.0 与 v0.30.0 发布;这条帖文是对一套已经合入代码的正式点名致谢。

被致谢的是谁:一作博士生、Tri Dao 与 NVIDIA

@zwljohnny 的 X 资料页显示其名字为 Ze-Wei (Johnny) Liou,自述为普林斯顿大学二年级博士生、由 Tri Dao 指导、研究方向是 ML Systems()。NVIDIA 技术博客 10 月 12 日发布的《ReplaySSM: Rethinking State Storage for Faster Hybrid-Model Decoding》将 Ze-Wei Liou 列为第一作者,作者名单还包括 Harris Nover、Amey Naik、Andrii Skliar、Igor Shovkun、Ido Shahaf 与 Tri Dao()。vLLM 仓库中的 写得更直接:ReplaySSM 是 Dao AI Lab 与 NVIDIA 的合作项目。

跨框架实现更早:NVIDIA 的 TensorRT-LLM 仓库在 6 月 19 日合并了 ,为 mamba 模型的 MTP 引入 checkpointing 变体的 replay;RFC 称之为与 vLLM 侧并行的跨框架实现。

每步写回完整循环状态:SSM 解码的两个瓶颈

ReplaySSM 针对的是混合模型架构:多数层使用状态空间模型(SSM)层,只保留少量 attention 层。NVIDIA 博客列举,Nemotron 3、Qwen3.5 至 Qwen3.8、Kimi-K3、GLM-5.3-Flash 都是这种结构,SSM 层由 Mamba-2、Gated DeltaNet(GDN)或 Kimi Delta Attention(KDA)充当。SSM 把历史压缩进固定大小的状态,替代随上下文增长的 KV cache(键值缓存);但在服务批规模下,成为延迟瓶颈的可能是 SSM 层而不是 attention 层,上下文长度直到 100K token 都可能如此。

RFC 把 SSM 解码内核的问题说得很具体:SSM 解码是内存带宽受限的操作,每一步都要读取并写回完整的 (nheads, d, n) 循环状态,状态写在 HBM(高带宽显存)流量中占主导。投机解码(speculative decoding)还有第二个麻烦:状态更新不可逆,历史一旦被摘要进循环状态,单个 token 就无法再减回去。为了支持回滚被拒绝的草拟 token(draft token),vLLM 现有实现要为每个 draft token 单独保留一份循环状态,代价约为 (1 + num_spec) 倍的状态内存,num_spec 为草拟 token 数。

缓存输入而非状态:checkpoint 每 L 步才更新一次

ReplaySSM 的核心改动是把“存什么”换了:不再每步把状态写回 HBM,而是保留一份 checkpoint 状态 S0,并把最近的 SSM 输入追加进环形缓冲区(ring buffer)。每逢每 L 步一次的 flush(折算)步,把缓存输入折入 checkpoint;其余步骤直接用 checkpoint 加缓存输入计算输出,不物化完整状态。RFC 说明,被缓存的只有状态构建输入;用于读取输出的向量(Mamba2 的 C、GDN 的 q)取自当前激活,不进缓存。

按 RFC 的归纳,同一项改动带来三个直接后果:标准解码下,每步的完整状态写被替换成一次很小的输入追加,主导性内存流量约减半;投机解码的回滚从 O(T) 的状态操作(T 为 draft 窗口长度加 1)变成移动一次缓冲区指针,且不再需要每 draft token 一份状态;非 flush 步的输出可以直接从缓存读出,整个 draft 窗口能一次性并行验证。

精度也顺带受益。因为重建用 FP32、状态只在 flush 时写回,低精度 checkpoint 的重新量化频率约降低 L 倍;NVIDIA 博客给出的方案是用高精度 checkpoint 做递推、低精度副本做读取,四个受评模型中有三个在 GPQA-Diamond 上与 FP32 精度的差距保持在约 2 个百分点以内。在 vLLM 侧,稳定版 API 文档的 CacheConfig 已经列出 use_replayssm、replayssm_buffer_len 等配置字段()。

从 RFC 到三个 PR:功能如何进入 vLLM 主干

落线路径在 GitHub 上有完整痕迹。7 月 3 日,Johnny-Liou 提交 RFC #47572,提议为混合 SSM 模型增加可选的 ReplaySSM 解码路径,覆盖 Mamba2 与 GDN 两类 SSM 层、标准与投机两种解码模式,配置旗标全部默认关闭,关闭时解码路径与基线逐字节一致;RFC 还提出分三阶段推进:Mamba2 标准解码、GDN 标准解码、Mamba2/GDN 投机解码。RFC 附带的 draft PR 后来未合并即关闭,实际代码按拆分后的 PR 落地。

第一阶段在 7 月 24 日完成:Johnny-Liou 的 合入,为 Mamba2 标准解码换上缓存 SSM 输入的内核路径,随 8 月 10 日发布的 分发。9 月 1 日,Andrii Skliar 的 加入 FlashInfer ReplaySSM 后端,进入 9 月 22 日发布的 内核清单。9 月 30 日, 加上 FlashInfer ReplaySSM 对 MTP 的支持,也就是帖文所说的 FlashInfer-backed MTP。按 vLLM 文档的定义,MTP(Multi-Token Prediction,多 token 预测)是目标模型自带多 token 预测能力的投机解码方法,不需要另配一个草稿模型()。

合入之后还有维护动作:10 月 8 日, 修正 FlashInfer ReplaySSM 一致性测试的输入构造;10 月 11 日, 修复 MRV2 上 FlashInfer attention 与 ReplaySSM 的 warmup(预热)。

数字出自作者一方:B300 上内核最高 1.80 倍

可核验的评测数据都来自 ReplaySSM 作者一方。NVIDIA 博客写道:在 Blackwell Ultra B300 上、batch size 256 时 SSM 解码内核提速 1.46~1.80 倍,120B 级模型的投机吞吐提升 1.85~2.10 倍。

给出 vLLM 端到端口径的数字:标准解码最高提速 1.48 倍,大 MoE(混合专家)模型上为 1.43 倍;投机解码提速 1.87~1.96 倍,而 vLLM 原有投机解码在服务批规模下低于标准解码水平,文章配图中的三个基线读数只有 1.05 倍、0.89 倍、0.90 倍。RFC 的整模型每步加速表(FP32 状态、缓冲区长度 16)显示:Nemotron-Nano-4B(Mamba2,H100)在 batch 512 时为 1.55 倍,Nemotron-Super-120B(Mamba2,B300)为 1.67 倍。

RFC 仍开着:低精度与张量并行评估还在清单上

RFC #47572 的当前文本仍把两件事列为进行中:张量并行(TP)测试与评估,以及 fp16/fp8 低精度状态的评测——现有评测集中在多数混合模型默认的 FP32 状态上。未决问题里还有一个工程取舍:ReplaySSM 的缓存张量是挂在 vLLM 现有的分页 mamba 状态上,还是单独分配。这份 RFC 至今仍是 open 状态。

参考链接