跳转至

d²Cache: Accelerating Diffusion-Based LLMs via Dual Adaptive Caching

会议: ICLR 2026
arXiv: 2509.23094
代码: https://github.com/Kamichanw/d2Cache
领域: LLM效率
关键词: Diffusion LLM, KV Cache, 推理加速, dLLM, 注意力剪枝

一句话总结

提出 d²Cache,一种面向 Diffusion-based LLM(dLLM)的无训练近似 KV 缓存框架,通过确定性先验引导的 masked token 选择 + 注意力感知的非 mask token 选择两阶段策略,实现 4.1× 推理加速同时提升生成质量。

研究背景与动机

  1. 领域现状:基于扩散的 LLM(dLLM,如 LLaDA、Dream)通过迭代去噪生成文本,使用双向注意力,在推理和指令遵循任务上与自回归模型(ARM)竞争。
  2. 现有痛点:dLLM 使用双向注意力,每步更新任何一个 masked token 都会改变所有 token 的上下文,导致标准 KV cache 完全不可用——每步都需重算整个序列的 KV 状态。现有近似 KV cache 方法(dLLM-Cache、Fast-dLLM)是粗粒度的,将序列分为静态/动态两段,用固定更新窗口,灵活性不足或调参复杂。
  3. 核心矛盾:dLLM 的双向注意力机制带来了上下文建模优势,但也牺牲了 ARM 的天然 KV cache 加速能力。如何在不破坏生成质量的前提下恢复缓存加速?
  4. 本文要解决什么? 设计细粒度的、自适应的 KV cache 策略,精确识别每步真正需要更新 KV 的 token。
  5. 切入角度:精细分析发现 masked token 的 KV 状态经历三个阶段(缓变→剧变→稳定),只需在剧变阶段更新;prompt/decoded token 的注意力高度集中,只需更新高注意力 token。
  6. 核心idea一句话:双阶段细粒度 token 选择——Stage 1 按确定性先验选 masked token,Stage 2 按注意力分数选剩余 token——每步只更新少量关键 token 的 KV,其余缓存复用。

方法详解

整体框架

dLLM 从全 mask 序列出发,经 \(T\) 步迭代去噪生成文本。d²Cache 在每步将 token 分为三类(prompt/masked/decoded),通过两阶段策略选出需要更新 KV 的少量 token 子集,其余 token 的 KV 从上一步缓存复用,大幅减少每步计算量。

关键设计

  1. KV 状态三阶段分析(核心观察):
  2. 做什么:通过 PCA 可视化 masked token 的 KV 轨迹,发现三个不同相位
  3. 核心发现:(1) 早期缓变——远离被解码位置,KV 变化小;(2) 临近剧变——即将被解码的 token KV 急剧变化;(3) 解码后稳定——已解码 token KV 几乎不变
  4. 设计动机:只需在剧变阶段更新 KV,其他阶段安全缓存

  5. Stage 1: 确定性先验引导选择 (Certainty Prior-Guided Selection):

  6. 做什么:从 masked token 中选出即将被解码的子集,更新其 KV
  7. 核心思路:定义位置感知确定性密度 \(D(i) = \sum_{j \notin M} \exp(-|i-j|^2 / 2\sigma^2)\),衡量每个 masked token 周围已知 token 的密度。密度越高说明越快被解码(因为 dLLM 倾向于从已解码位置附近解码下一个 token)。最终选分 \(D(i) \cdot s^i\)(确定性先验 × 预测置信度)top-\(k\) 的 masked token
  8. 设计动机:实验发现 90% 的 token 在距上一个解码位置 10 步以内被解码,确定性密度是预测"即将被解码"的良好指标

  9. Stage 2: 注意力感知选择 (Attention-Aware Selection):

  10. 做什么:从 prompt 和 decoded token 中选出高注意力的子集更新 KV
  11. 核心思路:使用 Attention Rollout 算法递归聚合各层注意力矩阵 \(C^{(l)} = W^{(l)} \cdot C^{(l-1)}\),得到全局影响力分数 \(c_j = \sum_i C_{ij}^{(N)}\),按影响力排序选累积概率超过阈值 \(p\) 的最小 token 集合
  12. 设计动机:分析发现 dLLM 的注意力同样高度集中在少数 salient token 上(与 ARM 类似),低注意力 token 的 KV 更新对结果影响极小

  13. 确定性先验引导的解码(副产品):

  14. 做什么:用确定性先验而非纯置信度决定解码顺序
  15. 核心思路:确定性高的 token(靠近已解码区域)优先被解码,实现准从左到右的生成
  16. 设计动机:缓解 dLLM 中序列末尾 token 过早过度自信的问题

损失函数 / 训练策略

d²Cache 是完全无训练的推理加速框架,不修改模型参数。所有优化在推理时在线完成。

实验关键数据

主实验

LLaDA-8B-Instruct (GSM8K, 4-shot):

方法 吞吐量 延迟 准确率
Vanilla 2.77 (1.0×) 110.26s 77.6
dLLM-Cache 8.29 (3.0×) 30.34s 76.8
Fast-dLLM 9.64 (3.5×) 26.15s 77.0
d²Cache 11.39 (4.1×) 22.41s 79.2

加速 4.1× 的同时准确率反而提升 1.6%!

消融实验

配置 加速比 质量 说明
Full d²Cache 4.1× 两阶段完整
仅 Stage 1 ~3× 缺少 prompt/decoded token 选择
仅 Stage 2 ~2.5× 缺少 masked token 的高效选择
确定性先验解码 - ↑↑ 使用确定性先验替代置信度解码,质量提升更大

关键发现

  • d²Cache 在两个 dLLM(LLaDA、Dream)上一致有效,且同时提升速度和质量——这在加速方法中非常罕见
  • 确定性先验解码比默认置信度解码生成质量更高,因为它实现了准从左到右的、更结构化的生成顺序
  • 90% token 在距前一个解码位置 10 步内被解码的发现,揭示了 dLLM 虽然理论上支持任意顺序解码,但实践中呈现强局部性
  • 注意力在 prompt 和已解码 token 上高度集中的发现可直接迁移到其他 dLLM 加速研究

亮点与洞察

  • 加速+质量双赢:通过确定性先验引导解码顺序,不仅加速推理,还缓解了 dLLM 的过早过度自信问题,使得生成质量提升。"好的缓存策略 = 好的解码策略"是一个深刻洞见。
  • 精细粒度分析价值:三阶段 KV 动态分析为整个 dLLM 推理优化领域提供了基础性认知,后续工作可基于此设计更多优化策略。
  • 无训练即插即用:不需要重新训练模型,直接在推理时应用。适配新的 dLLM 只需运行 Attention Rollout 分析。

局限性 / 可改进方向

  • Attention Rollout 本身有 \(O(NL^2)\) 计算开销,虽然比全量前向传播便宜但不可忽略
  • 确定性先验的高斯核宽度 \(\sigma\) 和阈值 \(p\) 是超参数,不同任务可能需要调整
  • 仅在 LLaDA 和 Dream 上验证,dLLM 生态仍在早期,方法是否对未来更大的 dLLM 有效尚需验证
  • 未探索与量化/稀疏等其他推理加速技术的组合

相关工作与启发

  • vs dLLM-Cache: 粗粒度的 prompt/response 分段策略 + 固定频率更新,d²Cache 的细粒度 token 级自适应策略更灵活高效
  • vs Fast-dLLM: 块级半自回归解码 + 缓存整块 KV,灵活性不如 d²Cache 的 per-token 策略
  • vs ARM KV Cache 剪枝: d²Cache 将 ARM 中的注意力集中性观察成功推广到 dLLM 的双向注意力场景

评分

  • 新颖性: ⭐⭐⭐⭐ dLLM KV cache 方向还很新,细粒度分析和双阶段策略设计扎实
  • 实验充分度: ⭐⭐⭐⭐ 两个 dLLM + 多数据集 + 消融,但缺少更大规模验证
  • 写作质量: ⭐⭐⭐⭐⭐ 分析驱动的方法设计逻辑清晰,可视化优秀
  • 价值: ⭐⭐⭐⭐ dLLM 推理加速是当前热点,4.1× 加速+质量提升很有实用价值