Skip to content

优化

可以通过命令行参数启用一些优化:

命令行参数 解释
--opt-sdp-attention 可能比在某些系统上使用xFormers更快,但需要更多的VRAM。(非确定性)
--opt-sdp-no-mem-attention 可能比在某些系统上使用xFormers更快,但需要更多的VRAM。(确定性,略低于--opt-sdp-attention,并使用更多的VRAM)
--xformers 使用xFormers库。内存消耗和速度有了很大的改善。仅限Nvidia GPU。(非确定性)
--force-enable-xformers 无论程序是否认为您可以运行它,都可以启用xFormers。不要报告你运行这个的错误。
--opt-split-attention 交叉注意力层优化几乎可以免费地大幅减少内存使用(一些报告称,它提高了性能)。黑魔法。
默认情况下,torch.cuda也处于打开状态,其中包括NVidia和AMD卡。
--disable-opt-split-attention 禁用上述优化。
--opt-sub-quad-attention 亚次级注意力,一种内存高效的交叉注意力层优化,可以显著减少所需的内存,有时只需轻微的性能成本。如果使用xFormers无法工作的硬件/软件配置获得性能不佳或失败的一代,建议使用。在macOS上,这也将允许生成更大的图像。
--opt-split-attention-v1 使用上述旧版本的优化,而不是缺乏内存(它将使用更少的VRAM,但您可以制作的图片的最大尺寸将受到更多限制)。
--medvram 通过将其分为三部分,使Stable Diffusion 模型消耗更少的VRAM-cond(用于将文本转换为数字表示)、first_stage(用于将图片转换为潜在空间和背面)和unet(用于潜在空间的实际去噪),并使其始终只有一个在VRAM中,将其他图像发送到CPU RAM。降低性能,但仅降低一点-除非启用了实时预览。
--lowvram 对上述内容进行了更彻底的优化,将unet拆分为许多模块,并且只有一个模块保存在VRAM中。性能是毁灭性的。
*do-not-batch-cond-uncond 防止在采样期间批处理正向和负提示,这基本上允许您以0.5批大小运行,节省大量内存。降低性能。不是命令行选项,而是使用--medvram--lowvram隐式启用的优化。
--always-batch-cond-uncond 禁用上述优化。只有与--medvram--lowvram
--opt-channelslast 更改torch内存类型,以Stable Diffusion 到通道。效果没有仔细研究。
--upcast-sampling 对于Nvidia和AMD卡来说,通常被迫运行--no-half应该可以提高生成速度

1.3.0版本开始,可以在设置下选择Cross attention optimization。xFormers仍然需要通过COMMANDLINE_ARGS启用。2023-06-21 22_53_54_877 铬

额外提示(Windows):

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

这是一个使用特定硬件和配置的示例测试,您的里程可能会有所不同
使用nVidia RTX3060和CUDA 11.7进行测试

Cross-attention Peak Memory at Batch size 1/2/4/8/16 Initial It/s Peak It/s Note
None 4.1 / 6.2 / OOM / OOM / OOM 4.2 4.6 缓慢而早的 out-of-memory
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 default
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_confopt-channelslast

备注:

  • 批量大小1的性能约为峰值性能的70%
  • 峰值性能通常在批次大小8左右
    之后,如果你有额外的VRAM,在它开始下降之前,它会增长百分之几
  • lowvram预设的性能在批量大小8以下非常低,到那时内存节省就没那么大了

其他可能的优化:

  • adding set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512 in webui-user.bat
    没有性能影响,增加了初始内存占用空间,但减少了长期运行中的内存碎片
  • opt-channelslast
    命中和失误:似乎随着批次规模的增加而轻微的性能增加,而随着较小的批次规模而缓慢,但差异在误差范围内


回到顶部