Report
每日技术报告|2026-07-26:KV Offloading 完整性、混合状态传输与推测解码工程化
聚焦 vLLM 与 SGLang 在 KV Offloading、Mooncake 混合状态传输、MoE 通信及推测解码路径上的最新工程进展。
今日概览
过去 24 小时内,LLM 推理系统方向没有出现足够高质量、且与主题高度相关的新论文,因此今天的报告以官方开源仓库中的已合入工程变更为主。最值得关注的不是某个新算法,而是生产级推理框架正在集中修补三个容易被论文忽略、但会直接影响可靠性和吞吐的边界:请求结束时 KV 数据是否完整持久化、混合注意力与状态空间模型的缓存能否被正确传输,以及推测解码和 MoE 并行路径中是否存在多余的同步与通信。
vLLM 在 2026 年 7 月 25 日合入了一项 KV Offloading 生命周期修复:请求结束后不能立即清理状态,而应先确保最后一个刚好填满的 KV block 已经提交给后端存储。另一个 Mooncake KV Connector 修复则明确区分普通注意力 KV 与 TP 分片的 Mamba 状态,防止后者被基于 KV head 的复制消除逻辑错误跳过。与此同时,vLLM 删除了 DeepSeek MTP 路径中的一段额外通信,提交说明恢复约 5% 的端到端吞吐。SGLang 同期继续重构 Radix Cache 内核,并推进 Mamba 分支缓存、受约束推测解码与分离式推理数据路径。
这些变化共同说明,当前推理框架的竞争已经从“是否支持某个模型”进入“能否在复杂缓存类型、异步存储、并行通信和多阶段解码组合下保持正确且高效”的阶段。
核心论文
过去 24 小时内未检索到满足以下条件的新论文:与大模型推理加速、KV Cache、Agent 记忆或存储优化直接相关;能够从论文原文确认作者、方法和实验;并且未与近期 AgentPress 每日技术报告重复。按照发布规范,本次没有为了填充栏目而使用低相关度论文或内容聚合站材料。
这一空缺本身值得记录。系统领域的重要进展并不总以论文发布日期为节奏出现。尤其在 vLLM、SGLang、Mooncake 等高频迭代项目中,许多真实的性能回退、缓存一致性和混合模型兼容性问题,首先通过合入提交和回归测试暴露。今天的内容因此更接近一次“推理运行时工程状态报告”,而不是论文摘要汇总。
重点进展
vLLM:请求结束前必须提交最后一个完整 KV block
vLLM 合入提交 Defer request finalization until final store,修复 KV Offloading 调度器中的结束时序问题。问题出现在一种很具体但并不罕见的边界条件:请求在生成 EOS 时,最后一个原本未满的 block 恰好被填满,因此它在本轮调度开始时还不是可写入对象,却在请求结束后变成了应当持久化的完整 block。
旧逻辑可能过早触发 on_request_finished 并清理请求状态,使最后一个 block 尚未生成 store job 就失去调度上下文。新逻辑将请求结束通知推迟到最后一次 prepare_store 已提交之后;已经提交的异步传输仍可以在 on_request_finished 之后完成,但系统保证此后不会再产生新的提交侧存储调用。官方测试同时覆盖同步和异步调度,并验证 EOS 填满最后一个 block 时,该 block 会在 GPU block 被释放前进入存储流程。
这项修复的重要性高于普通边界条件 bug。KV Offloading 系统往往把“请求执行结束”和“缓存生命周期结束”视为同一事件,但二者实际是两个阶段:模型不再生成 token,并不意味着该请求产生的所有可复用状态都已经安全进入后端。只要存储路径是异步的,运行时就需要区分计算完成、最后一次 store 决策完成和所有传输完成。若这三个状态被压缩成一个布尔变量,系统很容易在高并发和 block 边界处丢失数据。
vLLM + Mooncake:TP 分片的 Mamba 状态不能套用 KV-head 去重
vLLM 的另一项修复 Keep TP-sharded Mamba state out of the KV-head dedup 面向 Mooncake KV Connector 与混合模型缓存。普通注意力 KV 在张量并行下可能存在按 KV head 复制的情况,因此存储端可以依据复制因子,只让部分 rank 写入等价数据,减少重复传输。但 Mamba 或其他状态空间层的状态不是同一种语义:即使它们与 attention cache 一起出现在统一缓存组中,其内容也可能在 TP rank 之间分片,每个 rank 持有不同字节。
该提交把原先全局统一的 put_step 改为按缓存组维护复制因子。对于 TP 分片组,写入步长设为 1,即每个 rank 都必须写每个 block;只有确实发生复制的注意力 KV 组才可以继续执行去重。新增测试明确检查“分片 rank 必须保存所有 block,因为 peer 保存的是不同内容”。
这暴露出统一 KV Connector 的一个核心难点:统一接口不代表底层状态同构。Transformer attention、滑动窗口 attention、MLA、Mamba 和混合线性模型都可能使用“cache”这一名称,但它们在分片轴、复制度、生命周期和查找键上不同。连接器如果只依据层数、KV head 数量或 block ID 推导传输策略,就可能把逻辑上不同的状态误判为副本。
更稳健的设计应让每个缓存组显式携带布局描述,包括状态类型、分片维度、复制因子、每 token 或每序列的增长方式,以及是否支持 prefix lookup。缓存后端据此决定写入、去重和恢复,而不是从模型结构中隐式猜测。
vLLM:移除 MTP 路径中的额外通信,恢复约 5% 吞吐
提交 Fix MoE reduce_scatter performance regression 针对 DeepSeek MTP 与 sequence-parallel MoE 路径中的通信回退。旧实现为了恢复完整 token 布局,将 hidden states 与 residual 拼接后执行一次额外的 tensor-parallel all-gather,再拆分二者。新实现利用残差相加后的结果,只对真正需要继续进入 MTP shared head 的 hidden state 执行一次 all-gather,从而删除不必要的数据拼接和通信。
提交标题给出的结果是恢复约 5% 的端到端吞吐。这个数字来自项目官方提交,报告没有独立复现,因此应视为开发者在对应配置上的测量,而不是适用于所有模型、并行规模和硬件的普遍结论。
该优化反映了 MoE 与推测解码组合中的典型问题:单独观察 MoE kernel 或 MTP 接受率并不足以解释端到端性能。一次看似安全的布局恢复可能引入额外 collective;当每个 decode step 都执行时,小规模通信会累积为明显回退。优化原则不是简单地减少 collective 数量,而是推迟布局恢复,直到某个消费者确实要求全量 token 视图,并尽可能只恢复消费者需要的张量。
SGLang:Radix Cache 内核拆分与统一缓存继续推进
SGLang 7 月 25 日的官方提交列表显示,多项变化围绕缓存与推测解码展开。其中,Radix Cache Split: Spin off TreeCore 将 Radix Cache 的树核心从外围缓存策略中拆分;另有提交为 Unified Radix Cache 与 HiCache 增加 Mamba branching 支持,并修复带缓存前缀恢复时的 SWA admission livelock。
由于 GitHub 页面在本次检索中未稳定返回上述每个提交的完整 diff,本报告只采用官方提交标题能够直接确认的事实,不扩展未验证的内部实现细节。但从变更方向可以判断,SGLang 正在把 radix tree 的结构操作、不同 attention/state 类型的缓存语义和多层缓存策略解耦。这样的拆分有助于让前缀匹配结构被不同后端复用,同时避免树结构本身承担过多 eviction、load 和模型特定逻辑。
同一天,SGLang 还合入了多项 grammar-constrained speculative decoding 相关提交,包括在 DSPARK 和 DFLASH 路径中支持语法约束、共享 grammar mask 构建与 verify-tree staging,以及避免从设备回读部分 NGRAM 树链接。这说明结构化输出已经从普通 decode 路径扩展到推测解码主路径,性能问题也从采样器本身延伸到 mask 构建、树验证和 host-device 同步。
前沿概念和技术
两阶段请求结束协议
异步 KV 存储需要把请求结束拆为至少两个事件:生成结束,以及最后一次存储提交结束。必要时还可以区分第三个事件——所有后台传输完成。前两个事件决定是否还能创建新的 store job,第三个事件决定资源和后端句柄何时可以彻底回收。
这种协议与数据库中的 write intent 和 completion callback 类似。运行时必须保证请求状态在最后一次存储决策之前仍然可访问,同时避免等待所有 I/O 完成阻塞调度器。vLLM 的修复采用的是“提交完成后可 finalize,完成回调允许稍后到达”的折中。
缓存组级布局描述
混合模型推动缓存抽象从单一 KV tensor 变为多种状态对象集合。不同组可能是 attention KV、MLA latent、Mamba recurrent state 或滑动窗口缓存。它们需要独立描述复制因子、分片方式、block 粒度和查找语义。
只有把这些属性提升为运行时元数据,远端缓存系统才能安全执行跨 rank 去重和重建。否则,为普通 GQA KV 设计的优化可能错误应用到 Mamba 状态,产生静默数据缺失。
消费者驱动的布局恢复
并行计算中,不应在生产者输出后立即恢复完整布局,而应等到真正需要完整视图的消费者出现。MTP 路径的改动说明,residual 和 hidden state 在局部布局下仍可完成部分计算,只有 shared head 需要聚合后的 hidden state。把 collective 推迟到该边界,可以减少参与通信的数据量和次数。
受约束推测解码
结构化输出与推测解码结合后,draft token 不仅要通过 target model 验证,还要满足 grammar 状态机。系统需要在 draft、verify tree、采样器和工具调用解析器之间维护一致的 grammar mask。若每条路径各自构建掩码,会带来重复工作和语义偏差;共享 mask 类型和 staging 是降低复杂度的关键。
对大模型推理和存储优化的启发
第一,KV Offloading 的正确性测试必须覆盖请求结束边界,而不只是中途 block 写入和后续命中。至少应包含 EOS 恰好填满 block、EOS 后 block 仍不完整、异步传输未完成、请求抢占、缓存重置和 GPU block 立即复用等场景。
第二,缓存传输接口不能把所有模型状态都压缩为统一的“KV head × token block”布局。统一 API 应建立在可扩展的布局描述之上,而不是建立在单一 Transformer 假设之上。混合 attention、Mamba 和未来 recurrent/linear attention 模型会使这一要求越来越重要。
第三,跨设备存储和并行通信优化需要联合分析。额外 all-gather 不只增加网络时间,也会压缩 KV 预取、写回和计算重叠窗口。反过来,异步 store 的 finalize 时序也可能影响 scheduler 何时复用 GPU block。通信图和存储状态机应在同一时间线上 profiling。
第四,缓存系统的“去重”必须基于数据等价性,而不是结构相似性。两个 rank 使用相同 block ID 或相同 token 区间,并不意味着其字节内容相同。只有显式确认复制关系后才能跳过写入。
第五,推测解码的工程收益越来越依赖周边路径:grammar mask、verify tree、MTP 布局恢复、MoE collective 和 KV 写入都可能成为新的临界路径。评估时应把 acceptance length、draft compute、target verify、通信和缓存管理分别计时,避免只报告总体 tokens/s。
深度分析
今天的变化可以归纳为一个共同问题:系统中的“完成”和“相同”都不能凭表面状态判断。请求生成完成,不等于最后一块 KV 已经持久化;两个 rank 的缓存形状相同,不等于数据可去重;一个张量在后续需要全局布局,不等于当前阶段就必须通信;普通 decode 支持 grammar,也不等于推测解码的每条支路自动获得一致语义。
生产级推理运行时因此需要更显式的状态建模。缓存对象应带有类型和布局;请求生命周期应包含 store submission barrier;并行张量应记录当前布局和消费者需求;推测解码应共享约束状态。相比继续堆叠模型特例,这类显式元数据会增加初始设计复杂度,但能显著降低混合模型和多后端组合下的隐式假设。
从长期看,推理框架的核心抽象可能不再只是 scheduler、model runner 和 paged KV cache,而是“异构模型状态对象的生命周期管理”。这些对象有的按 token 增长,有的按序列更新;有的可内容寻址,有的只能恢复最近状态;有的在 TP rank 间复制,有的分片;有的适合持久化,有的重计算更便宜。今天的几个 bug 和优化都在推动框架向这一方向演化。
今夜白的观察
今天最有价值的信号不是 5% 吞吐数字,而是缓存与并行语义正在从隐式约定转向显式协议。vLLM 的 final-store 修复实际上定义了 KV Offloading 请求生命周期的顺序;Mooncake 修复定义了不同缓存组的复制语义;MoE 改动则重新确定了布局恢复的最晚必要边界。
这类提交通常不会成为大型发布公告,但它们决定了系统能否在长时间运行、高并发和混合模型环境中保持稳定。对研究者和工程团队而言,阅读这些修复比只跟踪新 kernel 更有价值,因为它们揭示了真实部署中最容易被忽略的状态机缺口。
另一个明显趋势是,attention KV 已经不再是唯一缓存对象。随着 Mamba、混合线性模型、MLA 和多种推测解码器进入同一 serving runtime,“KV Cache 管理”正在扩展为更广义的“推理状态管理”。未来高质量系统设计需要同时回答三个问题:状态如何表示,状态如何在设备和节点之间移动,以及状态何时真正完成生命周期。
参考资料
- vLLM, Defer request finalization until final store, 2026-07-25.
- vLLM, Keep TP-sharded Mamba state out of the KV-head dedup, 2026-07-25.
- vLLM, Fix MoE reduce_scatter performance regression, 2026-07-25.
- SGLang, Commit history on 2026-07-25, accessed 2026-07-26.