← 返回 2026-10-19

DLite:面向智能体 AI 的无历史投机解码 DLite: History-free Speculative Decoding for Agentic AI

Jiaming Xu, Hanzhen Wang, Tianlang Zhao, Jiewen Xiao, Chengze Yuan, Jiayi Pan, Yongkang Zhou, Jiancai Ye, Yu Wang, Guohao Dai 📅 2026-10-16 👍 22 2026-11-11 18:30
LLM推理加速 投机解码 智能体系统 知识蒸馏 系统效率

DLite 复用目标模型隐状态、免维护草稿历史 KV 缓存,智能体负载加速最高 2.7 倍

前置知识

投机解码(Speculative Decoding)

LLM 推理加速技术:一个轻量草稿模型先快速生成 N 个候选 token,目标模型用一次前向传播并行验证这些候选,接受匹配的、拒绝不符的。因为验证 N 个 token 的成本约等于生成 1 个 token,只要草稿命中率够高,就能一次前向'提交'多个 token,从而在不改变输出分布的前提下加速自回归解码。

本文的全部设计都围绕'草稿-验证'管线展开,DLite 就是替换草稿模型这一侧的新架构,不理解投机解码就无法理解接受长度、加速比等指标的含义。

KV cache 与草稿历史状态

Transformer 自回归解码时,每个历史 token 在每层的 key/value 向量会被缓存,避免每步重算全部历史的注意力。传统投机解码的草稿模型也要维护自己的 KV cache:验证通过的 token 要写入草稿缓存,多轮对话还要跨轮保留以复用前缀。缓存随序列长度线性增长,更新和维护本身有可观开销。

DLite 的名字来源就是 history-free:它彻底不维护草稿 KV cache。论文测得这部分维护开销占端到端延迟 10%~20%,理解 KV cache 才能明白省掉它的系统价值。

接受长度(Acceptance Length, τ)

投机解码的核心指标:每轮验证平均被目标模型接受的 token 数。若 τ=5,意味着一次目标模型前向约产出 5 个 token,近似 5 倍解码步数压缩。加速比近似为 τ 乘以时间比,还受草稿模型延迟拖累:Speedup ≈ Time_MT(1)×τ / (Time_MT(N)+Time_MD(N))。

论文观察到智能体负载下现有方法 τ 从 5~6 掉到 1~2(退化超 80%),全文的实验表格(Table 1~4)都用 τ 和端到端加速比衡量效果。

蒸馏损失:KL 散度、交叉熵与总变差

训练草稿模型本质是把目标模型的预测分布蒸馏给草稿模型。前向 KL 散度 $D_{KL}(p\|q)=\sum_v p(v)\log\frac{p(v)}{q(v)}$ 惩罚草稿在目标高概率处漏掉的概率;token 级交叉熵只用真实 token 的对数概率监督;总变差 $L_{TV}=\sum_i w_i\|p^T_i-q_i\|_1$ 直接度量两分布的 L1 距离。不同方法选不同组合,如 DSpark 用 CE+TV。

DLite 的两阶段训练先对同构 teacher 用 KL,稳定阶段换成 λCE=0.1 的 CE 加 λTV=1 的 TV,损失设计是理解其训练策略的关键。

半自回归草稿器(以 DSpark 为代表)

介于自回归(EAGLE:逐位生成、保留完整因果依赖但延迟高)和纯并行(DFlash:一次前向出所有位置但丢失块内依赖)之间的架构:并行骨干产出所有投机位置的表示,再由一个轻量顺序模块恢复块内因果依赖,平衡草稿延迟与预测质量,是当前 SOTA 路线。

DLite 与 DSpark 的直接对比贯穿全文(最高提升 70%),且 DLite 自身也是半自回归范式,理解该范式的权衡才能看出其顺序头隐空间设计的差异。

研究动机

现有投机解码方法(EAGLE-3、DFlash、DSpark 等)在传统基准上表现出色,但在智能体工作负载下严重失效。智能体执行的典型特征是长输入、短输出、频繁多轮交互且上下文持续增长:每轮工具调用(读源文件、提交编辑补丁、跑测试)的结果都会拼入下一轮输入,上下文从最初的任务描述滚雪球式增长到数万 token。论文 Figure 1(b) 实测显示,这些方法在 GSM8K、MBPP 等通用任务上接受长度可达 5~6,但在 SWE-Bench、AgentLongBench 等智能体任务上骤降到仅 1~2 个 token,性能退化超过 80%——轻量草稿模型越来越难以独立建模与目标模型预测分布匹配所需的长历史。此外还有系统效率问题:草稿模型必须随验证通过的新 token 持续更新自身 KV cache,prefix caching 又要求历史草稿状态跨 agent 轮次保留;作者用 SGLang 实测 DeepSeek-V4 的多 token 预测模块,发现 KV cache 的更新与维护可占端到端推理延迟的 10%~20%,在频繁多轮场景下不可忽视。

本文的目标是本文的目标是在不牺牲生成质量的前提下,为智能体场景设计一种无需维护草稿模型历史 KV cache 的投机解码框架,使接受长度在长上下文与智能体负载下保持稳定(2~6),同时彻底消除草稿侧历史状态维护的系统开销,并在高并发服务下保持吞吐优势。具体而言:为 Qwen3-4B 和 Qwen3-8B 训练配套的 DLite 草稿器,在通用任务(GSM8K、MATH-500、HumanEval、MBPP、LiveCodeBench、MT-Bench、Alpaca)、长上下文任务(LongBench v2 四个子集)和智能体任务(AgentMemoryBench、AgentLongBench、BFCL-v3、SWE-Bench)三类负载上全面超越当时的 SOTA 半自回归草稿器 DSpark,最高提升 70%;并在并发 1~64 的吞吐测试中验证:即使接受长度接近,无历史设计也能凭借更低的草稿开销带来额外的吞吐收益。

与已有工作不同的是,作者的独特切入是指出两个表面无关的问题——算法层面的接受长度退化、系统层面的 KV 维护开销——其实共享同一根源:草稿模型被迫独立编码并维护不断增长的历史,而目标模型明明已经处理过完全相同的上下文。既有工作都在'如何让小草稿模型更好地建模长历史'这个框架内打转(自回归、纯并行或半自回归三种范式,见 Figure 2),没有质疑'草稿器需要自己重建历史'这一前提。DLite 反其道而行:干脆不让草稿模型重建历史,而是直接复用目标模型各层输出的上下文隐状态作为压缩的上下文特征,把'越来越复杂的历史建模问题'改造成'结构、上下文长度和位置范围都固定不变的局部预测问题',让草稿器有限的容量全部投入到当前解码位置附近的局部投机预测上。

核心方法

直觉上,目标模型每步解码都会产生蕴含全部历史信息的隐状态,草稿模型再用自己的小容量从原始 token 重建历史是重复劳动。DLite 据此把草稿重构为:每轮投机从目标模型最新隐状态出发做局部预测,全程零草稿历史 KV cache。技术上(Figure 3),每个投机轮次的输入有三部分:从目标模型若干层抽取的隐状态 $h_t^{(l)}$,加上可学习深度嵌入得 $z_t^{(l)} = h_t^{(l)} + e_{\text{depth}}^{(l)}$,用以区分 token 嵌入与隐状态两种输入源、并标识隐状态来自哪一层;当前 anchor token;以及 K=7 个 draft 占位符(论文图中用 表示)。由 5 层 Transformer 组成的无历史并行骨干使用双向注意力(无 KV cache)和局部位置 ID(占位符位置标 0,投机位置标 1~K),一次性产出所有投机位置的表示 $h_1,...,h_7$;轻量低秩 RNN 式顺序头再在隐空间内递推恢复块内因果依赖,最后统一做词表投影得到候选 token,交给目标模型按标准流程并行验证并提交。由于没有任何历史状态,每轮都从最新的目标隐状态独立重建,计算复杂度与已生成序列长度解耦。

核心创新有三点。第一是'无历史'范式本身:与 EAGLE(自回归、维护完整草稿历史 KV)、DFlash(纯并行但丢失块内依赖)、DSpark/Domino(半自回归、仍依赖增长历史)不同,DLite 骨干不含任何草稿 KV cache,历史信息全部经由目标隐状态间接携带,预测问题的难度不随序列增长而增加。第二是轻量顺序头的隐空间设计:论文做了一个关键分解——目标模型自回归预测 $p^T(x_{t+T}|x_{<t}, x_{t:t+T-1})$,其中 $x_{<t}$ 的信息已通过上下文表示进入骨干输出的 $h_T$,并行草稿真正缺失的只是块内前缀 $x_{t:t+T-1}$,因此顺序模块只需用低秩 RNN 状态 $s_T = g_\phi(s_{T-1}, E(x_{t+T-1}))$ 压缩块内已生成 token,与 $h_T$ 联合即可恢复自回归预测,无需重建全历史;且相比 DSpark 先对每个位置做 $D\times V$ 全词表投影、再在 logits 空间修正的做法,DLite 把词表投影推迟到块内依赖恢复之后只做一次,高并发下避免了对大量投机隐状态重复施加中间投影。第三是两阶段蒸馏训练,解决无历史并行结构与自回归目标模型之间预测条件差异过大导致直接 KL 蒸馏失效的问题。

方法步骤详情

训练分两阶段(附录 A.1)。Warm-up 阶段:先用 token 级交叉熵 $-\sum_i w_i \log p^H_i(y_i)$ 在相同数据上把与 DLite 同构、但保留历史 KV cache 的 history-aware teacher 训 8 个 epoch;再用前向 KL 散度 $\mathcal{L}_{\text{warmup}} = \sum_{i=1}^{K} w_i\, D_{\text{KL}}(p^H_i \| q_i)$ 把 DLite 对齐到 teacher 2 个 epoch,位置权重 $w_i = \exp(-(i-1)\gamma)$、$\gamma=4$,越靠前的投机位置权重越大。Stable 阶段(6 epoch):丢弃 teacher,直接优化 $\mathcal{L}_{\text{stable}} = \lambda_{\text{CE}}\mathcal{L}_{\text{CE}} + \lambda_{\text{TV}}\mathcal{L}_{\text{TV}}$,$\lambda_{\text{CE}}=0.1$、$\lambda_{\text{TV}}=1$。推理每轮流程:目标模型抽取多层隐状态加深度嵌入 → 无历史骨干并行产出 K=7 个位置表示 → 顺序头沿块内递推恢复依赖 → 词表投影得候选 token → 目标模型一次前向验证提交。训练数据约 1.9M 样本(1.3M Open-PerfectBlend + 600K Nemotron,仅用 prompt 并以目标模型重生成回答),最大序列长 4096,AdamW 学习率 4e-4,batch 32,32 张 H800。最终配置:Qwen3-4B/8B 抽取 12/14 个隐状态做序列维拼接,顺序头秩 R=320/512。

技术新颖性

新颖性在于把系统问题(KV cache 维护开销)与算法问题(长上下文接受长度退化)统一归因后,给出一个同时解决两者的架构,而非分别在两条线上打补丁。与最接近的 DSpark 相比:DSpark 的顺序模块在词表 logits 空间修正、需要维护历史 KV;DLite 的顺序头在隐空间低秩递推、零历史状态,投影只做一次。与 EAGLE 系'复用目标特征'的思路相比——EAGLE 同样使用目标模型隐状态,但仍让草稿器自回归地构建并维护完整历史 KV cache——DLite 的本质差异是彻底抛弃草稿 KV cache:用深度嵌入区分多个源层的隐状态、用局部位置 ID 取代全局累加位置,使每个投机轮次的计算图与序列总长无关。附录消融还给出一个反直觉且有价值的现象:带 128/512 token 滑动窗口 KV 的变体在充分训练后与完全无 KV 版本接受长度相当,说明历史信息确实可以经由目标隐状态充分传递,'历史草稿 KV 不是必需品'这一结论本身即具独立价值,为后续草稿器设计提供了新的自由度。

The inference dataflow of DLite
Figure 3: The inference dataflow of DLite
(a) The design architecture of the lightweight sequential head (b) The training loss and acceptance rate curves of direct target-model distillation using KL and CE loss function
Figure 4: (a) The design architecture of the lightweight sequential head (b) The training loss and acceptance rate curves of direct target-model distillation using KL and CE loss function

实验结果

通用负载(Table 1):Qwen3-4B 上 GSM8K 接受长度 6.38(DSpark 6.27)、HumanEval 5.68、MT-Bench 3.94;Qwen3-8B 上 GSM8K 6.48、LiveCodeBench 5.66,均领先 DSpark,远超 EAGLE-3(2.2~2.6)。长上下文(Table 2,LongBench v2)优势扩大:Qwen3-4B 多文档 QA 2.18×/τ=2.74(DSpark 1.81×/2.20),长对话历史 3.88×/4.62。智能体负载(Table 3)增益最大:Qwen3-4B 的 SWE-Bench 达 2.68×/3.15,对比 DSpark 仅 1.64×/1.89(提升约 63%);AgentLongBench 上 DFlash 甚至负加速(0.95×),DLite 达 2.07×/2.51;Qwen3-8B 的 SWE-Bench 2.74×/3.19。高并发吞吐(Table 4):Qwen3-4B LiveCodeBench 并发 1 时 960 TPS(3.97×),并发 64 时 12075 TPS(1.83× vs DSpark 1.72×);且平均 τ=5.98 对 5.28 领先时吞吐仍额外领先,证明顺序头省去中间 $D\times V$ 投影带来独立于草稿质量的收益。消融(Figure 5):两阶段训练全程优于单阶段;滑动窗口 KV 128/512 变体充分训练后与无 KV 版本接受长度相当。

Acceptance length τ evaluation on general-purpose workloads
Table 1: Acceptance length τ evaluation on general-purpose workloads
Speedup and acceptance length (τ) evaluation on long-context workloads
Table 2: Speedup and acceptance length (τ) evaluation on long-context workloads
Speedup and acceptance length (τ) evaluation on agentic workloads
Table 3: Speedup and acceptance length (τ) evaluation on agentic workloads
Design space exploration of DLite on Qwen3-8B
Table 5: Design space exploration of DLite on Qwen3-8B
Ablation on training strategy and KV cache
Figure 5: Ablation on training strategy and KV cache
查看结构化数据
任务指标本文基线提升
GSM8K 数学(Qwen3-4B) 接受长度 τ 6.38 DSpark 6.27 / EAGLE-3 2.63 对 DSpark +1.8%,对 EAGLE-3 +143%
SWE-Bench 智能体(Qwen3-4B) 端到端加速 / τ 2.68× / 3.15 DSpark 1.64× / 1.89 加速比 +63%,接受长度 +67%
AgentLongBench 智能体(Qwen3-4B) 端到端加速 / τ 2.07× / 2.51 DSpark 1.45× / 1.84,DFlash 0.95× / 1.14 对 DSpark +43%
LongBench v2 长对话历史(Qwen3-4B) 端到端加速 / τ 3.88× / 4.62 DSpark 3.16× / 3.93 加速 +23%,τ +18%
LiveCodeBench 高并发吞吐(Qwen3-4B,并发 64) 吞吐 TPS / 加速比 12075 / 1.83× DSpark 11309 / 1.72× 吞吐 +6.8%
Alpaca 高并发吞吐(Qwen3-4B,并发 64) 吞吐 TPS / 加速比 14300 / 1.32× DSpark 13548 / 1.25× 吞吐 +5.6%

局限与改进

作者承认的局限包括:方法需要针对每个目标模型完整重训草稿器(teacher 8 epoch + warm-up 2 epoch + stable 6 epoch,32 张 H800),迁移成本高;消融显示训练初期无 KV 版本落后于带滑动窗口 KV 的变体,需要更长的训练才能追平,暗示无历史结构的优化更困难。我自己的观察:(1) 高并发 64 下加速比从单并发的 2.5~4× 降到 1.3~2.1×,投机解码收益在 compute-bound 区间必然缩水,这是所有投机方法的共性但论文未深入讨论调度策略;(2) 实验只覆盖 Qwen3-4B/8B 两个稠密模型,未验证 70B+ 或 MoE 架构上隐状态复用是否依然有效;(3) K=7 块长固定,未探索块长自适应;(4) 骨干输入实际是 1 个 anchor + 7 个占位符 + 12~14 个隐状态(约 20+ 个位置)的双向注意力,这部分额外计算开销没有单独报告;(5) 智能体场景 τ 仍明显低于通用场景(如 Qwen3-4B AgentLongBench 仅 2.51 vs GSM8K 6.38),说明长上下文分布对齐仍有很大空间。

独立分析的弱点

弱点一:teacher 训练成本近乎翻倍(8+2+6 共 16 epoch),可尝试 teacher 与 student 联合训练、或用目标模型 EMA/checkpoint 充当 teacher。弱点二:强依赖抽取目标模型中间层隐状态,需要深度修改 vLLM/SGLang 前向钩子,与现有投机解码插件生态兼容性未讨论,应提供类似 EAGLE 的标准化引擎适配层。弱点三:位置权重 $w_i=\exp(-(i-1)\gamma)$ 中 $\gamma=4$ 为手工设定,缺乏敏感性分析,可探索自适应权重。弱点四:设计空间探索(Table 5)仅在 80K 样本子集上进行,结论在全量数据上是否漂移未验证。弱点五:顺序头低秩假设依赖块内前缀信息量有限这一前提,若块长 K 增大到 15~31,低秩瓶颈是否成为质量问题值得检验。弱点六:智能体基准每类仅 41~100 条 prompt(如 SWE-Bench 50 条),样本量偏小,统计置信度有限。

未来方向

作者方向:将无历史投机解码推广到更多目标模型规模与架构(当前仅 Qwen3-4B/8B 稠密模型);在真实智能体框架的完整 rollout 中做端到端系统评估。基于成果可延伸的方向:(1) 把'目标隐状态复用 + 局部预测'思想迁移到扩散式草稿器或 Mamba/线性注意力草稿器,进一步降低草稿延迟;(2) 探索块长 K 的自适应调度,按实时接受概率动态增减投机长度,缓解高并发下收益衰减;(3) 研究 MoE 模型上的隐状态复用——路由稀疏性可能导致隐状态在不同请求间统计不稳定,需要新的对齐机制;(4) 将两阶段蒸馏推广为通用范式,用于其他'结构异构草稿器 ↔ 自回归目标'的蒸馏场景(如并行草稿、非因果草稿);(5) 验证 FP8/INT4 量化目标模型下隐状态复用的鲁棒性;(6) 无历史设计天然省显存,可探索其在边缘设备、CPU 卸载等内存受限场景的价值,这是现有 KV-heavy 方法难以覆盖的;(7) 结合 prefix caching 的跨轮复用与无历史草稿,设计多轮智能体专属的调度策略。

复现评估

复现条件总体较好。代码开源于 github.com/SJTU-DAI-Sys/DLite,权重发布在 HuggingFace collections(SJTU-DAI-Sys/dlite),覆盖 Qwen3-4B/8B。训练算力门槛较高:32 张 H800,共 16 个 epoch(teacher 8 + warm-up 2 + stable 6),数据约 1.9M 样本——Open-PerfectBlend 与 Nemotron Post-Training V2 均公开,但需自己用目标模型重生成回答。评估基准全部公开(GSM8K、LongBench v2、SWE-Bench、BFCL-v3 等),附录 A.1 完整给出超参(lr 4e-4、batch 32、K=7、12/14 隐状态、R=320/512、γ=4、λCE=0.1、λTV=1),A.2 给出设计空间探索,附录还说明各智能体基准的 prompt 构造(如 SWE-Bench 取 50 条 64K 设定)。推理侧集成相对直接(只需 hook 目标隐状态、无需草稿 KV 管理),主要工程量在引擎适配。综合:读懂与推理复现容易,完整训练复现需多卡集群,难度中等偏上。

相似论文推荐