Paper — Oct 20, 2026

DLite:让智能体推理加速最高 70% 的无历史投机解码

Paper 5 min read ·

投机解码(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 之间,更极端的百万级上下文场景没有覆盖。对不使用投机解码、靠批处理与量化吃饭的团队,这篇论文至少是一记警钟:你以为在跑加速,可能只是在跑开销。

Frequently asked questions

DLite 和 EAGLE-3 这类投机解码方法有什么关系?
同属草稿-验证范式,但 DLite 的草稿器不维护自己的历史 KV cache,而是每轮直接读取目标模型最新隐状态作为上下文特征,把不断变长的历史建模问题转化为局部预测问题,并用轻量序列头补回块内因果依赖。
放弃历史 KV cache 会损失精度吗?
论文消融实验显示,用相同数据训练的滑动窗口 KV cache 变体在充分训练后与 DLite 接受长度相当,历史缓存主要在训练早期有帮助;DLite 的验证机制保证输出分布与目标模型一致,不改变生成质量。
接受长度 2 到 6 是什么水平?
在通用负载上 DLite 全面追平或超过现有最优草稿器,如 Qwen3-8B 在 MATH-500 上达到 6.35;在智能体负载上 DSpark 只有约 1.9,DLite 可达 3.15,相对增益最大,这正是该方法的目标场景。
这个方法能在生产环境直接用吗?
论文基于 SGLang 生态评估,架构与主流推理引擎兼容;但训练一个异构无历史草稿器需要约 190 万样本与 32 张 H800,对多数团队更现实的路径是关注其诊断结论,审视自身 agent 负载中草稿退化的实际比例。
为什么智能体负载对投机解码特别不友好?
智能体会话携带长且持续演化的上下文,草稿模型要显式建模的历史越来越长,预测难度单调上升;同时每轮交互都要求维护草稿侧 KV cache,在 prefix caching 场景下这部分系统开销可占端到端延迟的 10% 到 20%。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.