-
引言
Stable Diffusion是一种基于扩散模型的图像生成技术,它可以根据文本生成高质量的图像,适用于CG、插画和高分辨率壁纸等领域 。然而,由于其复杂的计算过程,Stable Diffusion出图速度常常成为一个瓶颈。Omniinfer为了解决这一问题,我们进行了一系列加速方案的对比测试,其中包括Xformers、Aitemplate、TensorRT和OneFlow。
本文将介绍这些加速方案的原理和性能测试结果,并提供在不同显卡上的性价比考量,给大家在部署时提供一些参考,同时也让大家明白为什么 Omniinfer的Stable Diffusion API 能运行10000个模型,2s生成高质量图片。
如果想要体验测试 Omniinfer的图片生成速度 ,有三种方式: API 、 demo 、 nogpu,也期待大家更多的反馈和建议。
测试结果显示,OneFlow在3090上相对于xformers能够达到211.2%的加速,而在4090上达到205.6%的加速。在部署 Stable Diffusion 时首选3090显卡。
-
加速方案原理及特点对比
首先我们梳理了可以用于stable diffusion加速的各种方案。
| 方案 | 原理 | 特点 |
|---|---|---|
| xformers | 加速 Transformers 研究的工具箱,可以用于各种transformer架构的模型1 | 独立/可定制的构建块,无需样板代码即可使用。xFormers 包含前沿组件xFormers 包含自己的 CUDA 内核,但会在相关时分派到其他库。 |
| aitemplate | AITemplate (AIT) 是一个 Python 框架,可将深度神经网络转换为 CUDA (NVIDIA GPU) / HIP (AMD GPU) C++ 代码,以加速推理 | 统一、开放、灵活。适用于 NVIDIA GPU 或 AMD GPU 的无缝 fp16 深度神经网络模型。与两个 GPU 平台的现有解决方案相比,支持更全面的融合。 |
| tensorrt | NVIDIA TensorRT 是一个用于深度学习推理的 SDK 。 TensorRT 可以生成可部署在数据中心、汽车和嵌入式环境中的优化运行时引擎。 | 将高速率、低延迟优化做到极致。使用nvidia显卡。 |
| oneflow | 一种基于异步并行计算的深度学习框架,可以实现分布式训练和推理 | 使用类似 PyTorch 的 API对模型进行编程;使用全局张量将模型扩展到 n 维并行执行 |
我们选择了Xformers、Aitemplate、TensorRT、OneFlow,其中NvFuser与Xformers原理相似,都是采用了FlashAttention的技术,DeepSpeed与colossalAI主要用于训练加速,OpenAI triton主要是一种模型部署引擎,适用于除了不同批大小的加速,不适用模型优化延迟的场景,因此这些不纳入比较的对象。
现在测试WebUI基础方案及四种加速方案Xformers、Aitemplate、Tensorrt、Oneflow在各显卡上的性能。
我们用VoltaML来测试Aitemplate的加速效果,Stable Diffusion WebUI测试Xformers的加速效果,Tensorrt的官方例子测Tensorrt的加速效果,Diffusions集成Oneflow来测试Oneflow的加速效果。
-
加速方案实测
接下来给大家展示相关的测试配置,基于配置,我们一起看看实测结果。
-
测试设置
本次我们的测试指标为,每秒迭代次数:its/s
- 图片设置:512*512 setps100
- Prompt:
A beautiful girl, best quality, ultra-detailed, extremely detailed CG unity 8k wallpaper,best illustration, an extremely delicate and beautiful,floating,high resolution
- Negative:
lowres, bad anatomy, bad hands, text,error, missing fIngers,extra digt ,fewer digits,cropped, worst quality ,low quality,normal quality, jpeg artifacts,signature,watermark, username, blurry, bad feet,fused body
- 采样器 Euler a
- 模型
Stable diffusion 1.5(Omniiinfer其他还有10000个模型,可以任选一个进行测试)
-
测试结果
经过一系列测试,我们得到了各种显卡上的性能测试结果,如下所示:
| 显卡 | WebUI | Xformers | TensorRT | Aitemplate | OneFlow |
|---|---|---|---|---|---|
| RTX 4090 | 26.07 it/s | 36.14 it/s | 74.07 it/s | 69.35 it/s | 74.31 it/s |
| RTX 3090 | 15.92 it/s | 19.90 it/s | 38.74 it/s | 37.75 it/s | 42.18 it/s |
| RTX 2080Ti | 11.55 it/s | 13.74 it/s | 显存不足 | 21.67it/s | 23.3it/s |
| RTX 1660S | 2.61 it/s | 2.32 it/s | 显存不足 | 无法运行 | 无法运行 |
| RTX 1080 | 2.07 it/s | 2.64 it/s | 显存不足 | 无法运行 | 无法运行 |
| Tesla T4 | 4.5 it/s | 6.0 it/s | N/A | N/A | N/A |
| RTX A5000 | 12.54 it/s | 17.19 it/s | N/A | N/A | N/A |
| RTX A4000 | 9.44 it/s | 12.23 it/s | N/A | N/A | N/A |
| Tesla M60 | 1.26 it/s | 1.27 it/s | N/A | N/A | N/A |
| Nvidia A10G | 10.96 it/s | 15.11 it/s | N/A | N/A | N/A |
| 3070 | 9.066 it/s | N/A | N/A | N/A | N/A |
| 3060 | 6.42it/s | N/A | N/A | N/A | N/A |
| 3080 | 12.412it/s (94% GPU利用) | N/A | N/A | N/A | N/A |
| 3070Ti | 10.828it/s | N/A | N/A | N/A | N/A |
| 3080Ti | 13.066it/s(85% GPU利用) | N/A | N/A | N/A | N/A |
**从上表中可以看出,加速效果对比为Oneflow > TensorRT > Aitemplate > Xformers。
Oneflow在3090相对xformers能达到211.2%加速,4090上达到205.6%的加速。 **
-
显卡性能及性价比对比
针对不同显卡,我们进行了性价比的考量。
结论一:从性价比角度来看,4090显卡的性价比最高。
结论二: 太低端的卡并反而会拉高成本,2080Ti也许是个平衡初期重资产和整体成本的选择。
结论三:最差显卡
本次测试,我们选用了显存大于6G的几个低端显卡,M60、1660s、1080。
1)1660s、1080不支持TensorRT、Aitemplate、Oneflow等加速方案,原因未显存不够或者显卡不兼容。
2)其中1660s(1080),2.61 it/s(2.64 it/s), 用来生成512*512图片,20 steps需要7.66s(7.57s),具有可用性。
3)M60, 1.27 it/s, 用来生成512*512图片,20 steps需要15.74s,可用性较差。
| 显卡 | 性能/(it/s) | 二手显卡价格/¥ | 8卡整机费/¥ | 显卡功率 | 整机功率/W | 整机性成本(¥/天) | 出图张数(张/天) | 总成本(¥/张) |
|---|---|---|---|---|---|---|---|---|
| 3090 | 19.9 | 5899 | 85592 | 350 W | 4040 | 78.16621005 | 15,351.43 | 0.0082498 |
| 4090 | 36.14 | 11579 | 131032 | 450 W | 4840 | 119.6639269 | 27,879.43 | 0.006375451 |
| 2080Ti | 13.74 | 1879 | 53432 | 250W | 3240 | 48.79634703 | 10,599.43 | 0.008271799 |
| 1660s | 2.61 | 689 | 43912 | 125W | 2240 | 40.10228311 | 2,013.43 | 0.033267772 |
| 1080 | 2.64 | 859 | 45272 | 180w | 2680 | 41.34429224 | 2,036.57 | 0.036092175 |
-
选型建议
-
4090的性价比最高, 部署首选3090。
以runpod为例,可以计算每美元迭代数,代表显卡的性价比。可以看到在同等利用率的情况下,4090的性价比是高于3090的。3090高于其他同级别显卡,例如A5000、A4000的。
| WebUI(xformers) | 计费 | its/$ | |
|---|---|---|---|
| RTX 4090 | 36.14 it/s | $0.69/hr | 188,556 |
| RTX 3090 | 19.90 it/s | $0.44/hr | 162,818 |
| RTX A5000 | 17.19 it/s | $0.44/hr | 140,645 |
| RTX A4000 | 12.23 it/s | $0.34/hr | 129,494 |
但针对stable diffusion的模型,是否选择4090要视乎实际情况而定
1、实际性价比=利用率(每小时使用时间/60min)*it/$。视乎服务模式,估算利用率。如果选用4090的利用率与选用2倍个数的3090的利用率是一样的,那么选用4090性价比是高的。当有可能选用两个3090的利用率高,因为这种情况下Stable Diffusion WebUI的实例数也是两倍,支持的并发也高,能够承接的请求数也会比较多,利用率会偏高。但如果在4090机器上部署两个实例,共享4090的算力,情况就不一样了。所以利用率需要结合具体场景分析。
2、its/$仅仅代表推理性能,显存越大可以缓存模型越多,缓存模型可以减少模型加载的耗时,极大加速生图过程。3090和4090的显存均为24GB,而3090比4090便宜,如果对Stable Diffusion WebUI结合显存做了优化,那么选用3090在显存方面更有优势。
3、如果注重推理速度,选用4090是最佳的,推理时间约为3090的1/2。
这与timdettmers.com/2023/01/30/… 的结论一致,更多显卡数据可以参照下图。
-
GPU上耗时占全链路耗时占比小时,可以选性能略差的卡代替3090. 包括A5000、A10G、RTX3080、RTX3080Ti、RTX2080Ti等。
最后,如果您有任何疑问,或者想要一起探讨 Stable Diffusion 更多的加速方案,可以在我们的 discord 上联系我们 discord.gg/7gt3q5R77s ,最后,如果您想要使用 SDXL1.0 模型,也可以在 discord 获取相关信息