建议先关注、点赞、收藏后再阅读。
可以通过命令行参数启用许多优化:
命令行参数 | 解释 |
---|---|
--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:似乎批量大小越大,性能会略有提高,而小批量的性能会变慢,但差异在误差范围内