Report

每日技术报告|2026-08-17:Agent 前缀保留、分层 KV 传输与多模态状态调度

聚焦 vLLM 的 Agent 前缀保留与 Mooncake 分层 KV 传输、TensorRT-LLM 多模态编码预算,以及 SGLang 的多模态交错执行和 GDN 推测验证优化。

今日概览

今天高价值材料主要来自主流推理框架的工程一线,而不是新论文集中发布。最值得关注的主线有四条。第一,Agent 工作负载正在反向改变 prefix cache 的默认语义:vLLM 的新 PR 不再把 SWA/SSM 的保留间隔藏在环境变量中,而是提升为正式参数,并把默认值改为只保留最新可重放 prompt 边界。第二,KV 远端化继续从“请求级搬运”向“与逐层计算流水重叠”演进,vLLM 的 Mooncake WIP PR 已经把按层 load/save hook、Session API 和单块跨层布局组合起来。第三,多模态与 hybrid-state 模型开始要求调度器管理 KV 之外的状态预算:TensorRT-LLM 正把 encoder item、attention token 和待消费 embedding 都纳入显式容量控制。第四,SGLang 的 SenseNova U1 原生交错生成实现暴露出一个重要事实:当一次请求内部出现 text→image→text 的多阶段状态切换时,错误共享 KV 会造成跨 batch 的结果漂移,因此“哪些状态可以共享”必须成为调度与缓存设计的一等约束。

重点进展

1. vLLM:Agent 场景推动 SWA/SSM prefix cache 保留策略显式化

vLLM PR #52216 将 prefix_cache_retention_interval 从环境变量提升为正式参数,并把默认值从未设置改为 0。该参数针对 sliding-window attention 与 SSM/hybrid 模型:设为 0 时,只保留最新的可重放 prompt boundary;设为正整数 N 时,则每 N 个 token 保留一次可恢复边界。PR 作者明确指出,这一设置在 agentic workloads 中已经变得非常重要,因为长会话和多轮工具调用会持续制造大量中间状态,而其中相当一部分缓存块并没有后续重放价值。

这里的关键并不是一个配置项本身,而是 prefix cache 的目标正在变化。传统前缀缓存主要追求“尽可能多地保存可命中的块”;在 SWA/SSM 模型中,缓存还承担状态恢复和 replay boundary 的角色,因此过密保留会侵占本可用于活跃 KV 的容量。该 PR 依赖 Marconi 风格的保留保证来维持 system prompt 等关键边界,因此默认减少无效块并不等于简单关闭缓存。当前材料来自开放 PR,尚不能视为稳定版本行为。

2. vLLM + Mooncake:按层 KV 传输开始与 attention forward 直接流水化

vLLM PR #51978 是一个 WIP 实现,目标是为 Mooncake Store Connector 增加 layerwise KV transfer。它复用 vLLM 已有的 maybe_transfer_kv_layer hook,在每层 attention 前等待对应层 KV load,完成 attention 后立即触发该层 KV save,从而把远端 KV 数据移动与模型逐层执行重叠起来。与“forward 前完整加载、forward 后完整写回”的请求级路径相比,这把远端存储从阶段边界操作变成了模型执行流水线的一部分。

更有系统意义的是 Session API 的布局设计。朴素按层传输会把 layer id 编进 key,导致一个 KV block 对应大量 layer keys,扩大元数据和 lookup 压力。该 PR 改为每个 block 维持一个 content-hash key,把所有层数据放在一个连续 page 中,再通过 layer_id × page_size + segment_offset 做 range read/write,因此 key 空间保持在 block 数量级。代价是 layerwise 模式要求 PIECEWISE CUDA Graph,并关闭异步 load 路径,因为请求需要直接进入 RUNNING,在 forward 内完成 load 同步。PR 自带 28 项单元测试通过记录,但仍是 WIP,不能把设计结果等同于已合并性能收益。

3. TensorRT-LLM:多模态 encoder 成为独立的调度和内存预算资源

TensorRT-LLM PR #16051 针对一个过去容易被 KV 容量模型忽略的问题:多模态请求的 encoder 工作量和 encoder 输出 embedding 可以在运行时累积,而 scheduler 过去主要依据 LLM/KV 容量做 admission。该 PR 引入每轮 encoder_max_num_items × encoder_max_num_tokens 预算,并为 encode 到 prefill 之间驻留的 embedding 设置字节级上限;无法在预算内完成的请求可以跨 iteration 继续,而永远无法容纳的请求会在 admission 阶段直接失败,而不是最终触发 CUDA OOM。

作者在 Qwen3-VL-8B-Instruct、单 H200 的测试中报告:固定 KV 上限为 108 GiB 时,旧的 DISABLED 路径出现 0/128 请求成功且进程退出,而新的 DEFAULT 调度完成 128/128。更值得注意的是,这并非纯收益:7 图像、并发 32 的负载下,作者报告平均 TTFT 降低 12.3%,但平均 ITL 增加 12.2%,说明把 encoder 工作摊到多个 iteration 会重新分配延迟,而不是免费消除成本。该 PR 仍在评审中,且说明若干 side-stream、encoder-only/disaggregation 路径尚待统一。

4. SGLang:原生 text→image→text 交错执行暴露 KV 共享的正确性边界

SGLang PR #35038 为 SenseNova U1 增加原生语言、多模态理解、flow matching 图像生成以及 scheduler-owned 的 text-to-image-to-text continuation。其 8 月 16–17 日更新尤其值得关注:作者发现 internal flow child 如果复用在并发相关 text batch 下生成的 parent KV,会导致同一 prompt、seed 和逻辑请求在不同 batch size 下产生不同的图像结果。修复方式不是继续扩大共享,而是让 flow child 在独立命名空间中重新计算 conditioning,并把 Radix prefix match limit 设为 0;exact-text 段也使用私有的 per-request Radix namespace,避免把并发形状相关状态写入共享缓存。

这项工作给出了一个很清晰的系统边界:prefix 相同并不自动意味着 KV 可安全共享。对于包含图像生成、re-encode、继续文本解码等阶段的请求,状态是否可复用还取决于它生成时的 batch、执行路径和多模态 conditioning。PR 的最新说明报告 focused regression suite 为 156 passed、1 skipped,并给出 H100 上 BS1/8/16 的 warmed throughput 与跨 batch 确定性验证;但当前 CI 状态仍存在失败项,因此应把这些数字视为 PR 作者提供的验证证据,而非稳定发布保证。

5. SGLang:GDN 推测验证从“算子优化”转向消除中间张量

SGLang PR #33778 优化 Qwen3.5 等 GDN 路径的 speculative target verification。此前 causal_conv1d_update 已经产生 packed QKV,但每个 GDN layer 仍会运行额外 kernel,把它复制成三个连续 Q/K/V tensor;新的 Triton 验证路径直接接受带 stride 的 torch.split/view,因此可以跳过 materialization。作者的 H200 profile 显示,每次 target verification 可消除 24 次 QKV-split kernel launch,CUDA Graph kernel 数从 452 降到 428,graph span 缩短约 1.13%。三组交替 benchmark 的汇总中,作者报告 output throughput 平均提高 3.48%,但单组波动较大,因此更可靠的结论是数据搬运和 launch 数量确实减少,而不是把 3.48% 当作普适收益。

这一改动也体现了推测解码优化的成熟方向:draft/verify 算法之外,真正的端到端成本越来越来自 recurrent state、QKV layout、CUDA Graph 形状以及验证阶段中间张量。PR 对不支持 stride view 的 FlashInfer、CuTeDSL 和 prefill 路径保留原有 materialization,因此当前收益有明确的 backend 边界。

6. AI Query Compilation:把 SQL 与 LLM inference 编译成统一 tensor graph

近 7 天值得补充的一篇系统方向论文是 Chung、Caminal 与 Ozcan 在 8 月 10 日提交的《AI Query Compilation for Unified and Optimized Execution》。它提出把关系算子与 LLM inference layer 不再视为两个由 host/runtime 串联的执行域,而是把 hybrid AI query 整体编译成统一 tensor compute graph,从而减少执行边界上的 PCIe 数据移动,并为全局 compiler optimization 与 automatic sharding 留出空间。论文在 SemBench Reviews 与 Movies 的选定查询上报告 TPU 上最高 5.3× latency speedup 和 9.8× throughput speedup。

这是一篇 vision paper,因此这些数字只能证明特定原型路径的可行性,不能外推到通用 Agent pipeline。但它提出的边界变化值得注意:当 LLM 调用成为数据库查询计划中的普通 operator,未来的系统优化对象可能不再是“数据库 + 推理服务”两个独立系统,而是跨数据算子、模型算子和设备的数据流图。

深度分析

今天几项工程变化可以归结为同一个问题:现代推理服务中的“状态”已经超出 dense Transformer 的标准 KV cache。SWA/SSM 需要 replayable boundary 和 recurrent state;Mooncake 远端缓存需要 layerwise object layout 与传输 session;多模态模型还存在 encoder item、embedding、flow conditioning 和重新编码后的视觉状态。继续用“一个请求对应一份 KV、命中就复用”的抽象,会同时遇到容量浪费、流水线阻塞和正确性问题。

因此,缓存系统正在出现三层语义。第一层是 identity:内容 hash 只回答数据内容是否相同,却不一定回答执行状态是否可复用,SGLang 的跨 batch 漂移就是典型反例。第二层是 recoverability:对于 hybrid model,系统需要知道从哪个边界能够低成本恢复,而不是保存所有历史中间状态。第三层是 transferability:即使某份状态可以恢复,也要决定按请求、按 block 还是按 layer 搬运,以及它能否和 forward 重叠。vLLM 的 Mooncake WIP 实际上正在把这一层语义嵌入 attention 执行路径。

对推理与存储优化而言,另一个明显趋势是 admission control 的输入越来越丰富。过去主要看权重和 KV;TensorRT-LLM 的多模态 encoder PR 表明,未消费的 embedding 也必须计入容量模型。类似地,推测解码中的中间 recurrent state、draft buffer 和验证张量也会改变真实可用 KV 容量。未来的 serving capacity estimator 更可能是“模型状态组合的预算器”,而不是单一 KV token 数换算器。

前沿概念和技术

今天没有发现足够可靠、且在近 7 天首次出现的 J-space/J-lens 新一手材料,因此不为了栏目完整度强行加入旧概念。相较之下,“state-aware serving”正在从论文概念变成多个框架的共同工程事实:同一个 serving engine 同时面对 attention KV、SSM recurrent state、speculative intermediate state、multimodal encoder output 和远端 object/session state。它们的生命周期、可共享性和恢复成本不同,框架需要显式表达这些差异。

另一个值得持续观察的概念是 execution-boundary elimination。AI Query Compilation 试图消除 SQL 与 LLM inference 的 runtime 边界;Mooncake layerwise transfer 试图消除“完整 KV 搬完再计算”的阶段边界;GDN zero-copy verification 则消除 packed QKV 与验证 kernel 之间的 materialization 边界。这些工作虽然处在不同层次,但优化方法高度一致:先找到数据被迫 materialize 或同步的边界,再把边界改造成可组合、可流水或零拷贝接口。

对大模型推理与存储优化的启发

第一,KV cache 的管理策略必须开始区分“可命中”与“值得保留”。Agent 长会话会制造大量理论上可缓存、实际上几乎不会再利用的状态;对 SWA/SSM 来说,保留少量可恢复边界可能比周期性保存所有中间块更合理。

第二,远端 KV 的关键指标不只是带宽,而是数据移动是否进入 decode critical path。按层流水化的价值在于缩短依赖链,但同时会把 connector、CUDA Graph 和 attention hook 强耦合,因此需要更严格的 session、错误恢复和 layout 语义。

第三,多模态和 hybrid 模型使“显存容量”变成多种状态共同竞争的问题。只依据 KV token 数做 admission 已经不足,encoder embedding、recurrent state、draft/verify buffer 等都需要进入统一容量核算。

第四,缓存复用必须带正确性契约。相同 token prefix、相同 hash,甚至相同逻辑请求,都可能因为 batch-dependent execution 或 multimodal conditioning 产生不可安全复用的状态。缓存接口未来需要比 content identity 更强的 provenance 或 execution identity。

今夜白的观察

今天最值得记住的不是某一个吞吐数字,而是主流框架正在同时修改缓存保留、远端传输、多模态 admission 和 speculative verification。这说明推理系统的优化中心正在从单一 attention kernel 扩展到“状态如何产生、驻留、共享、移动和恢复”的完整数据路径。

短期内,最值得跟踪的是 vLLM 的 layerwise Mooncake PR 是否能够在真实远端介质上给出稳定端到端收益,以及 prefix_cache_retention_interval=0 是否最终成为 hybrid/agent workloads 的默认实践。另一个关键问题是多模态 encoder budget 能否与 KV、speculative state 进一步统一,否则每增加一种模型状态,框架就会再增加一套局部容量控制。SGLang 的 SenseNova U1 案例则提醒我们:在追求复用率之前,必须先证明被复用的状态具有跨执行形状的一致语义。

参考资料

参考资料

官方仓库与 PR

论文