给原生的 Stable Diffusion 模型按个涡轮发动机——DeepCache

AI绘图虽然模型种类繁多,但是一直存在一个缺点就是不够快。以至于Stability公司专门做了Turbo系列和Cascade版本。但是这些终究治标不治本,终于在CVPR2024收入中,我觉得DeepCache是一次不错的尝试。

论文

《DeepCache: Accelerating Diffusion Models for Free》

摘要

扩散模型因其卓越的生成能力,最近在图像合成领域获得了前所未有的关注。尽管这些模型性能出众,但通常会产生大量的计算成本,这主要归因于顺序去噪过程和繁琐的模型大小。压缩扩散模型的传统方法通常涉及大量的再训练,带来了成本和可行性方面的挑战。在本文中,我们介绍了 DeepCache,一种从模型架构角度加速扩散模型的新型免训练范式。DeepCache 利用扩散模型顺序去噪步骤中固有的时间冗余,缓存并检索相邻去噪阶段的特征,从而减少冗余计算。利用 U-Net 的特性,我们在重复使用高级特征的同时,还能以非常低廉的成本更新低级特征。这一创新策略反过来又使稳定扩散 v1.5 的速度提高了 2.3 倍,而 CLIP 分数仅下降了 0.05;使 LDM-4-G 的速度提高了 4.1 倍,而 ImageNet 上的 FID 仅略微下降了 0.22。我们的实验还证明,DeepCache 优于需要重新训练的现有剪枝和蒸馏方法,而且与当前的采样技术兼容。此外,我们还发现,在相同的吞吐量下,DeepCache 能有效地实现与 DDIM 或 DDIM 相似甚至略有改进的结果。

部署

pip install DeepCache

代码

import torch# Loading the original pipeline
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained('runwayml/stable-diffusion-v1-5', torch_dtype=torch.float16).to("cuda:0")# Import the DeepCacheSDHelper
from DeepCache import DeepCacheSDHelper
helper = DeepCacheSDHelper(pipe=pipe)
helper.set_params(cache_interval=3,cache_branch_id=0,
)
helper.enable()# Generate Image
deepcache_image = pipe(prompt,output_type='pt'
).images[0]
helper.disable()

测试

我用sdxl base 1.0 + 4090

无cache
Total runtime of the program is 7.61311936378479
有cache
Total runtime of the program is 3.8023335933685303

结语

如果用在中低端显卡估计推理效果更为显著吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI 文献综述工具

find sources that support this statement:

Redis入门(常用命令、spring-boot-starter-data-redis)

Redis redis是一个基于内存的key-value的结构数据库 启动: redis-server.exe redis.windows.conf 客户端链接:redis-cli.exe [-h 目标ip] [-p 端口] [-a 密码] 修改链接密码: 在redis.windows.conf中的requirepass 123456 常用的数据类…

前端三剑客 —— JavaScript (第八节)

目录 内容回顾: 事件对象 事件对象 事件对象的方法和属性 案例-移动DIV 案例-图片轮换 Ajax 内容回顾: 事件对象 1.1 什么是事件驱动 1.2 事件绑定 事件源:发生事件的源对象 事件对象:它包含了事件所有的信息,它…

兼容性测试用例

备注:本文为博主原创文章,未经博主允许禁止转载。如有问题,欢迎指正。 个人笔记(整理不易,有帮助,收藏+点赞+评论,爱你们!!!你的支持是我写作的动力) 笔记目录:学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔:工作总结随笔_8、…

01-shell基础入门

一、Shell是什么? shell可以理解为连接用户和操作系统内核的接口,将用户命令编译成操作系统能够执行的指令传给内核。目前有多种shell实现 常用的Shell 一般在linux系统中,常见的shell有/bin/sh、/bin/bash等,它们代表我们的命…

ESP32 S3音频开发

1. 音频硬件框架 2. 音频软件框架

Golang教程六(单元测试,反射,网络编程,部署)

目录 一、单元测试 单元测试 子测试 TestMain 二、反射 类型判断 通过反射获取值 通过反射修改值 结构体反射 利用tag修改结构体的某些值 调用结构体方法 orm的一个小案例 对反射的一些建议 三、网络编程 socket编程 websocket编程 四、部署 打包命令 交叉编译…

[攻防世界]Reversing-x64Elf-100

1.查壳 无壳,ELF文件 2.用IDA64打开 找到关键部分 这里有坑,看清楚v3是长度为3数组,里面放三个字符串 3.脚本解密 v1"Dufhbmf" v2"pGimos" v3"ewUglpt" v4[v1,v2,v3] a1[0,0,0,0,0,0,0,0,0,0,0,0] for i …

人工智能研究生前置知识—科学计算库numpy

人工智能研究生前置知识—科学计算库numpy numpy是python中做科学计算的基础库,对数组进行操作 整个numpy的操作和使用比较简单因此可以通过案例的学习掌握基本的用法在之后的学习中不断的进行熟悉和补充 创建数组(矩阵 ) 创建的ndarray数组…

使用cmake进行打包,包含可执行程序和动态依赖库

平常代码开发中,有时候需要将写的程序打包成压缩包放到目标设备上进行运行测试。用CMake管理工程,实现使用make -jnproc package指令可以将工程进行打包,可执行文件存储在bin文件夹中,依赖库存储在lib文件夹中。 示例 1.工程目录结…

谷歌翻译接口-国内使用在线翻译API

对于翻译要求比较高的同学都知道Google翻译比现有市面上的翻译软件优势在哪里。下面来浅浅介绍一下其优点: 1、支持超过100种不同语言之间的互译,覆盖了全球主要语言。 2、基于机器学习技术,可根据用户大量的翻译数据不断优化和提升翻译的准确…

算法打卡day41|动态规划篇09| Leetcode198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

算法题 Leetcode 198.打家劫舍 题目链接:198.打家劫舍 大佬视频讲解:198.打家劫舍视频讲解 个人思路 偷还是不偷,这取决于前一个和前两个房是否被偷了,这种存在依赖关系的题目可以用动态规划解决。 解法 动态规划 动规五部曲&#xff1…

B端系统:控制台图表的十大常见类型,附精美案例

大家伙,我是大千UI工场,专注UI分享和项目接单,本期带来控制台图表的常见类型,欢迎大家关注、互动交流。 B端系统控制台的图表类型有很多种,常见的包括: 折线图:用于显示随时间变化的数据趋势&a…

Spring Boot 学习(3)——Spring Initializr 创建项目问题解决

产生问题的原因,各种的版本都较老,所以导致出现问题。目前暂未打到合适的教程,按老教程学起来先。 小白瞎学,大神勿喷! 再次强调环境:maven 3.3.9、jdk 1.8、idea 2017、Spring 4.3.13、Spring Boot 1.5.…

【动态规划 区间dp 位运算】100259. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode100259. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues,长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组,对于第 ith 个子数…

设计者模式之中介者模式(下)

3)中介者与同事类的扩展 1.结构图 新增了具体同事类Label和具体中介者类SubConcreteMediator。 2.代码实现 //文本标签类:具体同事类 public class Label extends Component {public void update() {System.out.println("文本标签内容改变&#…

【蓝桥杯-牛客冲刺题单】

蓝桥杯-牛客冲刺题单 前言:牛牛的早八光速签到牛牛的身高A加B,A模B四舍五入小红的环形字符串牛牛的说谎机器传送阵优美的序列小d和超级泡泡堂qsgg and Subarray结语 前言: 蓝桥杯前一天除了看看模板和做过的题,也可以限时做一下中等偏下的题…

linux中screen命令及Tmux的使用

linux中screen命令及Tmux的使用.md Screen使用一、大概使用的过程示例 Tmux使用安装基本用法会话管理窗口管理 Screen使用 本文内容摘自原文https://blog.csdn.net/weixin_43570155/article/details/121845415 使用 screen 可以帮助你在后台运行程序并保持持久性。下面是一些…

鉴权设计(一)———— 登录验证

1、概述 网站系统出于安全性的考虑会对用户进行两个层面的校验:身份认证以及权限认证。这两个认证可以保证只有特定的用户才能访问特定的数据的需求。 本文先实现一个基于jwt拦截器redis注解实现的简单登录验证功能。 2、设计思路 jwt用于签发token。 拦截器用于拦…

南京观海微电子---二极管钳位电路

在选择电阻器和电容器时,您必须注意电容器的放电时间,因为它会保持波形的时间段。它必须比时间段的一半大得多,以便电容器放电缓慢。电解电容器不应用于钳位电路,因为它们的充电和放电速度很慢。放电时间()…