前言
一般我们优化Stable Diffusion,都是平常运行webUI的指令后加上 --xformers 让程序在运行时使用 xformers 来进行优化,但是随着技术的发展已不再默认推荐。
我们都知道xformers只能使用NVIDIA的显卡,其他的显卡有没有加速办法?
本文中,我们将解释 –opt-sdp-attention 和 –opt-sdp-no-mem-attention,它们可以加快稳定扩散 Web UI 的图像生成速度。这篇文章推荐给有下面需要的人:
- 想缩短Stable Diffusion Web UI 的图像生成时间。
- 想了解更多有关 opt-sdp-attention 的背景信息。
- 想安装 xformers,但无法安装,因为我的 GPU 不是 NVIDIA 制造的。
- 想知道它是否可以与 xformers 结合使用。
什么是 opt-sdp-attention?
opt-sdp-attention 是“优化缩放点积注意力”的缩写。这意味着优化缩放点积注意力。您可以在启动 Stable Diffusion Web UI 时指定 –opt-sdp-attention 作为命令参数,从而加快 Stable Diffusion Web UI 的图像生成速度。
什么是缩放点积注意力?
缩放点积注意力是深度学习模型的一个组成部分,它决定着关注输入的位置。你可能听说过“注意力”这个词,它是它的一种。在首次发表注意力的论文《 Attention Is All You Need 》中,提出了两种注意力形式,其中一种是Scaled Dot-Product Attention。
如何使用-opt-sdp-attention
在记事本等文本编辑器中打开 Stable Diffusion 启动脚本 webui-user.bat(对于 Mac 或 Linux 为 webui-user.sh)。要打开它,请打开记事本并拖放该文件。然后您可以查看和编辑启动脚本的内容。set COMMANDLINE_ARGS=--opt-sdp-attention
添加一行。这--opt-sdp-attention是设定的。正如我稍后将介绍的,--opt-sdp-no-mem-attention还有一个使用几乎相同方法的选项,并且也可以通过以相同的方式指定它来应用它。set COMMANDLINE_ARGS=--opt-sdp-no-mem-attention
它与 xFormers 有什么不同?
xFormers 也是一种注意力优化。然而,优化技术存在差异。
--opt-sdp-attention Stable Diffusion Web UI github wiki上有说法是计算速度更快。
优化 · AUTOMATIC1111/stable-diffusion-webui Wiki (github.com)
当我在我的环境中测试时,速度差异非常小。
– opt-sdp-attention 的好处
- 适用于 NVIDIA 以外的设备
- 对于不支持 xFormers 的代码也有效。动画差异等
– opt-sdp-attention 的缺点
- 内存消耗 (VRAM) 比 xFormers 大。
- 非确定性:即使使用相同的设置,也会为生成的图像添加随机性。
- 如果您想明确的话,还可以指定 –opt-sdp-no-mem-attention。相比–opt-sdp-attention,计算速度和内存效率稍差一些。
–xformers 和 –opt-sdp-attention 可以一起使用吗?
–我很好奇opt-sdp-attention,如果xFormers和它结合使用不是更好吗?关于它。于是我查了Stable Diffusion Web UI的源码。因此,在实施过程中将择其一。目前,如果两者都指定为 argument ,则将使用xfomers 。换句话说,指定两者是没有意义的。
验证结果
最后描述一下我的环境下的验证结果。
- 显卡:RTX 3080Ti(16GB)
- 分辨率:768×512
- 批次数量:4
我们研究了 –xformers、–opt-sdp-attention 和 –opt-sdp-no-mem-attention 与此设置之间的差异。列出了每个结果五次生成的中值。
- –opt-sdp-attention:生成时间 13.2s VRAM 消耗:6.2GB
- –opt-sdp-no-mem-attention:生成时间 13.7s VRAM 消耗:6.2GB
- –xformers:生成时间 13.7s VRAM 消耗:6.2GB
老实说,几乎是一样的。
– 研究 opt-sdp-attention 的非确定性本质
我尝试检查生成的图像的不确定性。我生成了很多次来看看差异。下面显示了其中的一个示例。双手略有不同,光线打在脸上的方式也不同。
我总共尝试了大约10次,但只是稍微改变了细节,并且具有足够的非确定性,不会影响整体构图,所以我认为我不需要太担心。事实上,如果差异这么大,最好反复生成,直到手形完美为止。
最后,你应该选择哪一个呢?
在计算速度、内存消耗和非确定性方面几乎没有区别。因此,考虑到以下两点,我们建议使用–opt-sdp-attention 。
- 适用于 NVIDIA 以外的设备
- 对于不支持 xFormers 的代码也有效。动画差异等
我认为当存在非确定性问题时,使用 –opt-sdp-no-mem-attention 是个好主意。
人工智能领域,更新太快了,因此我也不确定什么是当前的/推荐的或不是。
欢迎你分享你的作品到我们的平台上. http://www.shxcj.com 或者 www.2img.ai 让更多的人看到你的才华。
创作不易,觉得不错的话,点个赞吧!!!