投机解码(speculative decoding)已经成了推理加速的标配:轻量草稿模型先猜几个 token,目标模型一次前向批量验证,猜中的部分等于免费。但把战场从单轮问答换成长时间运行的智能体,这套机制开始失灵。arXiv 2026 年 10 月 16 日提交的论文《DLite: History-free Speculative Decoding for Agentic AI》(2610.23787)用一个尖锐的诊断和一套干净的设计,解释了失灵的原因并给出了解法。
问题:智能体负载下的双重退化
论文的观察起点是一个数字:在智能体工作负载上,现有草稿模型的接受长度(acceptance length)退化超过 80%——常规 benchmark 上还能有 6 个左右的接受长度,到了长上下文 agent 场景只剩 1 到 2 个。接受长度跌到 2 以下,草稿几乎白猜,加速比名存实亡。
与此同时,草稿模型自己的历史 KV cache 还在持续吞噬系统资源。论文基于 SGLang 评估 DeepSeek-V4 的 MTP 模块发现,这部分维护开销占端到端推理延迟的 10% 到 20%,且在多轮交互与 prefix caching 并存的场景下代价递增。
两个问题同根同源:草稿模型在重复重建目标模型早已处理过的历史信息。随着会话越滚越长,草稿面对的显式上下文越来越庞大,预测问题本身在持续变难。
设计:把「变长的历史」换成「本地的现在」
DLite 的核心思想可以直接用一句话概括——草稿器不记历史,只读目标模型的现在。
无历史并行骨干(history-free parallel backbone):每一轮推测都从目标模型最新的隐状态(contextual hidden states)加当前锚点 token 出发,独立重建预测所需的上下文特征,完全不维护草稿侧的历史 KV cache。为了让网络分清输入来源与层级,论文引入可学习的深度嵌入;位置编码改用局部位置而非全局累积位置,把 growing-history modeling 问题转化成 local prediction 问题。一次前向传入目标模型隐状态、锚点 token 和 K 个草稿占位符,产出全部推测位置的表示。
轻量序列头(sequential head):并行骨干解决了块间,块内的因果依赖还需要恢复。DLite 用一个低秩 RNN 结构的序列头在隐空间逐步整合依赖,词汇表投影只在块内依赖全部整合之后做一次。这个顺序很关键:半自回归方法通常先把骨干表示投影成整张词表 logits 再修正,D×V 的投影在高并发下相当昂贵;DLite 把它推迟到最后,且只做一次。序列头秩从 256 提到 512,端到端延迟只增加 0.3%。
两阶段训练:异构架构直接对齐目标模型效果很差——两者的预测条件结构不同。论文先用 token 级交叉熵训练一个保留历史 KV cache 的同构 teacher,再用前向 KL 把 DLite 蒸馏到 teacher 上(warm-up 阶段,位置权重随距离指数衰减,衰减系数 4);随后移除 teacher,让 DLite 直接对齐目标模型的输出分布(stable 阶段,交叉熵与全变分散度按 0.1 比 1 加权)。消融显示两阶段全程优于单阶段直训。
关键配置:推测块长 K 等于 7,从目标模型抽取 12 到 14 个隐层(保留首尾、中间均匀采样)做序列级拼接,序列头秩 320 到 512,训练数据约 190 万样本,32 张 H800 完成。
实验:三类负载,逐项看数字
实验覆盖 Qwen3-4B 与 Qwen3-8B 两个目标模型,基线包括 EAGLE-3、DFlash、DFlash2、DSpark、DFlow,全部跑在 NVIDIA H800 上。
通用负载(Table 1,接受长度):Qwen3-8B 上 DLite 在 MATH-500 达 6.35、HumanEval 5.96、LiveCodeBench 5.66,逐项压过 DSpark;Qwen3-4B 同样全面小胜。作为参照,EAGLE-3 在通用负载上只有 2.08 到 3.07。
长上下文负载(LongBench_v2,加速比):Qwen3-8B 上多文档问答 2.32 倍、长上下文学习 2.74 倍、长对话历史 3.96 倍,均高于 DSpark 的 1.98 到 3.02 倍。注意这一档 DSpark 已经不错——长上下文恰恰是 draft 模型相对擅长的区间,DLite 仍能稳定抢出 10% 到 30%。
智能体负载(Table 3,加速比,差距拉开的地方):SWE-Bench 上 Qwen3-8B 配 DLite 达到 2.74 倍,DSpark 只有 1.60 倍;AgentMemBench 2.20 对 1.83,AgentLongBench 2.31 对 1.68,BFCL-v3 2.30 对 1.82。Qwen3-4B 上 SWE-Bench 是 2.68 对 1.47(DFlash)。接受长度从 DSpark 的 1.94 提到 3.19,这正是摘要里「最高 70% 提升」的出处。
高并发吞吐(并发 1 到 64):即便在平均接受长度接近的配置下,DLite 的吞吐增益依然可见——Qwen3-4B 上 LCB 任务并发 32 时 10873 对 10243 tokens/s。这证明收益不只来自草稿猜得更准,还来自省下的系统开销:不做历史状态维护、没有中间全词表投影。
消融验证:研究者用相同数据训练了 128 与 512 token 滑动窗口 KV cache 的变体,充分训练后三者接受长度相当——历史 KV 缓存只在训练早期有帮助,练成之后并无增益。这基本宣判了「给草稿模型配更大缓存」的路线死刑:数据不会撒谎,问题在架构假设而不在容量。
工程意义:能带走什么
对自建推理服务的团队,这篇论文的价值排序是这样的。
第一,重新测量你的 agent 负载里草稿退化到底有多大。如果线上接受长度已经跌到 2 以下,投机解码贡献的加速可能远低于宣传数字,把预算挪去优化调度或换并行策略更划算。
第二,理解「开销也是收益」。DLite 的设计处处在省:不维护草稿 KV cache、只做一次词表投影、序列头低秩化。哪怕不动架构,这些系统层的浪费也值得在自己的 serving stack 里排查一遍。
第三,KV cache 预算的分配要重新想。既然草稿侧历史被证明是低价值缓存,prefix caching 的资源应该优先保障目标模型的公共前缀(系统提示、工具定义、长文档),这些才是多轮 agent 里真正复用的部分。
局限与未决问题
论文也留了几处空白。实验集中在 Qwen3 两个尺寸与 H800 集群,更大目标模型(70B 以上)上隐状态复用的收益是否维持未知;训练需要 32 卡与近 200 万样本,复现成本不低;此外智能体 benchmark 的 prompt 长度在 40K 到 118K 之间,更极端的百万级上下文场景没有覆盖。对不使用投机解码、靠批处理与量化吃饭的团队,这篇论文至少是一记警钟:你以为在跑加速,可能只是在跑开销。