013 · Diffusion LLM 解码
DAWN:先看 token 依赖,再决定这 1 轮并行提交谁
DAWN 怎么排 token:它不改训练,只在 diffusion LLM 解码时工作。每次 forward 已有的 confidence 和 attention map 被用来建立 token 依赖图;可靠上下文支撑的位置可以提前解除 mask,强耦合的未决位置则不会在同一轮提交。
本文目录 · 16 节
- 1. 前置背景:论文解决的不是训练,而是提交时机
- 2. Nonindependent prediction:poker hand 反例
- 3. 普通 dLLM sampler 与速度瓶颈
- 4. Confidence-aware baseline 为什么不够
- 5. DAWN 1 轮的完整流水线
- 6. 从 attention 构造 dependency graph
- 7. Attention sink 为什么必须过滤
- 8. Anchor 是什么,为什么它能降低门槛
- 9. Anchor-Guided 的 2 类接受条件
- 10. Conflict graph:有任一方向的边就互斥
- 11. 8 位置完整数值例子
- 12. 它为什么不是 speculative decoding
- 13. 与 DiffusionGemma、DSB 的关系
- 14. 实验逐表阅读
- 15. 消融说明了什么,方法在哪里失效
- 16. 复现清单与结论边界
1. 前置背景:论文解决的不是训练,而是提交时机
DAWN 不训练新的 diffusion backbone,不修改权重,也不训练 draft model。LLaDA、Dream 或类似 masked text diffusion model 负责根据当前 canvas 输出所有 mask 位置的 token distribution;DAWN 位于 sampler 1 层,回答这 1 轮哪些位置可以永久从 [MASK] 变成预测 token。
这个区分很重要:dLLM 的 1 次 forward 本来就并行计算全位置 logits,计算并行并没有错。风险来自并行 commit。某位置一旦解除 mask,后续轮次会把它当成条件;错误 token 会改变别的位置分布并传播。DAWN 因此优化的是“每次 forward 推进多少个可靠 token”,即质量与 NFE/TPS 的折中。
2. Nonindependent prediction:poker hand 反例
设 canvas 是 The poker hand is [MASK] [MASK].,合法短语包括 high card、two pair、full house、straight flush。2 个位置分别看边缘分布时,第 1 个位置可能把 high 排第一,第 2 个把 house 排第一;同时 argmax 就得到非法的 high house。
若第 1 轮只确定 [MASK] house,下一轮模型看到 house 后,前 1 位置的条件分布会把 full 推高。这个例子揭示论文的核心:2 个位置都“各自看起来合理”,不代表它们的组合合理。安全并行必须知道位置间的 coupling。
3. 普通 dLLM sampler 与速度瓶颈
给定 prompt \(X\) 与预设回答长度 \(L\),初始化 \(y^{(0)}=([\mathrm{MASK}],\ldots,[\mathrm{MASK}])\)。第 \(t\) 轮模型对所有 mask 位置输出词表概率,每个位置 confidence 是其最大 token 概率:
\[ \begin{aligned} M^{(t)} &= \{i\mid y_i^{(t)}=[\mathrm{MASK}]\},\\ c_i^{(t)} &= \max_{v\in\mathcal{V}}p_\theta(y_i=v\mid X,y^{(t)}),\\ i_t &= \arg\max_{i\in M^{(t)}}c_i^{(t)}\qquad\text{(Top-1).} \end{aligned} \]Top-1 每轮只提交 1 个位置,质量相对稳,但生成 L 个 token 最坏接近 L 次 forward,几乎放弃 diffusion 的并行潜力。另一极端是 1 次提交所有 mask,forward 很少,却让大量依赖位置在缺少条件时同时落锤。DAWN 要在两者之间找到更大的安全更新集。
离散 masked diffusion 的状态是什么
这里的“扩散”不是把连续向量加高斯噪声,而是把离散 token 替换成特殊的掩码符号。生成开始时,回答区的所有位置都处于最大噪声状态;每次去噪 forward 接收完整 prompt 和当前回答画布,双向 attention 允许每个回答位置同时观察 prompt、已经提交的 token 以及仍是掩码的位置。模型输出的不是 1 个 next-token distribution,而是每个掩码位置各有一份词表分布。Sampler 再选择若干位置和各自概率最高的 token,形成下一状态。
提交与临时预测必须区分。1 次 forward 会给所有掩码 1 个临时 argmax,但没有被 sampler 选中的位置在下一轮仍写成掩码,模型不会把它的临时词当作确定上下文。被选中的位置则永久写入画布,后续轮次条件在它之上。论文所说的 consistency,是某位置当前临时 argmax 与最终完整去噪结果相同;如果一致,即使现在 confidence 略低,提前提交也不会改变最终 token。Anchor 实验测的正是这种一致率。
Block inference 与并行位置选择是 2 层约束
论文实验把生成长度设为 256、block length 设为 32。回答被大致分块以维持从左到右的语言因果,当前 block 内仍有多个掩码可并行选择。DAWN 主要改当前允许区域内的选择规则,并没有移除 block-causal 外壳。每轮处理多少位置由三件事共同决定:block 允许哪些位置、confidence 与依赖图选中哪些位置、模型的当前概率给这些位置填什么 token。把速度收益全归因于“全局任意位置并行”会误解实验设置。
4. Confidence-aware baseline 为什么不够
Fast-dLLM 1 类 baseline 用阈值直接决定:
\[ U_{\mathrm{conf}}^{(t)}=\{i\in M^{(t)}\mid c_i^{(t)}\ge\tau\}. \]例如 5 个位置预测 confidence 为 0.96、0.92、0.84、0.78、0.95,\(\tau=0.9\) 时只提交 1、2、5。它保守而便宜,但丢失 2 类信息:0.84 的位置可能已经被 1 个可靠 token 强条件化,实际可安全提交;2 个都是 0.85 的位置可能彼此高度依赖,直接把 \(\tau\) 降到 0.8 又会一起出错。
KLASS 增加 KL divergence,LocalLeap 也利用局部 anchor,但判断仍较粗。DAWN 把 scalar rule \(f(c_i)\) 改成 graph-aware rule \(f(c_i,G^{(t)},U^{(t)})\):既看自己的 confidence,也看可靠依赖和候选间冲突。
5. DAWN 1 轮的完整流水线
- dLLM 对当前 canvas forward,得到各 mask 的 logits/confidence 与 attention。
- Dependency Graph Construction 聚合 attention、滤掉 sink 与 self-loop,再阈值化成稀疏有向图。
- Anchor-Guided Decoding 先收极高 confidence 位置,再收由可靠 anchor 支撑、通过较低阈值的位置。
- Conflict-Based Scheduling 在剩余中低 confidence 候选上建立无向冲突关系,贪心选 1 个互不相邻集合。
- 并集 \(U_{\mathrm{anchor}}^{(t)}\cup U_{\mathrm{conflict}}^{(t)}\) 同时解除 mask;下一轮重新 forward、重建图,不复用旧图假设。
3 个模块不是串联过滤同一规则。图构造给出关系;AGD 用“依赖可靠上下文”放宽;CBS 用“候选彼此依赖”互斥。前者增加可接纳 token,后者控制激进阈值的风险。
输入:prompt X,回答长度 L,阈值集合,dLLM f_theta
状态:画布 y,可靠 anchor 集 A
y <- [MASK]^L
while y 仍含 [MASK]:
logits, attention <- f_theta(X, y)
对每个 mask i:
token_i <- argmax_v softmax(logits_i)[v]
c_i <- max_v softmax(logits_i)[v]
G <- BuildGraph(attention, tau_sink, tau_edge)
I <- {mask i | 存在 anchor a 且图中 a -> i}
U_anchor <- {i | c_i>=tau_high
或 (i 属于 I 且 c_i>=tau_induced)}
C <- 未被 U_anchor 选择、且 c_i>=tau_low 的 mask
U_conflict <- GreedyIndependentSet(C, G, U_anchor)
U <- U_anchor 并 U_conflict
若 U 为空:至少提交当前最高 confidence 位置,保证前进
对 i 属于 U:y_i <- token_i
把本轮以 c_i>=tau_high 提交的位置登记为可靠 anchor
返回 y
兜底前进规则在任何阈值 sampler 中都重要:若所有 confidence 都低于下界而算法又不提交,循环会停住。论文以原始 Top-1 采样作为最保守参照,实际实现必须确保每轮至少有位置更新。可靠 anchor 记录的是提交瞬间的置信度,而不是之后重复计算 1 个已确定位置的分数;否则 anchor 定义会随画布变化,无法对应论文的观察。
时间复杂度上,大模型 forward 仍是主体。设允许区长度为 n,attention 聚合与阈值扫描最坏涉及 n 平方个条目;得到稀疏边集 E 后,贪心冲突调度可用按 confidence 排序加邻接表实现,约为排序成本加边遍历成本。算法没有求解精确最大独立集,也不回溯搜索,这保证图调度不会取代模型 forward 成为组合优化瓶颈。
6. 从 attention 构造 dependency graph
聚合 attention matrix 记为 \(A^{(t)}\in\mathbb{R}^{L\times L}\)。若 query 位置 \(i\) 对 key 位置 \(j\) 的 attention 超过 \(\tau_{\mathrm{edge}}\),就建有向边 \(j\to i\),含义是 \(i\) 的预测可能强依赖 \(j\)。论文为降低噪声,平均最后 4 层与全部 attention heads;不同 denoising iteration 的 attention 会变,因此图每轮重建。
若 cleaned_A_ij^(t) > τ_edge:添加 j -> i
例:France -> Paris
capital -> Paris
表示 Paris 的当前预测受到已知 France/capital 支撑
它不是要估计完整联合概率,也不声称边是严格因果。目标只是提取足够便宜、足够稀疏的 coupling proxy,供本轮 scheduler 做二元判断。
矩阵方向必须读对
聚合矩阵的第 i 行是 query i 对所有 key 的权重。若 A 的第 i 行第 j 列很大,含义是预测位置 i 在读取位置 j,因而依赖方向写作 j 指向 i。把边反过来会让 anchor 搜索完全错误:可靠的 j 本应诱导 i,却会被解释成 i 支撑 j。冲突阶段虽然把任一方向的边都无向化,不受方向翻转影响,但 AGD 明确依赖方向,所以实现单元测试应构造 1 个已知小矩阵检查边向。
层与头如何聚合
原文选择最后 4 层,是因为靠近输出的注意模式更贴近最终 token prediction;再对所有头平均以降低单头噪声。若模型有 h 个头、选 k 层,可先对同一 query-key 条目的 k×h 个值求均值,得到 1 张二维矩阵。Prompt 位置与已提交回答位置都可成为依赖源,尚未提交的位置也能形成候选间的冲突边。图节点因此覆盖当前序列位置,而不是只覆盖本轮 mask。
高性能 attention kernel 往往在线计算 softmax 与 value 乘积,不输出完整概率矩阵。论文方法逻辑上使用 attention map,工程上可选择让指定的最后 4 层返回权重,或在 kernel 内直接累计每个 key 的平均入向质量并输出超过边阈值的稀疏统计。前者实现简单但有显存和带宽成本,后者更接近生产系统却需要改 kernel。复现实验应把该统计成本计入端到端 TPS,而不能只测图选择函数。
7. Attention sink 为什么必须过滤
dLLM 中少数标点、特殊 token 会吸收异常大的 attention mass,而且 sink 会随 denoising step 移动。若许多 query 都高 attention 到逗号,未经处理的图会把逗号连向大量位置,误判为核心语义条件,随后 AGD 放宽错误位置、CBS 制造大量伪冲突。
\[ \bar{A}_j^{(t)}=\frac{1}{L}\sum_i A_{ij}^{(t)}. \]若 \(\bar{A}_j^{(t)}>\tau_{\mathrm{sink}}\),就将 \(j\) 标记为 sink 并过滤其入向 attention mass;同时忽略 \(A_{ii}\),因为 self-attention 不表示跨位置依赖。
原文 Figure 1 显示 sink 位置跨 step 改变,频繁 sink 多为标点和特殊 token,与词义关系弱。去 sink 因而是 dependency proxy 能成立的前提,不是普通数值清洗。剩余 attention 再按 \(\tau_{\mathrm{edge}}\) 稀疏化,避免弱边让图接近完全图。
过滤的对象是 sink 作为 key 收到的异常 attention,不是从序列中删掉这个 token。标点仍留在画布,也仍可正常被模型预测和提交;只是图构造不再因为系统性注意偏置把它解释为强依赖源。若直接删除对应 token 或屏蔽它参与模型 attention,会改变 backbone 计算,已经超出 training-free sampler 的范围。
\(\tau_{\mathrm{sink}}\) 与 \(\tau_{\mathrm{edge}}\) 的作用也不同。前者做列级离群检测,回答“这个 key 是否整体异常吸引所有 query”;后者做边级稀疏化,回答“某一对位置的联系是否足够显著”。只有 \(\tau_{\mathrm{edge}}\) 没有 sink filtering 时,1 个 sink 会留下大量高分边;只有 sink filtering 没有 \(\tau_{\mathrm{edge}}\) 时,大量普通弱边会让冲突图过密,CBS 每轮只能选很少节点。两级处理共同决定图的精度和密度。
8. Anchor 是什么,为什么它能降低门槛
Anchor 是已经解除 mask、且提交时 confidence 不低于 \(\tau_{\mathrm{high}}\) 的位置。它与普通已提交 token 不同:DAWN 保留其“当时有多可靠”这一证据。原文在 LLaDA-8B-Instruct 的 GSM8K、HumanEval 样本上分析 induced consistency:当 anchor confidence 高于约 0.9,强依赖它的 mask 位置即使当前 confidence 较低,也往往与最终完整解码结果一致。
直觉是条件已经变强。例如 canvas 为 The capital of France is [MASK],France、capital、is 都是高置信已提交 token,图中它们指向最后位置。即使 Paris 当前只有 0.82,仍比 1 个没有可靠语义条件的 0.82 token 更可信。仅比较 2 个 scalar confidence 会丢掉这个差异。
9. Anchor-Guided 的 2 类接受条件
AGD 输出集合包含 2 类位置。第 1 类不需要图支持,只要自身达到保守高阈值;第 2 类是由 anchor 通过依赖边到达的 induced position,只需达到较低 \(\tau_{\mathrm{induced}}\):
\[ \begin{aligned} I^{(t)} &= \{\text{mask positions reached from a reliable anchor}\},\\ U_{\mathrm{anchor}}^{(t)} &= \{i\in M^{(t)}\mid c_i\ge\tau_{\mathrm{high}}\\ &\qquad\qquad\ \lor\,(i\in I^{(t)}\land c_i\ge\tau_{\mathrm{induced}})\},\\ \tau_{\mathrm{induced}} & < \tau_{\mathrm{high}},\qquad \tau_{\mathrm{high}}=0.9. \end{aligned} \]| 位置 | confidence | 有可靠 anchor | AGD |
|---|---|---|---|
| A | 0.95 | 否 | 接受:高阈值 |
| B | 0.82 | 是 | 接受:induced 阈值 |
| C | 0.82 | 否 | 不接受 |
| D | 0.68 | 是 | 仍不接受 |
图支持不是免检通行证。位置 D 即使依赖 anchor,也必须过 \(\tau_{\mathrm{induced}}\);否则 noisy attention 会把极不确定 token 提前冻结。
第 1 类高 confidence 位置为何可以近似同时提交?论文沿用已有工作的经验:足够高置信的预测通常在后续轮次不再改变,而且高阈值使它们彼此冲突的概率较低。DAWN 并未证明它们严格独立,仍是一项经验假设。第 2 类 induced 位置则依赖不同逻辑:它本身没有达到保守阈值,但它的主要条件已经成为稳定 anchor,所以当前预测更接近最终条件预测。这 2 个理由不能合并成 1 个连续分数,否则很难从消融中判断额外并行来自哪里。
多个 anchor 同时指向 1 个位置时,论文规则仍是二元可达,不会把边数线性加到 confidence 上。这样避免 attention head 数、序列长度改变时分数尺度漂移,也意味着方法没有利用“受到多个独立证据支持”可能更可靠的信息。相反,只要 1 条超过 \(\tau_{\mathrm{edge}}\) 的 anchor 边就算 induced,伪阳性边会放宽门限;这正是 sink 过滤和 \(\tau_{\mathrm{induced}}\) 下界不可省略的原因。
10. Conflict graph:有任一方向的边就互斥
AGD 后还剩一批达到更低阈值 \(\tau_{\mathrm{low}}\) 的候选。若原有向 dependency graph 存在 \(i\to j\) 或 \(j\to i\),CBS 就把 \(i,j\) 当作无向 conflict。方向在解释依赖时有用,但对“能否同时提交”而言,只要一方依赖另一方就应错开。
因此选择问题转成图上的 independent set:从候选中选尽量多节点,任意两点之间没有 conflict edge。精确 maximum independent set 代价高,且图每轮改变,不适合推理热路径。论文使用按 confidence 降序的 greedy maximal independent set。
X = U_anchor 及它们的冲突邻居
R = {i | c_i ≥ τ_low} \ X
while R 非空:
i* = argmax_(i∈R) c_i
U_conflict 加入 i*
R 删除 i* 与 N(i*)
先排除 \(U_{\mathrm{anchor}}\) 的邻居也很关键:否则 CBS 可能选到 1 个与本轮 AGD token 冲突的位置,2 个模块各自无冲突但并集有冲突。
为什么是 maximal,而不是 maximum
贪心结束时,任何未选候选都与已选节点冲突,所以集合是 maximal,也就是无法再加节点;它不保证节点数全局 maximum。举例说,某个置信度最高的中心节点连接 3 个彼此不相连的叶子,贪心先选中心只得到 1 个节点,而最大独立集会选 3 个叶子。DAWN 仍优先置信度,是因为推理目标不只是本轮选得最多,还要降低错误提交风险。用较低 confidence 的三叶换更多数量可能导致质量更差,且精确求解每轮图没有必要。
CBS 的输出大小不能单独衡量好坏。图太稀时集合很大,却可能漏掉冲突;图太密时集合很小,又退回保守 sampler。评测必须同时报告准确率、TPS 和 NFE。阈值调节是在图的误报、漏报与可接受的 confidence 风险之间取平衡。
11. 8 位置完整数值例子
1 轮有 8 个 mask,confidence 依次为:\(1=0.96\)、\(2=0.80\)、\(3=0.90\)、\(4=0.70\)、\(5=0.85\)、\(6=0.77\)、\(7=0.92\)、\(8=0.75\)。为演示设 \(\tau_{\mathrm{high}}=0.9\)、\(\tau_{\mathrm{induced}}=0.8\)、\(\tau_{\mathrm{low}}=0.7\)。此前 anchor A 指向位置 2,anchor B 指向位置 5;剩余冲突链为 \(4\!\text{---}\!6\!\text{---}\!8\)。
- 高阈值:1、3、7 直接进 \(U_{\mathrm{anchor}}\)。
- Anchor induced:2 的 0.80、5 的 0.85 都达到 \(\tau_{\mathrm{induced}}\) 且有可靠 anchor,也进 \(U_{\mathrm{anchor}}\)。此时 \(U_{\mathrm{anchor}}=\{1,2,3,5,7\}\)。
- 剩余 4、6、8 都达到 \(\tau_{\mathrm{low}}\)。按 confidence 先选 \(6=0.77\),删除与它冲突的 4 和 8,得到 \(U_{\mathrm{conflict}}=\{6\}\)。
- 本轮并行提交 \(\{1,2,3,5,6,7\}\),4、8 保留 mask。下一轮模型在 6 已确定的条件下重新估计 4、8,attention 与 conflict 也重新计算。
纯 0.9 confidence baseline 只提交 \(\{1,3,7\}\);把阈值粗暴降到 0.7 会提交全部 8 个;DAWN 提交 6 个,并有明确理由留下 4、8。这个例子展示的是算法结构,论文实际低阈值按设置在 0.7–0.85 间选择,不应把演示值当作全模型默认。
下一轮如何继续
提交后,位置六的 token 写入画布,位置四和八仍是掩码。第 2 轮模型不沿用第 1 轮对四和八的概率,因为条件已经变化;它重新计算全序列。若新图显示六指向四,而且六提交时达到高阈值,它可成为 anchor,位置四可能以 induced 条件进入。若六只有中等 confidence,是 CBS 选中的而非可靠 anchor,它不会自动给四降阈值。这样可以防止“1 个激进提交再连锁放宽更多位置”的错误级联。
假设第 2 轮四升到 0.83 并受可靠位置三指向,八升到 0.91。二者没有边,则都可进入 \(U_{\mathrm{anchor}}\) 并结束;若四和八仍有冲突,八因高阈值已进入 \(U_{\mathrm{anchor}}\),四作为其邻居会从 CBS 候选排除,留到第 3 轮。由此可见,冲突不是永久规定 2 个位置的先后,图与 confidence 会随上下文演化,算法每轮重新判断。
12. 它为什么不是 speculative decoding
标准 speculative decoding 让 draft model 生成连续前缀 A、B、C、D,target 从左到右验证,C 被拒后 D 也作废;借助 rejection sampling 可保持 target distribution。DAWN 没有 draft,也没有“验证另一个模型”的阶段。它在同一次 diffusion forward 后选择任意非连续 mask,例如位置 1、3、4、6,目标是决定哪些当前预测可 commit。
| 维度 | Speculative decoding | DAWN |
|---|---|---|
| 基础模型 | 自回归 LLM | masked diffusion LLM |
| 额外 draft | 通常需要 | 不需要 |
| 选择对象 | 连续前缀 | 任意 mask 位置 |
| 接受依据 | target 概率校正 | confidence + dependency graph |
| 分布保证 | 标准算法可严格保持 | 依靠经验质量结果,无严格等价保证 |
二者的共同点只有“1 次大模型计算推进多个 token”。DAWN 没有 draft/target 接受校正,核心机制是图调度,因此不宜把它称作 diffusion 版 speculative verification。
Speculative decoding 的 target verification 会计算 draft token 在 target 下的概率,并在第 1 个拒绝处纠正,因此加速依赖 acceptance length;DAWN 的当前 token 本来就来自同一个 target dLLM,没有另一个模型需要验证。它减少的是 denoising forward 数,不是把多个自回归 target step 合成 1 次。标准推测解码还要求接受前缀连续,因为 causal KV state 只能沿前缀复用;DAWN 允许非连续画布更新,是双向 masked 建模给出的自由。
分布保证差异带来评价差异。推测解码若实现标准校正,可以主要报告速度并检查数值一致;DAWN 必须把每个 benchmark 的任务准确率和速度一起报告,因为调度本身可能改变最终样本。开放式生成部署还应额外测长度、重复、多样性和人工偏好,不能用 4 个正确率 benchmark 代替所有质量维度。
13. 与 DiffusionGemma、DSB 的关系
从推理栈位置看,DiffusionGemma 这类 masked text diffusion backbone 负责给当前 canvas 产生 logits;DAWN 可以作为 position-commit policy 使用 confidence 与 attention 决定本轮更新集。但论文没有在 DiffusionGemma 上实验,只测试 LLaDA 与 Dream,因此只能说概念上匹配,不能说已经即插即用。
现实适配还取决于三点:运行时能否暴露需要的 attention statistics;DiffusionGemma 原生 sampler 的 block/self-conditioning 规则是否允许任意非连续位置提交;attention kernel 是否会 materialize 足够信息。若高性能 fused attention 只返回输出而不保留 L×L matrix,需要修改 kernel 或在线聚合统计,成本需重新测。
DSB 与 DAWN 都是 training-free dLLM inference scheduling,但粒度不同。DSB 动态移动 active block 左右边界,解决固定 block 被难 token 卡住;DAWN 在允许考虑的位置中,处理 anchor 与 pairwise conflict。理论上可先用 DSB 给 active region,再用 DAWN 选 region 内更新集,但 2 篇论文都没有验证组合,缓存、阈值和因果约束可能互相影响。
对 DiffusionGemma 的最小集成点应位于其原生采样循环中:保留 backbone、噪声日程、自条件输入和 block 规则,只替换每轮“根据 confidence 选哪些位置”的函数,并额外取得 attention statistics。若原生 sampler 会重新掩码已提交位置,或用与 LLaDA 不同的 confidence 校准,anchor 的永久性和阈值都要重新定义。DiffusionGemma 应作为独立实验对象重新测量,其结果与 LLaDA 上的 4.33× 分开报告。
14. 实验逐表阅读
实验在单张 NVIDIA H100 80GB 上,generation length 256、block length 32;attention 平均最后 4 层,\(\tau_{\mathrm{high}}=0.9\),其他 confidence threshold 在 0.7–0.85 范围。模型为 LLaDA-8B-Instruct、LLaDA-1.5、Dream-v0-Base-7B、Dream-v0-Instruct-7B;任务为 GSM8K 5-shot、MATH 4-shot、HumanEval 0-shot、MBPP 3-shot。baseline 包括 Original Top-1、Confidence、KLASS、LocalLeap。
| 模型 / 任务 | Original | Confidence | LocalLeap | DAWN |
|---|---|---|---|---|
| LLaDA-8B / GSM8K | 77.94 / 10.32 TPS | 78.39 / 33.44 | 77.33 / 44.19 | 77.94 / 44.72,4.33× |
| LLaDA-8B / MBPP | 29.60 / 9.46 | 30.00 / 34.81 | 30.80 / 44.13 | 30.80 / 45.17,4.77× |
| LLaDA-1.5 / MBPP | 38.80 / 3.45 | 38.80 / 20.40 | 39.20 / 27.00 | 37.60 / 27.80,8.06× |
| Dream-Base / HumanEval | 38.41 / 20.90 | 39.63 / 61.54 | 36.59 / 68.28 | 39.63 / 68.96,3.29× |
| Dream-Base / MBPP | 53.40 / 11.85 | 53.80 / 50.37 | 53.60 / 59.38 | 53.20 / 64.55,5.45× |
论文汇总的加速范围是 1.80–8.06×。但“preserving quality”应理解为大多数 benchmark 的准确率接近,而不是逐格无损:LLaDA-1.5/MBPP 从 38.80 降到 37.60;Dream-Base/GSM8K 也有一定下降。反过来,Dream-Base/HumanEval 相比 LocalLeap 同时提高准确率与 TPS。正确读法是 DAWN 给出更好的质量–速度 Pareto trade-off,而非 distribution-preserving 定理。
4 类 baseline 分别控制什么变量
Original 每轮提交最高 confidence 的 1 个位置,给出质量与 NFE 的保守参照。Confidence 允许超过固定阈值的位置并行,用来判断单靠概率校准能走多远。KLASS 同时考虑 confidence 与 KL divergence,代表更复杂但仍以位置统计为主的筛选。LocalLeap 也从 anchor 出发做局部放宽,是与 AGD 最接近的对手。DAWN 相对 LocalLeap 在多数格的 TPS 只多 0.05 到 5.17,同时准确率最多提高 3.04 个百分点;这比相对 Top-1 的巨大倍数更能隔离 dependency graph 与 conflict scheduling 的增量价值。
LLaDA-8B 的 GSM8K 中,Confidence 的准确率 78.39 略高于 DAWN 的 77.94,但速度 33.44 低于 44.72;LocalLeap 速度 44.19 已经很接近,DAWN 恢复了原始准确率。HumanEval 中 LocalLeap 109.80 TPS 略高于 DAWN 108.99,但准确率 39.63 低于 40.24。这些格子说明不存在所有指标都单调胜出的单一方法,论文结论是整体折中更好。
Dream-v0-Base 的 GSM8K 是较弱点:Original 76.42,DAWN 73.54,虽然速度从 14.37 升到 25.88。Dream-v0-Base 的 MATH 则 Original 34.70、DAWN 34.00,速度 18.16 到 51.45。部署者若把数学准确率下降视为不可接受,应提高低阈值或选择较保守设置,而不是直接套最大 TPS 参数。
为什么同一方法在不同任务的加速差很多
加速不只由模型大小决定,还由回答中可并行位置的结构决定。代码经常有括号、缩进、变量引用等局部强约束,一旦函数签名和语法骨架成为可靠锚点,多个后续位置可能提前稳定;数学推理则可能存在逐步依赖,后一步要等前一步数值确定,冲突图更密。不同任务的平均输出长度、提前结束比例和正确答案判定方式也会影响每秒 token 与准确率。因此 8.06× 是 LLaDA 1.5 在 MBPP 的特定组合,不是 DAWN 的固定算法常数。
模型训练方式也影响 confidence 校准和 attention 可解释性。LLaDA 与 Dream 即使参数规模接近,它们的初始化、训练目标和 shift 处理不同,同样的 0.9 阈值可能代表不同的真实正确率。DAWN 在 4 个模型上都获得速度收益,证明方法不是只适用于单一 checkpoint;准确率波动仍说明部署前必须以目标模型重新画质量与速度曲线,不能直接复制另一 模型的阈值。
任务准确率与生成质量的区别
GSM8K 和 MATH 通常从最终文本抽取答案,推导文字改变但数值相同仍算正确;HumanEval、MBPP 运行生成代码的测试,注释和写法差异不影响通过率。这些指标适合检查并行提交是否破坏任务结果,却看不到开放对话的语气、事实密度、重复和多样性。1 个 scheduler 可能让答案率保持不变,同时系统性偏好更高 confidence 的常见措辞,缩小样本分布。论文没有声称解决这一评价缺口,因而“质量保持”应限定在报告的任务指标。
还要区分平均准确率变化和逐样本一致性。DAWN 可能修正一些 Original 错误,同时把另一些正确样本改错,最终准确率恰好相同;这不表示 2 种 sampler 生成完全一致。若产品要求可重复或需要与旧系统逐请求比对,应额外记录 exact match、token 编辑距离和随机种子下的输出一致率,而不是只比较数据集平均分。
15. 消融说明了什么,方法在哪里失效
消融:Dependency Graph 是后两模块共同基础,论文主要去掉 AGD 或 CBS。在 LLaDA-8B/GSM8K 上,完整 DAWN 为 77.94 accuracy、44.72 TPS;去 AGD 为 76.80、22.31,吞吐近乎减半,说明 anchor threshold relaxation 是主要并行来源;去 CBS 为 78.47、33.83,准确率略升但速度下降,说明 CBS 以可控质量风险换取更多中低 confidence 并行。生成长度与 \(\tau_{\mathrm{low}}\) 的敏感性还表明阈值越低并行越大,图只能缓解而不能消除错误。
DAWN 把 position selection 改写成动态依赖图上的调度。已有方法只问“这个 token 自己够不够自信”;DAWN 还检查它是否有可靠 anchor,以及它是否与同轮候选冲突。Attention sink filtering、2 层接受条件和独立集调度缺一不可,拆开其中任一组件都不能代表完整方法。
边界:attention 不是统计因果,sink/edge/high/induced/low 多个阈值可能随模型、任务、长度漂移;attention map 的显式获取会增加显存访问,fused kernel 上尤其要重做工程评估。方法没有标准 speculative decoding 那种采样等价性。GSM8K/HumanEval 等最终准确率也不能完整衡量开放文本多样性、校准和长文一致性。最后,它只处理 nonindependent position prediction,不解决 bidirectional attention 与 KV-cache 的根本冲突。
长度与阈值敏感性应如何理解
回答变长时,Top-1 需要的 forward 近似随位置数增长,DAWN 的并行收益空间更大;但 attention 图节点和潜在边也增加,长程依赖与 sink 统计可能改变。论文用不同 generation length 检查 DAWN 相对 Original 的准确率与吞吐趋势,结论是在测试长度上仍持续加速,不能据此假定 1M token 仍有同样比例。
\(\tau_{\mathrm{low}}\) 越低,CBS 候选越多,图的漏边风险越直接转成错误提交;越高则 CBS 退化成接近 confidence baseline。\(\tau_{\mathrm{induced}}\) 决定 anchor 放宽幅度,\(\tau_{\mathrm{edge}}\) 决定 1 条注意联系是否足够强,二者联动:边阈值低会产生更多 induced 与 conflict,前者提高 AGD 接受,后者压低 CBS 接受,不一定单调增速。复现时应 1 次只改变一项并同时记录平均每轮提交数、图边数、NFE、TPS 和准确率,单看最终 TPS 无法定位机制。
没有被解决的 KV-cache 问题
自回归模型的已提交前缀不再受未来 token 影响,K/V 可永久缓存;dLLM 双向 attention 下,其他位置从 mask 变成 token 后,旧位置表示可能改变。DAWN 负责减少 denoising 次数;cache consistency 则由 Fast-dLLM 等 block/cache 路径另行处理。表中速度对应论文指定实现的整体结果,图选择与 cache 优化应分项测量。
生产系统该如何选择阈值
可以从保守配置开始:固定高阈值为论文使用的 0.9,先关闭 CBS,只开启经过 sink 清洗的 anchor 放宽;在目标验证集上确认准确率与 Original 接近后,再逐步降低 induced 阈值。随后开启 CBS,从较高的低阈值开始,每次只下降一小档,观察每轮额外提交数是否真的降低函数调用次数。若边数突然增大、独立集反而缩小,应先检查 attention 阈值和 sink,而不是继续降 confidence。
线上还应设置质量保护和回退。对结构约束很强的输出,可以在提交前加入语法检查;对高风险请求,可选择 Original 或只开 AGD;当图统计偏离离线分布,例如 sink 数或平均度异常时,回退 confidence sampler。这样的保护不是论文核心算法,却是把经验质量保证用于服务时必要的边界控制。
16. 复现清单与结论边界
模型、任务与硬件
首先固定论文的 4 个模型变体、lm-eval 任务模板、few-shot 数、回答长度 256 和 block length 32;单张 H100 80GB 上分别跑 Original、Confidence、KLASS、LocalLeap 与 DAWN。所有方法应使用相同 prompt、最大长度、精度、batch 和计时区间。TPS 要包含 attention 统计、构图与调度,首次编译和模型加载应与稳态生成分开记录。
算法核对
实现应检查五件事:聚合最后 4 层全部头;矩阵边方向从 key 指向 query;对角线不建边;sink 只从 dependency proxy 过滤而不改变模型输入;CBS 先移除 \(U_{\mathrm{anchor}}\) 及其邻居,再按 confidence 贪心。用 8 位置例子写确定性测试,确认最终集合为 1、2、3、5、6、7,并检查下一轮会重新 forward 而非沿用旧预测。
必须记录的中间指标
除准确率和 TPS 外,还应记录 NFE、每轮 AGD 与 CBS 各选择多少位置、平均图边数、sink 数、attention statistics 的显存和耗时。消融分别关闭 AGD 与 CBS;阈值实验保持其余参数不变。若只有最终速度,很难判断加速来自真正更多安全并行,还是计时漏掉 attention materialization。
最终结论
从系统角度看,它是一套每轮重算证据、再做受约束批量提交的在线规则;从算法角度看,它用廉价的关系代理近似原本难以直接求出的联合依赖。
DAWN 把 masked diffusion 解码从逐位置 confidence 筛选提升为依赖图调度。极高 confidence 位置按保守规则提交;被可靠 anchor 条件化的位置用较低门限提前提交;剩余候选只从冲突图的贪心独立集中提交。它以可用的 attention 代理换取一到 8× 量级的实测加速范围,质量通常接近原 sampler,但没有严格分布保证,也没有消除 attention 获取、阈值迁移和 KV-cache 一致性成本。把这些边界与实验逐格结果一起保留,才是对论文结论的完整理解。