Stable Diffusion WebUI 如何配置多显卡并行推理参数

文章导读
Stable Diffusion WebUI 原生不支持将单张图像的生成任务拆分到多张显卡并行加速。多显卡场景通常通过启动多个实例并绑定不同显卡来实现并发处理,而非单任务并行。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Stable Diffusion WebUI 原生不支持将单张图像的生成任务拆分到多张显卡并行加速。多显卡场景通常通过启动多个实例并绑定不同显卡来实现并发处理,而非单任务并行。

先说结论:Automatic1111 WebUI 默认仅调用单张显卡,多卡并行需通过环境变量隔离实例实现。

  • 适合:需要同时处理多个生成任务或运行不同模型的多显卡环境
  • 先准备:确认每张显卡显存独立且驱动正常,规划不同端口号
  • 验收:通过任务管理器或 nvidia-smi 确认各实例独占对应显卡

命令速用版

在 Windows 环境下,通过设置环境变量 CUDA_VISIBLE_DEVICES 指定显卡启动实例。以下命令示例将第一个实例绑定到 0 号显卡,第二个实例绑定到 1 号显卡。

set CUDA_VISIBLE_DEVICES=0&& python webui.py `--port` 7860

set CUDA_VISIBLE_DEVICES=1&& python webui.py `--port` 7861

Linux 环境下则在命令前 export 变量或直接前置变量启动。

为什么会这样

PyTorch 后端默认仅可见第一张可用显卡,WebUI 未内置多卡负载均衡逻辑。Stable Diffusion 模型加载时需要占用大量显存,原生架构设计为单进程单设备模式,无法自动将计算图拆分到多卡。因此必须通过操作系统层面的环境变量隔离,让每个进程只看到指定的显卡设备。

分步处理

第一步,复制启动脚本。将 webui-user.bat(Windows)或 webui-user.sh(Linux)复制一份,命名为 webui-user-2.bat,用于第二个实例。

第二步,修改环境变量。在第一个脚本中保留默认设置或明确写入 set CUDA_VISIBLE_DEVICES=0。在第二个脚本的 COMMANDLINE_ARGS 之前添加 set CUDA_VISIBLE_DEVICES=1,确保进程仅识别第二张显卡。

Stable Diffusion WebUI 如何配置多显卡并行推理参数

第三步,修改端口号。在第二个脚本的 COMMANDLINE_ARGS 中添加 `--port` 7861,避免与第一个实例的 7860 端口冲突。若启用 API,还需注意 `--api` 参数可能涉及的端口占用。

第四步,启动实例。分别运行两个脚本,观察控制台输出日志,确认没有 CUDA 初始化错误。

怎么验证是否生效

打开任务管理器性能标签页或命令行输入 nvidia-smi。观察 GPU 0 和 GPU 1 的显存占用情况,确认第一个进程只占用 GPU 0 显存,第二个进程只占用 GPU 1 显存。若发现单张显卡显存被两个进程同时占用,说明环境变量配置未生效。

常见坑

多实例加载相同模型会导致显存重复占用。每张显卡都会独立加载一份模型权重,若显存不足会导致 OOM 错误。建议不同实例加载不同模型,或确保每张显卡显存足够独立承载完整模型。端口冲突是另一常见问题,每个实例必须分配独立的 `--port` 端口号。

常见问题

多显卡能让单张图生成速度变快吗

不能。原生 WebUI 不支持单任务多卡并行,增加显卡不会减少单张图像的生成时间。

不同实例可以使用不同模型吗

可以。每个实例独立运行,可以在不同网页端口加载不同的 Checkpoint 模型互不干扰。

显存不足时能否让多卡共同加载一个模型

不支持。WebUI 没有模型并行功能,显存不足需更换大显存显卡或使用 `--medvram` 参数优化单卡占用。

参考来源

  • AUTOMATIC1111 stable-diffusion-webui GitHub Repository, Wiki & Issues, https://github.com/AUTOMATIC1111/stable-diffusion-webui