stable-diffusion-webui的优化配置

2023-11-03 09:40:09 浏览数 (1)

建议先关注、点赞、收藏后再阅读。

可以通过命令行参数启用许多优化:

命令行参数

解释

--opt-sdp-attention

在某些系统上可能比使用 xFormers 速度更快,但需要更多 VRAM。 (非确定性)

--opt-sdp-no-mem-attention

在某些系统上可能比使用 xFormers 速度更快,但需要更多 VRAM。 (确定性,比 --opt-sdp-attention 稍慢并使用更多 VRAM)

--xformers

使用 xFormers 库。 内存消耗和速度都有很大改善。 仅限 Nvidia GPU。 (从 0.0.19 开始是确定性的 [webui 从 1.4.0 开始使用 0.0.20])

--force-enable-xformers

无论程序是否认为您可以运行它,都启用 xFormers。 不要报告运行此程序时遇到的错误。

--opt-split-attention

交叉注意力层优化显着减少了内存使用,几乎没有成本(一些人报告说它提高了性能)。 Black magic.On 默认情况下适用于 torch.cuda,其中包括 NVidia 和 AMD 卡。

--disable-opt-split-attention

禁用上面的优化。

--opt-sub-quad-attention

次二次注意力,一种内存高效的交叉注意力层优化,可以显着减少所需的内存,有时会产生轻微的性能成本。 如果 xFormers 无法使用的硬件/软件配置导致性能不佳或生成失败,则建议使用。 在 macOS 上,这也将允许生成更大的图像。

--opt-split-attention-v1

使用上述优化的旧版本,该版本不那么消耗内存(它将使用更少的 VRAM,但对您可以制作的图片的最大尺寸会受到更多限制)。

--medvram

通过将稳定扩散模型分成三个部分,使稳定扩散模型消耗更少的 VRAM - cond(用于将文本转换为数字表示)、first_stage(用于将图片转换为潜在空间并返回)和unet(用于潜在空间的实际去噪)并 这样一来,任何时候都只有一个位于 VRAM 中,而将其他的发送到 CPU RAM。 降低性能,但只会降低一点 - 除非启用实时预览。

--lowvram

对上面的进行更彻底的优化,将unet拆分成很多模块,VRAM中只保留一个模块。 对性能来说是毁灭性的。

*do-not-batch-cond-uncond

仅在 1.6.0 之前:防止在采样期间对正负提示进行批处理,这本质上可以让您以 0.5 批处理大小运行,从而节省大量内存。 降低性能。 不是命令行选项,而是使用 --medvram 或 --lowvram 隐式启用的优化。 在 1.6.0 中,任何命令行标志都不会启用此优化,而是默认启用。 可以在设置、优化类别中的批量条件/不条件选项中禁用它。

--always-batch-cond-uncond

仅1.6.0之前:禁用上述优化。 仅与 --medvram 或 --lowvram 一起使用才有意义。 在 1.6.0 中,此命令行标志不执行任何操作。

--opt-channelslast

更改TORCH内存类型以稳定扩散到最后的通道。 影响未经过仔细研究。

--upcast-sampling

对于 Nvidia 和 AMD 卡,通常被迫以 --no-half 运行,应该会提高生成速度。

额外提示(Windows):

1 https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/3889 禁用硬件 GPU 调度。

2 禁用浏览器硬件加速

3 进入nvidia控制面板,3d参数,并将功率配置文件更改为“最大性能”

优化器和标志的内存和性能影响

这是使用特定硬件和配置的示例测试,您的里程可能会有所不同

使用 nVidia RTX3060 和 CUDA 11.7 进行测试

交叉注意力

批量大小下的峰值内存1/2/4/8/16

最初的 It/s

顶峰 It/s

说明

None

4.1 / 6.2 / OOM / OOM / OOM

4.2

4.6

缓慢且早期内存不足

v1

2.8 / 2.8 / 2.8 / 3.1 / 4.1

4.1

4.7

速度慢但内存使用率最低,并且不需要有时有问题的 xFormers

InvokeAI

3.1 / 4.2 / 6.3 / 6.6 / 7.0

5.5

6.6

与默认优化器几乎相同

Doggetx

3.1 / 4.2 / 6.3 / 6.6 / 7.1

5.4

6.6

默认

Doggetx

2.2 / 2.7 / 3.8 / 5.9 / 6.2

4.1

6.3

使用 medvram 预设可以节省相当多的内存,而不会造成巨大的性能损失

Doggetx

0.9 / 1.1 / 2.2 / 4.3 / 6.4

1.0

6.3

由于不断交换,使用 lowvram 预设非常慢

xFormers

2.8 / 2.8 / 2.8 / 3.1 / 4.1

6.5

7.5

最快且内存不足

xFormers

2.9 / 2.9 / 2.9 / 3.6 / 4.1

6.4

7.6

使用 cuda_alloc_conf 和 opt-channelslast

备注:

1 批量大小 1 时的性能约为峰值性能的 70%

2 峰值性能通常约为批量大小 8

之后,如果您有额外的 VRAM,则在由于 GC 启动而开始下降之前,它会增长几个百分点

3 lowvram 预设的性能在批量大小 8 以下非常低,到那时节省的内存就不那么大了

其他可能的优化:

1 在 webui-user.bat 中添加 set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512

不会影响性能,并且会稍微增加初始内存占用量,但会减少长时间运行中的内存碎片

2 opt-channelslast

Hit-and-miss:似乎批量大小越大,性能会略有提高,而小批量的性能会变慢,但差异在误差范围内

0 人点赞