DeepCache
定义
DeepCache 是一种针对扩散模型的无训练加速方法,它从模型架构的角度入手,通过在连续去噪步骤之间缓存并检索特征,减少重复的前向计算[1]。其做法利用了 U-Net 的结构特点:在部分步骤中直接复用上一步得到的高层特征,只以较低成本重新计算浅层特征,从而降低每一步的推理开销[1]。
该方法属于无需额外训练的一类加速方案,与需要再训练的剪枝、蒸馏方法形成区别,同时可与现有的采样器配合使用[1]。
原理
扩散模型的推理依赖对同一网络进行多次顺序去噪,每个时间步都要完整执行一次前向计算,这构成主要的计算瓶颈。论文通过对比相邻时间步的中间特征发现,深层特征在相邻步骤间变化幅度有限:对每个时间步,至少有 10% 的其他时间步与它的相似度高于 0.95;在 LSUN 数据集的 DDPM 实验中,某些时间步与多达 80% 的其他步骤高度相似。
U-Net 由下采样块、上采样块以及连接二者的跳跃路径组成,主分支输出经过处理的高层特征,跳跃分支则把相对更浅层的特征直接送到对应位置,两路在拼接模块汇合。DeepCache 把缓存单位定在跳跃分支上:在第 $i$ 个时间步,若判定需要执行完整计算,则正常前向并保存所选分支的输出;若判定为复用步骤,则跳过被缓存分支的计算,直接使用最近一次保存的特征。
整个过程可以概括为下图所示的两类步骤交替。
flowchart LR
A[输入潜变量 x_t] --> B{是否缓存步骤}
B -- 是 --> C[完整前向:主分支 + 跳跃分支]
C --> D[保存所选跳跃分支特征]
B -- 否 --> E[仅计算主分支]
D --> F[拼接并输出 x_{t-1}]
E --> F
F --> A
实现上通过两个超参数控制权衡:cache_interval 指每缓存一次之间间隔的步数,cache_branch_id 指执行缓存的分支编号(由浅至深排序);分支编号越小或间隔越大,速度提升越明显,但图像质量下降也越多[2]。
发展历程
DeepCache 的论文在 2023 年 12 月以预印本形式公开,作者为新加坡国立大学学习与视觉实验室的 Ma Xinyin、Fang Gongfan 与 Wang Xinchao[3][4]。
随后开源仓库陆续发布适配不同模型的代码:2023 年 12 月 6 日提供 Stable Diffusion XL 版本(约 2.6 倍加速),12 月 20 日提供 DDPM 版本,12 月 21 日提供 Stable Video Diffusion 与 Text2Video-Zero 版本(SVD-XT 上约 1.7 倍加速),12 月 26 日发布无需改动管线代码的即插即用实现[3]。
2024 年 1 月,Hugging Face 的 Diffusers 库新增 DeepCache 文档页,使其成为该库中的标准优化选项之一[3][2]。同年 6 月,论文被 IEEE/CVF 计算机视觉与模式识别会议(CVPR 2024)收录,页码为 15762–15772[1]。
由于原始方法针对 U-Net 结构设计,作者团队进一步提出面向扩散 Transformer 的改进方案 Learning-to-Cache,通过可微搜索决定各时间步缓存的层,该工作在 2024 年被 NeurIPS 接收[5][6]。
应用
在图像生成方面,开源实现覆盖 Stable Diffusion、Stable Diffusion XL 以及图生图、图像修补等管线,并可与 DDIM、PLMS 等采样算法组合使用[3]。据 Hugging Face 文档在 NVIDIA RTX A5000 上使用 50 步推理的测试,加速 Stable Diffusion v2.1 时,512 分辨率、批大小为 8 的情况下,原管线耗时 15.96 秒,采用间隔为 5、分支为 0 的配置后降至 5.03 秒,约为 3.18 倍;1024 分辨率下则由 101.95 秒降至 33.72 秒,约 3.02 倍[2]。
在视频生成方面,该方法被用于 Stable Video Diffusion 与 Text2Video-Zero,SVD-XT 上报告约 1.7 倍加速[3]。在工程实践中,它被归入模型缓存这一加速路线,常与算子优化、模型编译、模型蒸馏等手段并列比较和组合使用[7]。
在学术研究中,DeepCache 也作为模块级缓存组件被后续工作复用。例如 ICCV 2025 的 PostDiff 框架将 DeepCache 与交叉注意力缓存结合,用于在步间复用 U-Net 深层跳跃分支的计算[8]。
局限
速度与质量之间存在取舍。降低缓存分支编号或增大缓存间隔能够进一步提速,但生成图像的保真度会相应下降,实际使用需要在二者之间自行权衡[2]。因此方法虽被作者描述为几乎无损,但仍存在可测量的质量损失,例如 Stable Diffusion v1.5 上 CLIP 分数下降 0.05、LDM-4-G 上 FID 上升 0.22[1]。
方法的效果依赖特征冗余在相邻时间步中的实际分布。当步数被压缩得很少,相邻步骤之间的特征差异增大,可复用的部分减少,加速空间随之收窄[8]。
原始设计建立在 U-Net 的跳跃连接结构上,并不直接适用于扩散 Transformer 一类架构;后续的 Learning-to-Cache 正是为弥补这一点而提出,通过训练一个路由来决定各时间步保留哪些层[5][6]。这类缓存方法的加速上限还受“一次完整计算加一次廉价计算”交替结构的约束[9]。
参见
参考资料
- thecvf.com 上的网页 [引用日期2026-10-29]
- DeepCache · Hugging Face [引用日期2026-10-29]
- DeepCache [引用日期2026-10-29]
- DeepCache: Accelerating Diffusion Models for Free [引用日期2026-10-29]
- f0b1515be276f6ba82b4f2b25e50bef0-Abstract-Conference [引用日期2026-10-29]
- learning-to-cache [引用日期2026-10-29]
- diffusers SD推理加速方案的调研实践总结(1) [引用日期2026-10-29]
- github.com 上的网页 [引用日期2026-10-29]
- f0b1515be276f6ba82b4f2b25e50bef0-Paper-Conference(PDF) [引用日期2026-10-29]