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× 推理加速同时提升生成质量。
研究背景与动机¶
- 领域现状:基于扩散的 LLM(dLLM,如 LLaDA、Dream)通过迭代去噪生成文本,使用双向注意力,在推理和指令遵循任务上与自回归模型(ARM)竞争。
- 现有痛点:dLLM 使用双向注意力,每步更新任何一个 masked token 都会改变所有 token 的上下文,导致标准 KV cache 完全不可用——每步都需重算整个序列的 KV 状态。现有近似 KV cache 方法(dLLM-Cache、Fast-dLLM)是粗粒度的,将序列分为静态/动态两段,用固定更新窗口,灵活性不足或调参复杂。
- 核心矛盾:dLLM 的双向注意力机制带来了上下文建模优势,但也牺牲了 ARM 的天然 KV cache 加速能力。如何在不破坏生成质量的前提下恢复缓存加速?
- 本文要解决什么? 设计细粒度的、自适应的 KV cache 策略,精确识别每步真正需要更新 KV 的 token。
- 切入角度:精细分析发现 masked token 的 KV 状态经历三个阶段(缓变→剧变→稳定),只需在剧变阶段更新;prompt/decoded token 的注意力高度集中,只需更新高注意力 token。
- 核心idea一句话:双阶段细粒度 token 选择——Stage 1 按确定性先验选 masked token,Stage 2 按注意力分数选剩余 token——每步只更新少量关键 token 的 KV,其余缓存复用。
方法详解¶
整体框架¶
dLLM 从全 mask 序列出发,经 \(T\) 步迭代去噪生成文本。d²Cache 在每步将 token 分为三类(prompt/masked/decoded),通过两阶段策略选出需要更新 KV 的少量 token 子集,其余 token 的 KV 从上一步缓存复用,大幅减少每步计算量。
关键设计¶
- KV 状态三阶段分析(核心观察):
- 做什么:通过 PCA 可视化 masked token 的 KV 轨迹,发现三个不同相位
- 核心发现:(1) 早期缓变——远离被解码位置,KV 变化小;(2) 临近剧变——即将被解码的 token KV 急剧变化;(3) 解码后稳定——已解码 token KV 几乎不变
-
设计动机:只需在剧变阶段更新 KV,其他阶段安全缓存
-
Stage 1: 确定性先验引导选择 (Certainty Prior-Guided Selection):
- 做什么:从 masked token 中选出即将被解码的子集,更新其 KV
- 核心思路:定义位置感知确定性密度 \(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
-
设计动机:实验发现 90% 的 token 在距上一个解码位置 10 步以内被解码,确定性密度是预测"即将被解码"的良好指标
-
Stage 2: 注意力感知选择 (Attention-Aware Selection):
- 做什么:从 prompt 和 decoded token 中选出高注意力的子集更新 KV
- 核心思路:使用 Attention Rollout 算法递归聚合各层注意力矩阵 \(C^{(l)} = W^{(l)} \cdot C^{(l-1)}\),得到全局影响力分数 \(c_j = \sum_i C_{ij}^{(N)}\),按影响力排序选累积概率超过阈值 \(p\) 的最小 token 集合
-
设计动机:分析发现 dLLM 的注意力同样高度集中在少数 salient token 上(与 ARM 类似),低注意力 token 的 KV 更新对结果影响极小
-
确定性先验引导的解码(副产品):
- 做什么:用确定性先验而非纯置信度决定解码顺序
- 核心思路:确定性高的 token(靠近已解码区域)优先被解码,实现准从左到右的生成
- 设计动机:缓解 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× 加速+质量提升很有实用价值