菜单

性能优化

相关源文件

本页面提供技术文档,介绍如何在不同硬件配置下优化 Stable Diffusion Web UI 的性能。内容涵盖设备管理、内存优化、精度设置以及提高生成速度和效率的技术。有关常见错误故障排除,请参阅 常见错误

设备选择与管理

Stable Diffusion Web UI 会根据可用性自动选择最优的硬件设备来运行推理。系统支持 CUDA(NVIDIA GPU)、MPS(Apple Silicon)、Intel XPU、HUAWEI NPU 以及 CPU 作为备用。

设备选择流程

来源: modules/devices.py50-67

get_optimal_device_name()get_optimal_device() 函数实现了此逻辑,按性能优先级检查可用硬件。

精度设置

Stable Diffusion Web UI 支持多种精度模式,以平衡质量和内存使用。主要选项如下:

精度模式描述命令行选项
全精度 (FP32)使用 32 位浮点数,质量最高,但速度较慢且占用更多 VRAM--no-half
半精度 (FP16)使用 16 位浮点数,质量和速度平衡良好默认
强制 FP16强制所有模型使用半精度--precision half
混合精度使用自动混合精度,以获得最佳精度组合自动行为

内存和精度控制流程

来源: modules/devices.py186-231

内存优化技术

垃圾回收

Web UI 为每种支持的硬件平台实现了专门的垃圾回收。

来源: modules/devices.py77-98

TF32 加速

对于拥有 Tensor Cores 的 NVIDIA GPU(安培架构及更新版本),TF32 模式可以在精度损失极小的情况下显著提高性能。除非明确禁用,否则该模式会自动启用。

来源: modules/devices.py101-113

命令行性能参数

以下命令行参数可用于优化性能:

参数描述影响
--precision half推理时强制所有模型使用 FP16减少 VRAM 使用量,可能会影响质量
--no-half禁用半精度 (FP16)提高某些硬件的稳定性,增加 VRAM 使用量
--no-half-vae在其他模型使用半精度时,将 VAE 保留为全精度修复 VAE 中的 NaN 问题,同时在其他地方节省内存
--use-cpu {component}强制将特定组件在 CPU 上运行在 VRAM 有限时,可用于将部分计算卸载到 CPU
--disable-nan-check禁用 NaN 值检查可能会提高性能,但可能导致输出损坏

来源: modules/devices.py242-265

硬件特定优化

NVIDIA GPU

  1. TF32 模式:兼容卡自动启用
  2. CUDNN Benchmark:为 GTX 16 系列卡启用,以提高 FP16 支持
  3. Autocast:用于在支持的卡上实现最佳混合精度

来源: modules/devices.py101-113 modules/devices.py26-32

Apple Silicon (MPS)

  1. 自定义内存管理:MPS 的专用垃圾回收
  2. 手动转换:为了在 Apple Silicon 上获得最佳性能

来源: modules/devices.py19-23 modules/devices.py84-85

Intel XPU

当提供 `--use-ipex` 标志时,通过专门的内存管理支持。

来源: modules/devices.py11-16 modules/devices.py87-88

精度和类型管理系统

Web UI 实现了一个复杂的系统,用于处理模型组件的不同精度要求。

来源: modules/devices.py126-130 modules/devices.py210-231 modules/devices.py242-265

首次计算优化

系统会执行初始计算以预分配 GPU 内存,这可以防止首次实际生成时的卡顿。

此操作会预分配约 700MB 内存,在 NVIDIA GPU 上大约需要 2.7 秒,但会让后续操作更流畅。

来源: modules/devices.py268-281

性能问题故障排除

NaN 值检测

系统可以检测张量中的 NaN(非数字)值,这通常表示与精度相关的问题。

  1. 对于 UNet NaN 问题:尝试在设置中启用“将交叉注意力层上转换为 float32”,或使用 `--no-half`。
  2. 对于 VAE NaN 问题:尝试使用 `--no-half-vae` 命令行参数。

来源: modules/devices.py238-265

GroupNorm32 处理

当启用 `force_fp16` 时,系统会将 `ldm` 和 `sgm` 模块中的 GroupNorm32 实现替换为标准的 `torch.nn.GroupNorm`,以防止意外转换为 float32。

来源: modules/devices.py284-295

总结

优化 Stable Diffusion Web UI 的性能涉及平衡精度设置、硬件选择和内存管理。该系统提供了广泛的选项,可根据您的具体硬件能力和需求进行性能调优。