笔记日期: 2026-10-14
论文: DART: Diffusion-Inspired Speculative Decoding for Fast LLM Inference
作者: Fuliang Liu, Xue Li, Ketai Zhao, Yinxi Gao, Ziyan Zhou, Zhonghui Zhang, Zhibin Wang, Wanchun Dou, Sheng Zhong, Chen Tian
编号与版本: arXiv:2601.19278v1,首次提交 2026-01-27
资源: 论文与附录 · 官方资源入口
1. 先抓住问题:帮助大模型加速的小模型,也会拖慢流程
投机解码的出发点很直观:让一个便宜的模型先猜几个 token,再让昂贵的目标模型一次检查。这像是先写草稿再批改,但评价草稿不能只问“猜对多少”,还要问“写草稿花了多久”。如果小模型仍要连续运行八次,单次再轻,也可能吃掉批量验证省下来的时间。
DART 主要改变的是这一段串行等待。它复用目标模型的中间特征,用一个定制的 Transformer 层,一次预测未来若干位置的分布。接下来并不直接把每个位置的最大概率 token 拼起来,而是用 n-gram 统计帮助构造一个候选树,再交给目标模型验证。神经模型负责便宜地提出候选,局部语言统计负责筛掉一些不连贯的组合,目标模型负责最终决定输出。
我觉得最值得记住的是“依赖搬到了哪里”。DART 没有神奇地消除 token 之间的依赖,而是把一部分依赖从多次神经网络前向,移到了离散树搜索中。这个选择能节省 GPU 上的串行延迟,却引入了 CPU 索引和搜索成本。论文中的“单层轻量草稿”成立,但不能据此把整个服务配置也称为轻量:附录中的 n-gram 索引运行时大约占 100 GB 主机内存。
论文在 batch 1 下给出了很好的结果,但附录也给出了另一面:Qwen3-8B 在 batch 64 时,DART 相对普通解码只剩约 1.01 倍加速。因此,这篇笔记会把算法机制、速度账和适用范围一起看。这样既能理解方法为什么有效,也能知道哪些条件改变后需要重新判断。

图 1:根据论文图 3 与第 3–4 节自绘。目标模型特征进入一次并行草稿前向;CPU n-gram 索引在树剪枝时补充局部连续性;验证后只提交被接受的路径及所需纠正 token。图中各模块的职责不同,不能让 n-gram 代替目标模型判断正确性。
2. 前置知识:到底应该优化哪一段时间?
2.1 把“每轮前进多少”和“每轮耗时多久”放到一起
设普通目标模型生成一个 token 的时间为 。一次投机轮次包含草稿前向 、树搜索 和目标验证 。用 表示本轮真正提交的 token 数,它是否包含纠正或额外生成的 token,取决于所用验证规则。忽略 prefill 和固定启动成本,长期加速比可以近似写成:
分子是有效前进量,分母是为它付出的全部时间。如果一种草稿多猜对 10%,但让每轮时间增加 30%,最后仍然会更慢。这也是为什么论文里的平均接受长度 不能单独代表系统性能。
这里还要注意统计口径:累计 token 数除以累计时间,不一定等于“每个请求的加速比再求平均”。长请求和短请求的权重不同,困难请求也可能同时具有低接受率和高耗时。式(1)是帮助理解的账本,而不是代替真实端到端测量的万能公式。
原文对 的描述略有松动:前面说是接受的草稿 token 数,指标段落又说每轮生成的 token 数。如果验证器会额外生成一个 token,这两种口径就不同。我保留表中的原始 ,不会擅自给它加一。下面另用 表示接受的草稿数,用 表示最终提交数,避免把符号混在一起。
2.2 为什么前面的 token 特别重要?
对于长度为 的草稿链,定义 为“前面都已经接受的条件下,第 个 token 也被接受”的概率。利用非负整数随机变量的尾和公式:
这里的乘积来自条件概率链式法则,不需要假设每一步独立。要走到第八步,前七步必须全部通过。早期错误会让后面再好的预测都用不上。
若为了说明问题,假设每一步的条件接受概率都相同,记作 ,则期望接受数为 。当 不高时,一味增加草稿长度很快遇到收益递减。这个简化模型不是 DART 的实测拟合,也不直接等于候选树的接受规律;它只是把“前缀优先”的原因画清楚。

图 2:按式(2)计算的说明性曲线,假设每个位置具有固定条件接受概率。不是论文实验数据。弱草稿即便继续加长,也可能只增加计算量,几乎不增加最终可提交的内容。
2.3 草稿猜错,为什么仍有可能保持目标分布?
先看最基本的单 token 投机采样。记目标分布为 ,实际提议分布为 。从 抽到 token 后,以 的概率接受。于是,直接接受这个 token 的概率质量是 。总拒绝概率为:
拒绝后,若 ,从剩余分布 中采样。把直接接受和拒绝后补回的质量加起来:
当 时不会发生拒绝,也不需要计算剩余分布。这四行说明了一个关键分工:草稿质量决定效率,正确的接受与纠正规则决定最终分布。草稿很差可以导致很慢,却不必导致输出有偏。
不过,式(3)和式(4)解释的是标准链式采样,不能直接当成 DART 任意树验证器的证明。DART 先用并行 logits 与 n-gram 分数做排序和剪枝,得到的分数不自动等于式中的提议概率。温度为零时,可以沿候选路径核对目标 argmax;温度大于零时,则需要与树提议机制相配套的采样、拒绝和回退规则。论文声明保持分布,但没有详细展开这部分树采样推导。笔记应该把这个说明缺口留下,而不是自己补写成作者已经证明过的结论。
3. 一次前向预测多个位置,到底怎样实现?
DART 的草稿模型依赖目标模型已经算出的特征。论文附录 B 选择目标的第 1 层、 层和 层输出,其中 是目标层数,层编号沿用原文。低、中、高层特征拼接后,经全连接层映射成紧凑表示;随后再拼入移位后的 token embedding。
用第 个位置表示:
移位 embedding 包含目标模型已经采到的下一个 token 的信息。接着,在前缀后面追加 个可学习 MASK 表示。一次定制 decoder 前向产生 个 logits:第一个从最后一个前缀位置读取,后面的从 MASK 位置读取。所以默认八个预测对应七个追加 MASK,而不是小模型串行运行八次。
这里有一个阅读时容易跳过去的索引细节。架构段落把已采到的 next token embedding 放进输入,训练段落又用“给定前缀预测未来 个 token”的相对符号。理解机制时,最重要的是明确每次草稿调用前究竟有哪些 token 已知。若以后给这个方法写严格的接口规范,需要把“已知 token、特征位置、输出预测位置”逐个对齐,不能仅凭简写符号猜测一个偏移约定。
定制 decoder 在前缀内和 MASK 块内都使用因果注意力。后面的 MASK 隐状态可以读取前面位置的表示,但并没有先采出前一个新 token、再拿它触发下一次网络调用。因此,“所有 logits 一次并行得到”和“内部存在因果隐状态传播”并不矛盾。真正被去掉的是草稿模型的多次自回归前向,而不是所有形式的信息依赖。
为什么不直接拿现成 diffusion LLM 当草稿?单次去噪仍可能很贵,独立大模型还可能需要不同 tokenizer。DART 选择紧贴目标模型的单层设计,放弃多步去噪和双向迭代修正,只预测短距离未来。这是一种明确的取舍:先把串行等待压低,再通过候选树和目标验证处理预测的不确定性。
原文把草稿成本描述为不依赖 ,理由是始终只调用一次。更准确的理解是:串行前向次数不随 增长,但计算量仍会随位置数变化。注意力、词表投影和后续搜索都不是无限免费。尤其把 放大很多时,不能据此推断实际 GPU 时间保持常数。
算法 1:一次推理轮次的概念流程
下面按论文机制重述,不是实际运行记录。
1. 完成目标模型 prefill,或取得上一轮验证结果。
2. 明确已提交前缀与目标模型已采到的下一个 token。
3. 收集有效前缀对应的低、中、高层特征。
4. 特征拼接投影,再与移位 embedding 组合。
5. 追加 d - 1 个 MASK 表示并设置未来位置。
6. 定制因果 decoder 运行一次,得到 d 组 logits。
7. 用算法 3 构造紧凑候选树。
8. 目标模型通过树注意力与有效验证规则检查候选。
9. 提交接受路径及规则要求的纠正或额外 token。
10. 保留已提交前缀状态,丢弃未接受分支。
11. 直到停止条件或输出长度限制触发。
第 10 步提醒我们:DART 减少的是自回归草稿多轮展开带来的状态管理,不是让系统完全不需要 KV cache。目标模型的缓存、已接受前缀的对齐和候选树的注意力关系仍然存在。方法描述中的“简化”应该限定到具体模块。
4. 训练:共享前缀,但不能偷看未来
4.1 稀疏注意力掩码定义了学习任务
如果对每一个前缀单独训练,就会反复处理同一段干净文本。DART 把多个前缀的训练实例装进一次前向:保留共享的干净序列,再为不同前缀建立各自的 MASK 组。每组只能看属于自己的前缀,以及本组内部因果允许的位置;不同 MASK 组之间不能互看。

图 3:根据第 3.3 节和附录 B 自绘的简化掩码。蓝色表示允许注意的位置。三个干净位置分别对应两个 MASK 的训练组;实际默认草稿长度更长。图中每组可见的前缀长度不同,跨组位置不可见。
这个约束防止一种非常隐蔽的泄漏:一个较早前缀的未来预测,不能因为干净全文也在同一打包序列里,就直接读到答案。位置编号正确,不代表信息隔离已经正确;同样,掩码隔离正确,位置编号错误也会让模型学习错误的距离关系。这两件事必须分别说明。
附录给出的掩码由三类条件取并集:干净 token 之间的因果注意力、MASK 查询到所属前缀的注意力、同一 MASK 组内部的因果注意力。FlexAttention 利用这个稀疏结构提高执行效率。这里的稀疏性是任务定义本身的一部分,不是把一个本该全连接的双向任务粗略近似掉。
4.2 后面的位置为什么天然更不确定?
教师预测未来第 个位置时,看到了真实的中间 token;草稿模型只看最初前缀和相对位置。设中间内容是随机变量 ,教师条件分布为 ,草稿分布为 。那么平均前向 KL 可展开为:
与草稿分布无关。在模型容量足够、优化理想的条件下,最优解是不同未来下教师分布的混合。这是根据论文目标做出的解释性推导,不是作者额外报告的定理。
它说明:草稿可以很好地预测“第三个位置总体上可能是什么”,却不保证这个预测与已经挑选的第一、第二个候选 token 完全一致。越往后,可能的中间路径越多。这不是简单扩大模型就必然消失的问题,因为输入中确实缺少当前候选路径的信息。
4.3 位置加权 KL:把训练重点放到更值钱的预测上
DART 使用的损失为:
把单个位置的 KL 写成教师熵项与交叉熵项,教师固定时前者不对草稿产生梯度。若草稿概率来自 softmax,则对 logit 的梯度是:
因此位置权重直接缩放每个位置的训练信号。八个位置的权重依次是 1、0.6、0.36、0.216、0.1296、0.07776、0.046656、0.0279936,总和 2.4580096;前三个位置拿到约 79.74% 的总权重。这些数字是按公式计算的,不是训练后统计出的注意力重要性。
这里“annealed”的含义是随未来位置衰减。这个公式没有表示 在训练时间上不断改变,也不是推理采样温度。另一个容易混淆的参数是训练学习率,它确实采用 cosine schedule,但属于优化器日程。

图 4:左侧为按式(7)计算的权重;右侧为论文表 4 中 Qwen3-4B 在 HumanEval 上的接受长度。计算示意和实验测量分开放置。0.6 是表中最好点,但原表没有误差条。
算法 2:前缀共享训练的概念步骤
1. 取得干净训练序列,以及目标模型的教师输出。
2. 收集指定层特征并构造移位 embedding。
3. 为每个有效前缀建立未来 MASK 预测组。
4. 按该前缀对应的预测距离分配位置。
5. 干净 token 之间使用因果注意力。
6. 每个 MASK 组只看自己的前缀和本组因果位置。
7. 使用稀疏注意力运行轻量草稿层。
8. 将每个未来偏移的预测与相应教师分布对齐。
9. 第 t 个位置的前向 KL 乘以 gamma^(t - 1)。
10. 排除 padding 和无效目标,汇总损失并更新草稿。
附录 B 报告约 28 万条过滤后的 ShareGPT 与 UltraChat 数据,context length 6400,训练三轮,AdamW 学习率 ,梯度裁剪 0.5,betas 为 。FC、decoder、LM head 与 MASK 表示可训练,共用 embedding 冻结;训练使用八张 H20-3e。
这些设置也解释了为什么“只有一个 decoder 层”不等于完整参数量或训练成本很小:词表输出头同样参与训练。论文没有给出全面的等训练预算比较,所以不能自行把结构轻量推导成训练成本一定低于所有其他方案。上述伪代码用于理解方法,不代表已经运行训练或验证作者实现。
5. 从并行边缘分布到可验证的候选树
5.1 单个位置预测得好,拼起来仍可能不通顺
用一个刻意简化的例子看这个问题。假设两个位置的真实联合分布只支持“red apple”和“blue berry”,两者概率各为 0.5。第一个位置的边缘分布是 red、blue 各一半,第二个位置是 apple、berry 各一半。若直接把两个边缘分布相乘,就会得到四种组合,每种概率都是 0.25,其中一半概率落到了原联合分布不支持的路径上。

图 5:人为构造的二位置例子,不是论文实验。左侧联合分布只支持两条路径;右侧把相同边缘分布独立相乘后产生了额外组合。它说明的是相关性缺失,不是在评价真实语言中某个词组是否合理。
DART 的后续位置 logit 没有随着当前候选路径重新运行一次神经网络,所以正面临这种信息缺口。因果 MASK 能规定信息流向,但同组前面的 MASK 并不等于已经选出的具体 token。把掩码设计和候选条件化混为一谈,会高估草稿层对路径依赖的表达能力。
作者选择在 CPU 端补入 n-gram 分数。对于相同的未来偏移,神经网络给不同分支提供同一套候选 logit;不同分支拥有不同的近期 token,上下文对应的 n-gram 分数则不同。于是局部路径依赖重新进入筛选过程。这是理解整套方法最关键的连接点:神经网络提供有希望的候选集合,统计索引帮助决定哪些组合值得交给目标模型验证。
5.2 组合空间为什么需要两层预算?
默认草稿长度为 8,每个位置取 top-25。若穷举所有组合,就有 条路径,显然不能全部送进目标模型。DART 每层保留至多 20 条活跃路径,最后再从累积节点中选出至多 59 个验证节点。这里“路径宽度”和“节点预算”不是同一回事:不同路径可能共享祖先,而一次目标前向的工作量更直接地受节点数影响。
设候选数为 、深度为 、beam 宽度为 ,候选扩展次数的一个上界为:
这是扩展次数,不是去掉公共前缀后的独立节点数,也没有包括 top-k、排序和树张量组装。它解释了算法为何避开指数级枚举,却不能用来声称整个搜索阶段没有成本。即使神经草稿只运行一次,扩大候选数和树宽仍会增加 CPU 与目标验证的负担。
5.3 排序公式究竟在偏好什么?
附录 D 的增量分数可以写成:
来自草稿在该偏移的预测, 来自候选近期上下文的 n-gram 统计。这里沿用附录的深度记号,不自行推定程序内部采用从零还是从一开始的编号。随着深度增加,神经预测的权重乘上 ;n-gram 项先乘 0.5,再与神经项共同除以深度因子。后者减小后续扩展的负分惩罚,有助于避免排序天然只偏好短路径。
对增量分数取指数,可以更直观地看到两个信息源如何结合:
这类似两个专家分数的乘积,指数随深度变化。但“类似概率乘积”不等于已经得到完整候选树的规范化概率分布。该分数服务于排序;采样正确性仍要由目标模型的验证和修正程序承担。不能把这个排序分数直接当成前面拒绝采样公式中的提议概率。
还有一个容易忽略的问题:选中深层节点时,它的祖先必须也存在。如果每次增加的对数分数非正,祖先分数不低于后代,按全局分数筛选便有利于保留前缀。但公式加入了 ,概率极接近 1 时,对数项可能略为正;相同分数的处理也影响结果。因此,祖先闭包应该是树表示明确保证的条件,不能只靠一个没有写全的排序惯例。论文没有展开所有边界情况,这属于方法描述的留白,不能据此断言发生了某种错误。
算法 3:用局部连续性筛选候选树
1. 初始化活跃路径 C = {(当前前缀, 分数 0)},累积节点 T = {}。
2. 依次处理未来偏移 i = 1, ..., d。
3. 从偏移 i 的并行 logit 中选择 top-k_i 个 token。
4. 对每条活跃路径,查询其近期上下文的 n-gram 子节点分数。
5. 用候选 token 扩展路径,并按式(10)累加分数。
6. 将扩展结果加入临时集合,同时记录到 T。
7. 保留分数最高的 w 条扩展作为下一层活跃路径。
8. 按论文规则,从累积的 T 中选择至多 theta 个节点。
9. 将节点表示成祖先有效、注意力关系正确的验证树。
10. 由目标模型验证,并按有效的接受与回退规则推进序列。
前八步概括论文算法 1,最后两步明确候选树交给验证器时需要满足的条件。它没有增加一个作者未报告的神经网络。对同一偏移的不同路径,top-k 集合相同,变化的是 n-gram 分数。三元统计能改善局部衔接,但不能一般性地约束跨越很多 token 的变量绑定、数学推理或论证关系。
6. CPU 索引不是免费的附属品
附录 C 使用 Dolma 3 Mix 构建 trigram trie,并根据 Qwen3 或 LLaMA2 的 tokenizer 建立相应索引。报告的规模约为 13 亿节点,磁盘文件约 43.5 GB,推理时常驻 CPU 内存约 100 GB。这三项描述的是节点数量、序列化体积和运行内存,不能互相替换。按十进制单位粗算,每节点平均约占 77 字节;这是总量相除的估计,无法反推出内部存储布局。
查询时可以先定位上下文节点,再一次获得候选子 token 的分数。按照默认深度和 beam 宽度,一轮最多有 个活跃上下文需要查询。把它乘以论文给出的约 6 微秒热查询耗时,得到 0.846 ms。这只是顺序执行查询服务时间的示意计算,不是完整搜索延迟的预测。
为什么完整搜索会更慢?还要取 top-k、计算组合分数、筛选候选、处理共享前缀、准备验证输入。另一方面,多线程又可能使部分查询并行。因此,不能把单查询基准简单相乘后,当成端到端结果。论文的 Qwen3-14B 示例中,实际树搜索阶段约为 2.0 ms,这才是该配置下更直接的系统指标。
作者提到 CPU 并行,以及让索引和工作线程绑定到同一 NUMA 节点。可以把 NUMA 理解为多路服务器上的“内存有远近”:访问本插槽关联的内存与跨插槽访问,成本并不相同。在拥有 900 GB 内存的机器上,预热且位置合理的索引可能很快;放到内存受限容器或高并发服务中,缓存失效、争抢和跨插槽流量就可能改变结果。
共享索引是很有价值的部署思路,但“多个进程可以共享”与“并发扩展成本已被证明很低”是两回事。共享物理页、同时查询的内存带宽、冷启动加载和不同 tokenizer 的索引副本,分别占用不同资源。论文没有给出完整的多租户容量实验,因此我会把稳定运行和冷启动分开评估。解码很快不意味着新实例启动也快。
替代方案各有代价。缩小通用索引能省内存,却可能降低覆盖率;专用领域索引可能更适合代码,也可能在其他领域失效;压缩节点能减少体积,却可能增加解码开销;把索引搬到 GPU 会和权重、KV cache 竞争显存;训练一个小型连续性模型可以省去巨大的语料 trie,却重新引入模型计算。DART 展示了其中一个明确可行的工作点,还没有画出整条内存—延迟—接受率边界。
7. 从 6.8 倍草稿加速到真实的每轮成本
论文图 5 给出了 Qwen3-14B 的阶段耗时。DART 的目标验证、草稿前向、树搜索分别为 27.8、1.5、2.0 ms;EAGLE3 对应为 27.8、10.2、3.6 ms。SPS 的验证为 26.3 ms、草稿为 80.0 ms,但草稿长度为 5,而另外两种方法为 8。后者可以作为成本诊断,不能被描述成只改变架构、其他条件完全相同的对照。

图 6:按论文图 5 重绘。柱状图展示每轮各阶段耗时。SPS 使用不同的草稿长度,比较时应保留这一条件。
只看神经草稿,比例是 ;把树搜索也计入草稿侧,变成 ;再加目标验证,整轮比例是 。三个数字都能成立,因为它们的分母范围不同。写成“DART 端到端快了 6.8 倍”就把关键成本漏掉了。
一轮更快还不是全部,还要看这一轮推进了多少。暂用表中的接受长度作为共同口径,可以做一个解释性估算:
表中平均加速比的比例是 。二者不完全相等并不直接构成矛盾:阶段耗时图与跨任务表格涉及聚合,均值的比例也不必等于比例的均值。这里的计算只说明“每轮变便宜”和“每轮多推进一点”两个因素相乘,不能冒充对原实验的重新测量。
DART 示例中,验证占整轮 。在接受进度固定的假设下,即使把剩下的草稿和搜索成本全部删除,额外收益上限也只有 。这就是一个简单的 Amdahl 式推理:把一个阶段优化得足够快之后,下一个阶段会成为瓶颈。继续只盯着草稿层,可能已经不是最有价值的方向。
对“更准但更贵”的改动,可以得到一个通用判断式。原方案每轮推进 个 token、耗时 ,新方案分别增加 和 。在分母为正时:
也就是说,进度的相对增长必须超过时间的相对增长。扩大树、拉长草稿、增加更强的连续性模型,都应经过这个标准。接受长度是重要的中间指标,却不是最终目标;它必须与完整计算预算一起讨论。
8. 主实验支持多大的结论?
主实验机器配置包含八张 141 GB H20-3e、90 个 CPU 核和 900 GB 内存。这里应准确理解为实验服务器配置,不能据此写成“每一个推理目标都用了八张卡”。附录 F 则明确给出单张 A100-40G 的实验。主表默认 batch 为 1,覆盖对话、指令、数学、代码等七个测试集。

图 7:按论文表 1 重绘,batch 1、温度 0,在七个任务上的平均加速比。每个目标模型分别以自己的普通自回归解码为基线,不能据此比较不同模型的绝对吞吐量。
Qwen3-1.7B、4B、8B、14B、32B 上,DART 的平均加速比分别为 2.61、2.87、2.71、2.77、2.42;EAGLE3 分别为 2.01、2.12、2.20、2.02、2.11。逐对相除,DART 的相对优势约为 29.9%、35.4%、23.2%、37.1%、14.7%。这些相对优势再取简单平均约为 28.1%,与论文“约 30%”的总体表述接近。但这是根据展示值重新计算的口径,不应冒充作者对全部原始样本的聚合方式。
最醒目的例子来自 Qwen3-14B 的 CodeAlpaca:。另一个例子却小得多:Qwen3-32B 的 Math500 是 。这提醒我们,代码中的局部模式、目标规模与运行成本会共同影响收益。一个最佳样例不能直接转成服务级承诺。
摘要的 2.03–3.44 倍区间也不覆盖整张表的每个单元格。Qwen3-4B 在温度 0 的 CodeAlpaca 上有 3.45 倍;Qwen3-32B 在温度 1 的 Alpaca 上有 1.84 倍。因此讨论某个具体工作负载时,应回到对应表格,而不是用摘要区间替代。把这种范围差异如实保留,比替作者悄悄统一数字更有价值。
温度 1 时,Qwen3-14B、32B 的 DART 平均加速比分别为 2.47 和 2.19,EAGLE3 为 1.89 和 1.97。这说明收益不只出现在贪心解码。但速度表不能替代采样分布保持性的具体说明。论文以输出分布保持为理由,没有额外比较生成质量;在验证器正确的前提下可以理解,因此更需要把树采样的正确性条件讲清楚。
LLaMA2-Chat-7B 的比较包括 PLD、Lookahead、Medusa 和 Hydra。DART 平均为 2.85 倍,Hydra 为 2.66 倍。Qwen3 上没有把所有这些方法都放到同样的设置下,作者说明了兼容性约束。因此不宜把各模型族的表格合并成“每个方法在每个模型上都做了统一比较”的排行榜。可用基线决定了证据范围。
9. 消融实验:支持了哪些设计,又留下了什么?

图 8:按论文表 2–3 重绘。左图是有无 n-gram 时的接受长度,右图是移位与否的单位置 hit@1。它们度量不同对象,都不能单独等同于实际加速比。
加入 n-gram 后,HumanEval 接受长度从 3.13 到 3.63,Alpaca 从 2.76 到 3.26,Math500 从 2.89 到 3.37,CodeAlpaca 从 3.85 到 4.59。相对增加约为 16.0%、18.1%、16.6%、19.2%。这确实支持局部连续性筛选有效,但表 2 的标题没有交代所有配置细节,不能给它补上未说明的控制变量。
移位预测在 Qwen3-4B 上,把第一个未来位置的 hit@1 从 57.7% 提高到 71.1%,即增加 13.4 个百分点。注意它不是“相对增加 13.4%”。第二、第三个位置分别由 38.1% 到 41.0%、25.1% 到 27.6%。前三个位置的 top-10 覆盖率则达到 93.2%、76.7%、65.9%。这能解释为什么保留多个候选有意义,但 top-10 覆盖高并不保证这些 token 能拼成一条同时被接受的路径。
位置权重的消融更有启发性。 时第一位置准确率最高,为 76.2%,但接受长度只有 3.59; 时第一位置准确率稍低,接受长度反而达到 3.63。只优化第一个位置,就会错过这组实验中整体更好的平衡。与此同时,两者差距不大,原表没有置信区间或多随机种子方差,因此 0.6 应理解为有经验支持的默认值,而不是普遍最优常数。
这些消融还没有拆开所有交互。例如,更宽的树可能弥补弱一些的单位置 logit;节点预算变小时,第一位置的精度可能更加重要;n-gram 分数的价值也可能随领域和温度而改变。理想的后续研究可以交叉改变移位方式、KL 衰减、n-gram 权重、beam 宽度与验证节点数。当前结果说明组件在给定配置下有帮助,还不能说明它们在所有预算下都产生相互独立、可直接相加的收益。
10. batch 和硬件会改变是否值得使用的答案

图 9:按论文表 6–7 重绘,实线为 DART,虚线为 EAGLE3。Qwen3-4B 在 batch 64 时仍保留明显收益,Qwen3-8B 则接近普通解码。
在 batch 64 时,Qwen3-4B 的普通解码、EAGLE3、DART 吞吐量分别为 370.0、453.3、538.7 tokens/s;Qwen3-8B 对应为 360.3、356.4、366.1 tokens/s。后一组直接相除得到 DART 约 1.016 倍、EAGLE3 约 0.989 倍,表中展示为 1.01 和 0.98。可见展示精度或聚合细节不足以逐位还原比值,但结论不受影响:8B 在该 batch 下的优势已经很小。
原因可以从资源利用率理解。batch 增加后,普通自回归解码本身能更充分地利用矩阵计算能力,原先可以容纳额外候选验证的空余算力减少了。验证树仍会增加目标模型的计算位置;草稿更快并不能把这部分工作变成免费。于是是否启用投机解码,应该依赖实际负载,而不只是模型名称。
对于服务系统,一个合理方向是根据 batch 占用和近期接受率,在普通解码与投机解码之间切换。不过这个切换器本身也要计入成本,并避免短时间波动造成频繁切换。论文的静态 batch 实验支持“收益依赖负载”这一判断,还没有验证一个完整动态调度策略。

图 10:按论文表 8 重绘,单张 A100-40G、温度 0。这里是在各自硬件内部相对普通解码的归一化加速,不能据此推断 A100 与 H20 的绝对吞吐量高低。
A100 上,Qwen3-1.7B、4B、8B、14B 的 DART 平均加速比为 2.74、2.83、2.83、2.84;EAGLE3 为 2.21、2.22、2.33、2.19。这拓宽了证据,说明收益不只出现在一种 GPU 上。但“硬件无关”仍是更强的说法:两类 GPU 配合某种主机环境,并不能覆盖消费级内存容量、不同 NUMA 拓扑、其他 attention kernel 和大模型张量并行配置。
真正用于部署判断时,我会同时看吞吐量、延迟分位数和内存,而不是只看固定 batch。真实请求有到达过程、长短不一的输出、排队、prefill 干扰和前缀复用。长输出能够摊薄启动开销,短输出则未必。指出这些变量不是否定实验,而是给实验结论划定适用范围。
11. 局限与失败边界
第一类边界是目标模型耦合。DART 需要中间层特征、匹配的 tokenizer 和经过训练的草稿模型;只提供文本或 token 概率的黑盒 API,并不能直接套用。目标模型升级后,特征分布可能变化,需要重新评估草稿对齐。论文主要研究选定的稠密 Qwen3 与 LLaMA2-Chat-7B,不能默认相同收益会直接迁移到 MoE 或混合循环结构。
第二类边界是统计覆盖。通用语料的 trigram 能提供常见语言与代码片段的局部线索,但罕见标识符、专门领域符号、不寻常格式和分布变化,可能让这些线索变弱。只要目标验证保持正确,这种失败主要表现为接受率下降、计算浪费或加速减少,而不是必须导致输出质量变差。要把提议质量与最终目标分布分开讨论。
第三类边界是资源规模。约 100 GB 常驻 CPU 内存,在大服务器上可以接受,在小型推理节点上可能不可行。冷加载、多个 tokenizer 索引、其他任务争抢以及跨插槽访问,都可能增加完整成本。论文报告的热查询不能回答全部情况,训练和索引建设成本也没有包含在解码加速比中。
第四类边界是描述和统计粒度。多项结果只给点估计,没有误差条;接受长度的精确定义、采样树验证的完整细节、分数边界情况,以及主实验每项具体 GPU 分配,没有全部展开。这些留白影响我们能做多强的推论,但并不是观测到的故障。阅读时既不应忽略,也不应把它们升级成未经证明的问题。
最后,研究在特定时间、兼容条件下选择了基线,没有与所有后续并行草稿方法做统一预算比较。把 DART 与其他方法放在一起讨论,有助于理解设计空间;要判断谁更快,则需要匹配目标模型、数据、硬件、采样规则与资源预算。名字都含“diffusion”,并不代表掩码、教师对齐和验证树相同。
12. 独立批判性分析
12.1 我更看重的是依赖关系如何分工
DART 最值得借鉴的地方,是把不同依赖分给不同成本的组件:目标特征支撑便宜的边缘预测,主机统计结构恢复一部分局部路径关系,最后由目标模型处理剩下的不确定性。其意义不依赖“扩散”这个标签是否足够吸引人。一个依赖如果用便宜的统计机制就能改善候选排序,就未必值得为它再运行一遍神经网络。
反过来,也不应把 trigram 说成全局语义规划器。三个 token 的统计关系,通常无法保证长程变量一致性或多步论证成立。更准确的表述是:短上下文连续性改善了送入目标模型的候选集合。这个结论看似克制,却有清楚的消融支持,也更容易迁移到其他系统设计。
12.2 双向草稿不天然破坏精确采样
论文用因果草稿对比双向扩散生成,这个工程选择有道理:已知前缀是可靠的事实上下文,多轮去噪又可能昂贵。但从采样理论看,提议机制内部允许 MASK 或候选未来位置双向交流,并不自动意味着最终输出偏离目标分布。
真正关键的是两件事:提议过程不能使用推理时根本不可得的真实未来;验证和修正规则必须对实际提议机制有效。只要满足这些条件,非因果草稿未必不精确。因果掩码有助于 DART 对齐训练和推理、简化结构,但不能从中推出“所有双向草稿都不可能保持目标分布”的普遍定理。
同样,n-gram 排序可以非常有用,却不承担最终正确性的证明。单 token 拒绝采样的质量守恒推导,不能直接代替一个经过确定性剪枝的多分支树验证证明。把这两个层次分开,能让读者理解哪些结论来自算法规则,哪些来自实验表现。
12.3 节点的价值应按额外进度与额外成本衡量
固定 方便控制变量,也适合展示基本方法。但在线服务中的最佳预算可能随前缀不确定性、GPU 占用和主机延迟变化。给一条高概率路径多延长一层,与在早期新增一个分支,增加的接受机会并不相同;它们的验证成本也不一定相同。
一个值得探索的目标,是按“预计增加的提交 token 数减去资源成本”选择扩展节点。例如,给扩展 定义概念性的效用:
这是本文提出的分析方向,不是 DART 的原算法或已验证结果。两个系数反映系统所处工作点,预测量也需要校准。比较时应保持目标输出规则一致,并把预算控制器自己的运行成本计入。如果为了决定哪些节点值得验证,耗时已经超过省下的验证成本,那么这个控制器就没有达到目的。
12.4 下一组实验应画出完整资源边界
我会首先固定目标验证节点数,改变索引容量、覆盖范围与 n-gram 阶数,同时报告内存、冷启动、热查询、整轮搜索、接受长度和端到端速度。这样才能判断 100 GB 是否是获得当前收益的必要条件,还是一个方便实现的选点。只报告接受长度,会隐藏用多少资源换来了它。
第二步是把领域和资源压力交叉起来:代码、普通对话、数学文本和罕见领域标识符,分别在独占主机与并发 CPU 负载下运行。这个实验直接检验 DART 特有的前提——局部统计是否仍然既便宜又有用。索引语料和 tokenization 也应写清楚,才能解释代码场景较大的优势,而不是把它笼统归因于“语义能力”。
第三步是更明确地描述采样验证:剪枝后的候选过程是什么,接受规则是什么,拒绝时如何回退,祖先如何保留,温度在哪里作用。一个小词表上的解析例子,就能让分布质量如何守恒变得清晰。这类说明不需要依赖某份源码,是方法本身应当能提供的可检查论证。
13. 结论:把一轮的账算完整
DART 给出了一个具体而有用的答案:用一次并行草稿前向削减串行等待,再用局部统计选择更值得验证的路径。实验支持它在单请求、小 batch 下带来显著加速,代码生成有一些很强的例子;同时,高 batch 和主机资源成本也清楚地限制了适用范围。
我的核心收获不是记住一个最大的加速数字,而是同时追踪四件事:草稿前向用了多久、候选树用了多久、目标验证用了多久、这一轮到底提交了多少 token。把这四项放在同一张账上,才能看懂为什么接受长度不是越高越好,也才能判断“再增加一个组件”是否值得。
落到应用选择,我会依次确认目标特征是否可取、主机内存与 NUMA 是否合适、当前负载是否还有验证余量、采样保持性是否对具体树过程成立,以及收益是否经得起真实请求长度和到达分布。这些问题得到肯定答案后,DART 才从一个漂亮的 batch-one 实验,变成适合当前服务的技术选项。
本文解释和分析论文报告的方法与测量。附加公式、算术比较、示意分布和研究建议均已注明性质,没有声称完成新的训练、推理基准或实验复现。
参考资料与证据位置
- Liu 等,DART,arXiv:2601.19278v1,2026-01-27。完整阅读 15 页正文与附录 A–G。第 3–4 节支持架构、损失和剪枝解释;图 5、表 1–8 支持文中数值;附录 B–D 支持训练与索引细节。
- Leviathan、Kalman、Matias,Fast Inference from Transformers via Speculative Decoding。用于理解接受与修正机制,本文式(3)–(4)给出了自足的单 token 推导。
- DART 官方资源入口,由论文链接,供进一步查阅。
- 图 1–3、图 5 为原创解释图;图 4 将按公式计算的权重与表 4 测量并列;图 6–10 按注明的原表、原图重绘。式(1)–(4)、(6)、(8)–(9)、(11)–(14)属于解释性推导或独立分析,均不代表新增实验结果。