Denoising as Path Planning: Training-Free Acceleration of Diffusion Models with DPCache¶
会议: CVPR 2026
arXiv: 2602.22654
代码: https://github.com/argsss/DPCache
领域: 扩散模型
关键词: 扩散模型加速, 特征缓存, 动态规划, 路径规划, training-free
一句话总结¶
将扩散模型采样加速形式化为全局路径规划问题,通过构建路径感知代价张量 (PACT) 并使用动态规划选择最优关键时间步序列,实现 training-free 的 4.87× 加速且生成质量超越全步基线。
研究背景与动机¶
-
领域现状:扩散模型(特别是 DiT 架构)在图像和视频生成中取得了巨大成功,但多步迭代采样带来的巨大计算开销严重阻碍了实际部署。缓存方法作为 training-free 的加速方案备受关注——核心思路是复用或预测相邻时间步之间高度相似的中间特征。
-
现有痛点:现有缓存方法存在两个根本问题:(1) 固定调度策略(如 DeepCache)不考虑局部特征动态,在关键过渡区域造成严重偏差;(2) 局部自适应策略(如 TeaCache、SpeCa)做贪心的短视决策,可能跳过关键时间步,导致不可逆的轨迹漂移和误差累积。
-
核心矛盾:缓存加速中的关键决策——"在哪些时间步做完整计算、在哪些时间步用缓存预测"——本质上是一个全局优化问题,但现有方法都只在局部做出这个决策,完全忽略了去噪轨迹的全局结构。
-
本文目标 设计一种全局最优的采样调度策略,使得在给定计算预算(K 步)下,选出的关键时间步序列能最小化整条去噪轨迹的总偏差。
-
切入角度:作者观察到去噪轨迹的形状在很大程度上与生成内容无关,主要由扩散模型本身决定。因此可以在少量校准样本上预计算最优调度,然后应用到任意输入。
-
核心 idea:将扩散采样加速重新表述为路径规划问题,用 3D 路径感知代价张量捕捉跳步误差的路径依赖性,再用动态规划精确求解全局最优调度。
方法详解¶
整体框架¶
DPCache 想回答缓存加速里最核心却一直被局部处理的那个问题:在 T 步去噪里,到底该在哪几步老老实实做完整前向、哪几步直接用缓存特征预测,才能在固定预算下让整条轨迹偏差最小。它把这个决策从"逐步贪心"抬升到"全局规划",整条流水线分三段。先是校准:拿约 10 个样本跑满 T 步去噪,把所有时间步的中间特征都缓存下来,据此算出一个路径感知代价张量 PACT,把"从某一步跳到另一步会引入多大误差"全部预先量化。接着是最优调度选择:给定目标步数 \(K < T\),用动态规划在 PACT 上挑出一条总路径代价最小的关键时间步序列 \(\mathcal{T}\)。最后是推理:真正生成时只在 \(\mathcal{T}\) 里的时间步做完整前向并缓存,其余步用 Taylor 展开等方法从缓存特征预测输出。关键在于调度只需在校准期算一次,之后任意输入都直接复用同一份 \(\mathcal{T}\)。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["内容无关的校准<br/>约 10 个样本跑满 T 步,缓存全部中间特征"] --> B["路径感知代价张量 PACT<br/>3D 张量预先量化每种跳步的路径依赖误差"]
B --> C["动态规划求全局最优调度<br/>给定预算 K,回溯出总代价最小的关键步序列 T*"]
C --> D["推理:仅在 T* 的步做完整前向并缓存<br/>其余步用 Taylor 展开从缓存特征预测"]
D --> E["training-free 加速生成结果"]
关键设计¶
1. 路径感知代价张量 PACT:让跳步误差带上"前因"
现有缓存方法用一个 2D 代价矩阵衡量"从 \(j\) 跳到 \(k\) 损失多大",但这忽略了一个事实——预测出的特征依赖于之前缓存的是哪一步的状态,跳步误差是有路径依赖的。DPCache 因此把代价升成 3D 张量 \(\mathcal{C} \in \mathbb{R}^{(T+1) \times (T+1) \times (T+1)}\),\(\mathcal{C}[i,j,k]\)(\(i>j>k\))表示"在上一个关键时间步是 \(i\) 的前提下,从 \(j\) 跳到 \(k\)"所累积的误差。它不是只看终点偏差,而是把这一跳跨过的每个中间步的预测偏差都加起来:
这个累积形式让大跨度跳步天然地承担更高代价——一步跨得越远、跨过的中间预测越多,攒下的偏差就越大,于是那些看着局部省事、实则把轨迹带歪的大跳步会被自动惩罚。多出来的那一维 \(i\) 正是 2D 矩阵丢掉的"前因",没有它,调度优化只能基于不准确的误差估计来选步。
2. 动态规划求全局最优调度:在指数空间里精确求解
选出 \(K\) 个关键步的组合数是指数级的,贪心或启发式都只能逼近。DPCache 注意到 PACT 已经把"每一跳带前一关键步条件的代价"都备好了,这正好是一个最短路径式的序列决策问题,可以用动态规划精确求解。它维护代价表 \(D[m,k]\)(用 \(m\) 个关键步走到时间步 \(k\) 的最小累积代价)和回溯表 \(P[m,k]\),递推为
注意递推里取代价时用了 \(P[m-1,j]\),也就是上一关键步——这一步正好把 PACT 的路径依赖维度接了进去。同时强制前 \(M=3\) 个时间步必须入选,保护早期那段决定大结构的关键去噪动态不被跳过。整体复杂度 \(O(KT^2)\)、空间 \(O(KT)\),对 \(K<T=50\) 的典型设置开销可忽略,且只在校准期跑一次。打个比方,给 \(T=50\)、\(K=9\),DP 会从 50 个候选步里回溯出形如"0,1,2 必选 + 后续 6 个最省代价的步"的序列,而不是像固定调度那样每隔几步硬切一刀。
3. 内容无关的校准:一次预计算,处处复用
前两步要成立,前提是这份在少量样本上算出的调度能泛化到任意输入。作者的依据是一个经验观察:去噪轨迹的形状主要由扩散模型本身决定,跟具体生成什么内容关系不大。于是校准只需约 10 个随机样本——实验里甚至只用 1 个样本,得到的调度序列和生成质量都几乎一样;连把校准用的 prompt 数据集从 DrawBench 换成 PartiPrompts,选出的关键步也不变。这把校准开销压到了一次性、可忽略的量级,实际部署时无需为每个新 prompt 重新规划。
损失函数 / 训练策略¶
DPCache 完全 training-free。校准阶段只跑标准前向推理收集特征,不涉及任何梯度或参数更新。预测步骤与具体缓存预测方法解耦,可直接套用 TaylorSeer 的 Taylor 展开、HiCache 的 Hermite 多项式等,默认用 2 阶 Taylor 预测——也就是说 DPCache 只负责"何时预测",把"预测什么"留给现成方法。
实验关键数据¶
主实验(FLUX.1-dev, DrawBench)¶
| 方法 | 加速比 | ImageReward↑ | CLIP Score↑ | PSNR↑ | SSIM↑ |
|---|---|---|---|---|---|
| 50 steps (baseline) | 1.00× | 0.979 | 17.40 | - | - |
| DPCache (K=13) | 3.54× | 1.007 | 17.34 | 21.65 | 0.8106 |
| DPCache (K=9) | 4.87× | 0.958 | 17.33 | 18.77 | 0.7117 |
| TeaCache (对标K=13) | 3.42× | 0.934 | 17.17 | 16.31 | 0.6812 |
| TaylorSeer (对标K=13) | 3.51× | 0.939 | 17.31 | 16.95 | 0.6922 |
| SpeCa (对标K=13) | 3.62× | 0.975 | 17.27 | 18.35 | 0.6773 |
HunyuanVideo (VBench)¶
| 方法 | 加速比 | VBench Score↑ | PSNR↑ | 内存(GB) |
|---|---|---|---|---|
| 50 steps | 1.00× | 80.93 | - | 60.22 |
| DPCache (K=11) | 4.05× | 80.35 | 23.11 | 60.58 |
| DPCache (K=9) | 4.75× | 80.23 | 21.04 | 60.58 |
| TaylorSeer | 3.87× | 80.33 | 18.53 | 84.47 |
| SpeCa | 4.05× | 80.26 | 20.09 | 84.47 |
消融实验 (PACT, FLUX K=13)¶
| 代价维度 | 累积误差 | ImageReward↑ | PSNR↑ | SSIM↑ |
|---|---|---|---|---|
| 2D | ✘ | 1.001 | 20.87 | 0.7881 |
| 2D | ✔ | 0.977 | 19.46 | 0.7605 |
| 3D | ✘ | 0.998 | 21.05 | 0.7952 |
| 3D | ✔ | 1.007 | 21.65 | 0.8106 |
关键发现¶
- 超越全步基线:在 FLUX 上 3.54× 加速时 ImageReward 不降反升 (+0.028),4.87× 加速时仍大幅优于其他方法 (+0.031)。这说明全局最优调度实际上"净化"了原始轨迹中的冗余步。
- PACT 的 3D 路径依赖性至关重要:3D+累积误差相比 2D 在 PSNR 上提升 0.78,证实路径依赖建模的必要性。但 2D+累积误差反而最差(0.977),因为 2D 的误差估计本身不准确,累积后会误导调度选择。
- 校准极其鲁棒:1 个样本就能得到竞争力结果,不同数据集之间的调度方案完全一致——去噪轨迹形状确实与内容无关。
- 内存优势明显:DPCache 仅缓存最后一层特征,在 HunyuanVideo 上仅增加 0.36GB,而 TaylorSeer/SpeCa 需要缓存所有层,增加 24.25GB。
亮点与洞察¶
- 将采样加速重新表述为路径规划问题是本文最关键的贡献。这不仅仅是换了个框架,而是揭示了"固定/局部调度 → 全局调度"带来的质的飞跃——PSNR 提升 2-5 dB,SSIM 提升 0.1+。这个路径规划视角可以迁移到任何涉及序列决策的加速场景中。
- 用极少校准样本即可泛化的发现非常实用——说明去噪轨迹的全局结构是模型的固有属性而非数据属性,为一次性预计算打下理论基础。
- 3D 代价张量 vs 2D 代价矩阵的对比消融设计精妙,清楚地证明了路径依赖性不能被忽略。
局限与展望¶
- 当前 PACT 的构建复杂度为 \(O(T^3)\),对于步数很多的模型(T >> 50)可能成为瓶颈,虽然只需一次性计算。
- 方法假设去噪轨迹形状与内容无关,但在极端分布外的 prompt 下是否仍成立值得进一步验证。
- 仅缓存最后一层特征;如果在不同层使用不同的调度策略(层级自适应调度),可能进一步提升性能。
- 与步数蒸馏(如 DMD、一致性模型)等训练方法的结合尚未探索,两者可能互补。
相关工作与启发¶
- vs DeepCache: DeepCache 使用固定间隔的缓存策略,不考虑不同时间步的重要性差异,DPCache 通过全局优化自动识别关键时间步。
- vs TeaCache: TeaCache 的局部自适应策略虽比固定策略好,但贪心决策会跳过关键步导致不可逆漂移,DPCache 的全局视角彻底解决了这个问题。
- vs TaylorSeer: TaylorSeer 提出了基于 Taylor 展开的特征预测,DPCache 直接复用其预测方法但替换了调度策略,证明"预测什么"不如"何时预测"重要。
评分¶
- 新颖性: ⭐⭐⭐⭐ 路径规划视角新颖,PACT 的 3D 设计有理论深度
- 实验充分度: ⭐⭐⭐⭐⭐ 三个模型(DiT/FLUX/HunyuanVideo)、三个任务、完整消融,压倒性地优于所有基线
- 写作质量: ⭐⭐⭐⭐ 逻辑清晰,图示直观,算法描述规范
- 价值: ⭐⭐⭐⭐⭐ 即插即用的 training-free 加速框架,兼顾效率与质量,实用性极强