本文档解释了 Stable Diffusion Web UI 中使用的各种优化技术,以提高性能、降低内存使用并增强跨不同硬件设置的兼容性。它涵盖了模型加载后的优化方式、内存管理方式以及不同注意力机制的实现方式以提高效率。
有关模型加载和初始化的信息,请参阅 模型管理。有关 VAE 处理的信息,请参阅 VAE 管理。
Stable Diffusion 模型需要大量的计算资源。Web UI 实现了多种策略来优化性能
来源
代码库支持多种精度级别以平衡质量和性能
| 精度模式 | 描述 | 激活方式 | 内存影响 |
|---|---|---|---|
| FP32 (全精度) | 32 位浮点数 | 命令行选项 --no-half | 最高内存使用量 |
| FP16 (半精度) | 16 位浮点 | 大多数操作的默认设置 | 约 50% 的内存减少 |
| FP8 | 8 位浮点数 | 选项 fp8_storage | 约 75% 的内存减少 |
精度设置在模型加载期间应用,并对不同的模型组件进行特殊处理
来源
半精度是默认模式,与全精度相比,内存使用量减少约 50%。
来源
FP8 是一种极端的内存优化选项,允许在 VRAM 非常有限的 GPU 上运行模型
来源
代码库包含多种注意力机制的实现,以优化跨不同硬件的性能
| 优化 | 优先级 | 描述 | 最佳用途 |
|---|---|---|---|
| xformers | 100 | 使用 xformers 库进行高效注意力计算 | 支持 xformers 的 NVIDIA GPU |
| sdp-no-mem | 80 | 不带内存效率的缩放点积注意力 | 近期支持 PyTorch 2.0+ 的 GPU |
| sdp | 70 | 标准缩放点积注意力 | 现代 GPU |
| sub-quadratic (亚二次方) | 10-1000* | O(n) 注意力,内存占用更少 | 内存受限设备 |
| Doggettx | 90 | 基于内存块的实现 | 高端 GPU |
*在 MPS (Mac) 设备上的优先级为 1000,其他地方为 10
来源
xformers 在支持的硬件上提供最高的性能
来源
PyTorch 2.0+ 提供了内置的缩放点积注意力
来源
对于内存受限的设备,代码库包含亚二次方复杂度的注意力实现
来源
实现了多种技术来减少内存使用
系统支持将模型保存在 CPU 内存中,仅在需要时将必要部分移至 GPU
来源
模型系统实现了缓存以避免重新加载模型
来源
为了在模型加载时节省内存,可以将参数分配到“meta”设备(不占用实际内存)
来源
Token Merging 是一种通过合并相似 token 来减少内存使用量并提高推理速度的技术
来源
代码库包含针对不同硬件类型的特殊处理
Apple Silicon 设备使用 Metal Performance Shaders (MPS) 进行特定优化
来源
系统根据设备类型实现自定义自动转换
来源
为获得更好的扩散结果,代码库允许自定义噪声调度
来源
优化系统允许用户为他们的硬件选择最合适的优化
来源
Stable Diffusion Web UI 中的模型优化采用了多种技术来平衡性能和内存使用。用户可以根据其特定的硬件和需求,从各种优化选项中进行选择
这些优化使得 Stable Diffusion 模型能够在各种硬件上高效运行,从高端 GPU 到更受限的环境。