本页面提供技术文档,介绍如何在不同硬件配置下优化 Stable Diffusion Web UI 的性能。内容涵盖设备管理、内存优化、精度设置以及提高生成速度和效率的技术。有关常见错误故障排除,请参阅 常见错误。
Stable Diffusion Web UI 会根据可用性自动选择最优的硬件设备来运行推理。系统支持 CUDA(NVIDIA GPU)、MPS(Apple Silicon)、Intel XPU、HUAWEI NPU 以及 CPU 作为备用。
get_optimal_device_name() 和 get_optimal_device() 函数实现了此逻辑,按性能优先级检查可用硬件。
Stable Diffusion Web UI 支持多种精度模式,以平衡质量和内存使用。主要选项如下:
| 精度模式 | 描述 | 命令行选项 |
|---|---|---|
| 全精度 (FP32) | 使用 32 位浮点数,质量最高,但速度较慢且占用更多 VRAM | --no-half |
| 半精度 (FP16) | 使用 16 位浮点数,质量和速度平衡良好 | 默认 |
| 强制 FP16 | 强制所有模型使用半精度 | --precision half |
| 混合精度 | 使用自动混合精度,以获得最佳精度组合 | 自动行为 |
Web UI 为每种支持的硬件平台实现了专门的垃圾回收。
对于拥有 Tensor Cores 的 NVIDIA GPU(安培架构及更新版本),TF32 模式可以在精度损失极小的情况下显著提高性能。除非明确禁用,否则该模式会自动启用。
以下命令行参数可用于优化性能:
| 参数 | 描述 | 影响 |
|---|---|---|
--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.py101-113 modules/devices.py26-32
来源: modules/devices.py19-23 modules/devices.py84-85
当提供 `--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 秒,但会让后续操作更流畅。
系统可以检测张量中的 NaN(非数字)值,这通常表示与精度相关的问题。
当启用 `force_fp16` 时,系统会将 `ldm` 和 `sgm` 模块中的 GroupNorm32 实现替换为标准的 `torch.nn.GroupNorm`,以防止意外转换为 float32。
优化 Stable Diffusion Web UI 的性能涉及平衡精度设置、硬件选择和内存管理。该系统提供了广泛的选项,可根据您的具体硬件能力和需求进行性能调优。