菜单

模型优化

相关源文件

本文档解释了 Stable Diffusion Web UI 中使用的各种优化技术,以提高性能、降低内存使用并增强跨不同硬件设置的兼容性。它涵盖了模型加载后的优化方式、内存管理方式以及不同注意力机制的实现方式以提高效率。

有关模型加载和初始化的信息,请参阅 模型管理。有关 VAE 处理的信息,请参阅 VAE 管理

优化方法概述

Stable Diffusion 模型需要大量的计算资源。Web UI 实现了多种策略来优化性能

  1. 精度优化 - 使用较低精度(半精度/FP16)以减少内存需求
  2. 交叉注意力优化 - 实现高效的注意力机制
  3. 内存管理 - 降低 VRAM 使用的技术
  4. 特定设备优化 - 对不同硬件的特殊处理

优化流程

来源

精度优化

代码库支持多种精度级别以平衡质量和性能

精度模式描述激活方式内存影响
FP32 (全精度)32 位浮点数命令行选项 --no-half最高内存使用量
FP16 (半精度)16 位浮点大多数操作的默认设置约 50% 的内存减少
FP88 位浮点数选项 fp8_storage约 75% 的内存减少

精度设置在模型加载期间应用,并对不同的模型组件进行特殊处理

来源

半精度 (FP16)

半精度是默认模式,与全精度相比,内存使用量减少约 50%。

来源

FP8 模式

FP8 是一种极端的内存优化选项,允许在 VRAM 非常有限的 GPU 上运行模型

来源

交叉注意力优化

代码库包含多种注意力机制的实现,以优化跨不同硬件的性能

优化优先级描述最佳用途
xformers100使用 xformers 库进行高效注意力计算支持 xformers 的 NVIDIA GPU
sdp-no-mem80不带内存效率的缩放点积注意力近期支持 PyTorch 2.0+ 的 GPU
sdp70标准缩放点积注意力现代 GPU
sub-quadratic (亚二次方)10-1000*O(n) 注意力,内存占用更少内存受限设备
Doggettx90基于内存块的实现高端 GPU

*在 MPS (Mac) 设备上的优先级为 1000,其他地方为 10

来源

xformers 优化

xformers 在支持的硬件上提供最高的性能

来源

缩放点积注意力

PyTorch 2.0+ 提供了内置的缩放点积注意力

来源

亚二次方注意力

对于内存受限的设备,代码库包含亚二次方复杂度的注意力实现

来源

内存管理技术

实现了多种技术来减少内存使用

低 VRAM 模式

系统支持将模型保存在 CPU 内存中,仅在需要时将必要部分移至 GPU

来源

检查点缓存

模型系统实现了缓存以避免重新加载模型

来源

Meta 设备初始化

为了在模型加载时节省内存,可以将参数分配到“meta”设备(不占用实际内存)

来源

Token Merging (ToMe)

Token Merging 是一种通过合并相似 token 来减少内存使用量并提高推理速度的技术

来源

特定设备优化

代码库包含针对不同硬件类型的特殊处理

Mac MPS 优化

Apple Silicon 设备使用 Metal Performance Shaders (MPS) 进行特定优化

来源

混合精度自动转换 (Mixed Precision Autocast)

系统根据设备类型实现自定义自动转换

来源

Alpha 调度优化

为获得更好的扩散结果,代码库允许自定义噪声调度

来源

优化选择系统

优化系统允许用户为他们的硬件选择最合适的优化

来源

结论

Stable Diffusion Web UI 中的模型优化采用了多种技术来平衡性能和内存使用。用户可以根据其特定的硬件和需求,从各种优化选项中进行选择

  1. 根据 VRAM 限制选择合适的精度(FP32、FP16、FP8)
  2. 为您的 GPU 选择最佳的注意力机制
  3. 启用 token merging 以进一步节省内存
  4. 为 Mac 等平台使用特定设备优化

这些优化使得 Stable Diffusion 模型能够在各种硬件上高效运行,从高端 GPU 到更受限的环境。