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,确保进程仅识别第二张显卡。
第三步,修改端口号。在第二个脚本的 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