diffusers SD推理加速方案的调研实践总结(2)

简介: diffusers SD推理加速方案的调研实践总结




SD1.5加速测试


基于被广泛使用的diffusers框架,主要测试的加速手段包括oneflow、stable-fast、deepcache以及diffusers官方推荐的一些方法等。同时,也对controlnet使用场景下的加速效果进行了测试。

 测试环境


A10 + cu118 + py310 + torch2.0.1 + diffusers0.26.3文生图,prompt:"A photo of a cat. Focus light and create sharp, defined edges."


 测试结果


  1. 通过固定seed的方式对生成的图片进行对比,可以发现oneflow编译能够降低rt 40%以上,且精度几乎没有损失,但在使用新的pipeline初次生成图片时,需要几十秒的编译时间作为warmup
  2. deepcache能够在此基础上额外降低15%~25%的rt,但同时随着缓存间隔的增大,生成效果差异也越来越明显
  3. oneflow对使用了controlnet的SD1.5模型也同样有效
  4. stable-fast对外部包的依赖比较严重,容易出现各种版本问题和外部工具报错,与oneflow类似,初次生成图片需要一定的编译时间,最终的加速效果也略逊于oneflow


 详细对比数据


优化方法

平均生成耗时(秒)

512*512,50step

加速效果

生成效果1

生成效果2

生成效果3

diffusers

3.3701

0


diffusers+bf16

3.3669

≈0


diffusers+controlnet

4.7452




diffusers+oneflow编译

1.9857

41.08%


diffusers+oneflow编译+controlnet

2.8017




diffusers+oneflow编译+deepcache

interval=2:1.4581

56.73%(15.65%)


interval=3:1.3027

61.35%(20.27%)


interval=5:1.1583

65.63%(24.55%)


diffusers+sfast

2.3799

29.38%





SDXL加速测试

与SD1.5不同,这一部分主要测试了lora使用场景下oneflow、deepcache、lcm-lora的优化效果。

 测试环境


A10 + cu118 + py310 + torch2.0.1 + diffusers0.26.3文生图,prompt:"A photo of a cat. Focus light and create sharp, defined edges."

 测试结果


基础sdxl模型:

  1. sdxl模型在固定seed的条件下,使用不同的加速方案似乎更容易影响生成图片的效果
  2. oneflow只能降低24%的rt,但仍然能保证生成图片的精度
  3. deepcache能够提供极其显著的加速,interval为2(即缓存只使用一次)时rt降低42%,interval为5时rt降低69%,但生成图片差异也很明显
  4. lcm-lora显著降低了生图所需步数,能够极大程度地实现推理加速,但在使用预训练权重的情况下,稳定性极差,对步数非常敏感,无法保证稳定产出符合要求的图片
  5. oneflow与deepcache/lcm-lora可以很好地结合起来使用


lora:

  1. 加载lora后,diffusers的推理速度明显降低,降低幅度与使用lora的类型和数量有关
  2. deepcache依然有效,也依然存在精度问题,但在缓存间隔较低的情况下差异不大
  3. 使用lora的情况下,oneflow编译无法固定seed以保持与原版本一致
  4. oneflow编译优化了加载lora后的推理速度,加载多个lora时,推理rt与未加载lora时相差不大,加速效果极其显著。例如,同时使用yarn+watercolor两个lora,rt能够降低约65%
  5. oneflow对lora加载耗时有较小幅度的优化,但加载lora之后的设置操作耗时增加了


 详细对比数据


优化方法

lora

平均生成耗时(秒)512*512,50step

lora加载耗时(秒)

lora修改耗时(秒)

效果1

效果2

效果3

diffusers

4.5713





yarn

7.6641

13.9235

11.0447

0.06~0.09

根据配置的lora数量




watercolor

7.0263




yarn+watercolor

10.1402



diffusers+bf16

4.6610





yarn

7.6367

12.6095

11.1033

0.06~0.09

根据配置的lora数量




watercolor

7.0192




yarn+ watercolor

10.0729




diffusers+deepcache

interval=2:2.6402





yarn

interval=2:4.6076






watercolor

interval=2:4.3953




yarn+ watercolor

interval=2:5.9759



interval=5:

1.4068



yarn

interval=5:2.7706




watercolor

interval=5:2.8226




yarn+watercolor

interval=5:3.4852



diffusers+oneflow编译

3.4745





yarn

3.5109

11.7784

10.3166

0.5左右

移除lora 0.17




watercolor

3.5483




yarn+watercolor

3.5559



diffusers+oneflow编译+deepcache

interval=2:1.8972



yarn

interval=2:1.9149




watercolor

interval=2:1.9474




yarn+watercolor

interval=2:1.9647



interval=5:0.9817



yarn

interval=5:0.9915




watercolor

interval=5:1.0108




yarn+watercolor

interval=5:1.0107



diffusers+lcm-lora


4step:0.6113






diffusers+oneflow编译+lcm-lora


4step:0.4488







应用:AI试衣加速


AI试衣业务场景使用了算法在diffusers框架基础上改造的专用pipeline,功能为根据待替换服饰图对原模特图进行换衣,基础模型为SD2.1。


根据调研的结果,deepcache与oneflow是优先考虑的加速方案,同时,由于pytorch版本较低,也可以尝试使用较新版本的pytorch进行加速。


 测试环境


A10 + cu118 + py310 + torch2.0.1 + diffusers0.21.4


图生图(示意图,仅供参考):

待替换服饰

原模特图


 测试结果


  1. pytorch2.2版本集成了FlashAttention2,更新版本后,推理加速效果明显
  2. deepcache仍然有效,为了尽量不损失精度,可设置interval为2或3
  3. 对于被“魔改”的pipeline和子模型,oneflow的图转换功能无法处理部分操作,如使用闭包函数替换forward、使用布尔索引等,而且很多错误原因较难通过报错信息来定位。在进行详细的排查之后,我们尝试了改造原模型代码,对其中不被支持的操作进行替换,虽然成功地在没有影响常规生成效果的前提下完成了改造,通过了oneflow编译,但编译后的生成效果很差,可以看出oneflow对pytorch的支持仍然不够完善
  4. 最终采取pytorch2.2.1+deepcache的结合作为加速方案,能够实现rt降低40%~50%、生成效果基本一致且不需要过多改动原服务代码


 详细对比数据


优化方法

平均生成耗时(秒)

576*768,25step

生成效果

diffusers

22.7289

diffusers+torch2.2.1

15.5341

diffusers+torch2.2.1+deepcache

11.7734

diffusers+oneflow编译

17.5857

diffusers+deepcache

interval=2:18.0031

interval=3:16.5286

interval=5:15.0359


总结


目前市面上有很多非常好用的开源模型加速工具,pytorch官方也不断将各种广泛采纳的优化技术整合到最新的版本中。


我们在初期的调研与测试环节尝试了很多加速方案,在排除了部分优化效果不明显、限制较大或效果不稳定的加速方法之后,初步认为deepcache和oneflow是多数情况下的较优解。


但在解决实际线上服务的加速问题时,oneflow表现不太令人满意,虽然oneflow团队针对SD系列模型开发了专用的加速工具包onediff,且一直保持高更新频率,但当前版本的onediff仍存在不小的限制。


如果使用的SD pipeline没有对unet的各种子模块进行复杂修改,oneflow仍然值得尝试;否则,确保pytorch版本为最新的稳定版本以及适度使用deepcache可能是更省心且有效的选择。


相关资料


  1. FlashAttention:
  1. oneflow
  1. stable-fast
  1. deepcache
  1. lcm-lora
  1. pytorch 2.2
  2. https://pytorch.org/blog/pytorch2-2/


团队介绍


我们是淘天集团内容技术AI工程团队,通过搭建完善的算法工程化一站式平台,辅助上千个淘宝图文、视频、直播等泛内容领域算法的工程落地、部署和优化,承接每日上亿级别的数字内容数据,支撑并推动AI技术在淘宝内容社交生态中的广泛应用。


相关文章
|
6月前
|
JSON 人工智能 API
【ComfyUI API 自动化利器:comfyui_xy Python 库使用详解】
`comfyui_xy` 是一个轻量级 Python 客户端库,封装 ComfyUI API,支持一键上传图片/遮罩、动态修改工作流、自动排队执行与结果下载(图/视/音频)。安装即用,无需处理底层 HTTP/WebSocket 细节,助力 AIGC 自动化开发。开源免费,PyPI 可装。
2496 128
|
缓存 人工智能 并行计算
diffusers SD推理加速方案的调研实践总结(1)
diffusers SD推理加速方案的调研实践总结
764 13
|
机器学习/深度学习 PyTorch API
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
Transformer架构自2017年被Vaswani等人提出以来,凭借其核心的注意力机制,已成为AI领域的重大突破。该机制允许模型根据任务需求灵活聚焦于输入的不同部分,极大地增强了对复杂语言和结构的理解能力。起初主要应用于自然语言处理,Transformer迅速扩展至语音识别、计算机视觉等多领域,展现出强大的跨学科应用潜力。然而,随着模型规模的增长,注意力层的高计算复杂度成为发展瓶颈。为此,本文探讨了在PyTorch生态系统中优化注意力层的各种技术,
1225 6
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
|
机器学习/深度学习 人工智能 Cloud Native
秒速出图!体验 TensorRT 加速 Stable Diffusion 图像创作
秒速出图!体验 TensorRT 加速 Stable Diffusion 图像创作
141869 133
|
人工智能 NoSQL C语言
程序又崩了?一招精准定位段错误!
在C/C++开发中,程序崩溃(如段错误)是常见问题,但快速定位崩溃原因却颇具挑战。本文介绍了一种精准定位崩溃问题的方法:通过捕获异常信号(如SIGSEGV),结合`backtrace()`和`abi::__cxa_demangle()`打印堆栈信息,从而快速定位问题接口。相比增加日志或生成coredump文件,此方法更高效且无副作用。实现时需注意编译选项(如`-O0 -g -rdynamic`)以保留符号信息,并处理C++名称修饰问题。
1090 0
|
JSON API 开发者
小红书 API 接口使用指南:笔记详情数据接口的接入与使用
小红书是一款广受喜爱的生活方式分享社交平台,涵盖旅行、美食等领域。其API允许开发者批量获取笔记内容、图片链接及用户互动数据,助力内容分析与营销策略优化。要使用API,需先注册开发者账号并通过认证获取密钥;随后依据官方文档构建与发送HTTP请求,最后处理JSON格式响应数据。整个过程中,请务必遵循平台使用条款,尊重用户隐私权。
|
网络协议
选择长连接 or 短连接,大量 Timewait 的产生时如何处理?
网络通讯中,常见的两个连接类型分别是长连接和短连接。长连接指在一定时间内保持连接不断开,而短连接则指每次连接只进行一次通信,通信结束后即时断开连接。在实际应用中,不同类型的连接有着不同的应用场景和优缺点,而且在网络通讯中可能会遇到大量 Timewait 的产生,这就需要针对不同情况选择不同的处理方案。
669 1
|
机器学习/深度学习 人工智能 算法
|
Kubernetes 调度 Docker
玩转Kubernetes—使用minikube操作集群
玩转Kubernetes—使用minikube操作集群
1169 0