ComfyUI 多 GPU 使用指南:切换至 GPU 1、--cuda-device 参数及双实例方案
Windows 与 Linux 下的 ComfyUI 多 GPU 配置:使用 --cuda-device 选择 GPU 1、在不同端口运行双实例,并避免对工作流分割的错误假设。
如果你搜索的是 comfyui multi gpu、comfyui use gpu 1、comfyui --cuda-device 或 comfyui two gpus,简短的答案是:
- 一个普通工作流通常只运行在一块选定的 GPU 上
- 使用两块 GPU 的实用方式通常是在两个端口上各运行一个 ComfyUI 实例
--cuda-device是"使用 GPU 1 而非 GPU 0"最安全的启动参数
大多数用户的最佳做法是将一个 ComfyUI 实例分配给一块 GPU、另一个实例分配给另一块,而不是期望一个 KSampler 自动在多张显卡之间拆分执行。
快速参考
| 目标 | 最佳方案 | 示例 |
|---|---|---|
| 使用 GPU 1 而非 GPU 0 | 以 --cuda-device 1 启动 ComfyUI | python main.py --cuda-device 1 |
| 同时运行两个队列 | 在不同端口启动两个 ComfyUI 实例 | --cuda-device 0 --port 8188,--cuda-device 1 --port 8189 |
| 保持所有 GPU 可见但优先使用某一块 | 仅在明确知道原因时使用 --default-device | python main.py --default-device 1 |
| 让一个 KSampler 跨 GPU 拆分执行 | 默认情况下通常不支持 | 使用明确支持该功能的模型或节点 |
| 缓解显存压力 | 使用显存相关参数或更小的工作流 | --lowvram、降低分辨率、量化模型 |
搜索意图分类
| 搜索词变体 | 最佳答案 |
|---|---|
comfyui use gpu 1 | 在该 ComfyUI 进程的启动命令中添加 --cuda-device 1 |
comfyui --cuda-device | 用于对该进程隐藏其他所有 CUDA 设备,使选定显卡成为唯一可见的活动 GPU |
comfyui run two instances | 在两个不同端口(如 8188 和 8189)各运行一个 ComfyUI 进程 |
comfyui default device | 仅在自定义场景需要保持其他设备可见时使用 --default-device |
comfyui out of memory two gpus | 优先将其视为显存或工作流问题;大多数工作流不会自动将一个模型拆分到多张显卡上 |
ComfyUI 中"多 GPU"的含义
人们常将三个不同的概念混为一谈:
- 选择单块 GPU:ComfyUI 在指定设备上运行。
- 运行多个实例:两个浏览器会话、两个端口、两个队列、两块 GPU。
- 将一个工作流拆分到多块 GPU:单个模型或工作流同时使用多块 GPU。
前两种是可行的。第三种不是大多数标准 ComfyUI 工作流能自动实现的。
第一步:检查你的 GPU
在装有 NVIDIA GPU 的 Windows 或 Linux 上,运行:
nvidia-smi查看左列中的 GPU 索引。第一张显卡通常是 0,第二张通常是 1。
然后确认 PyTorch 能识别 CUDA:
python -c "import torch; print(torch.cuda.device_count()); print(torch.cuda.get_device_name(0))"如果 torch.cuda.device_count() 返回 0,你面对的还不是多 GPU 问题,而是 PyTorch/CUDA 安装问题。请先参阅 GPU 兼容性。
第二步:使用 --cuda-device 选择单块 GPU
手动安装方式:
python main.py --cuda-device 1使用 Windows 便携版时,编辑或复制你的启动 .bat 文件,在 main.py 后添加该参数:
.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --cuda-device 1ComfyUI 官方参数说明指出,--cuda-device 用于设置该实例所使用的 CUDA 设备,并对该进程隐藏其他设备。
这意味着 ComfyUI 在选定进程内部仍可能打印 cuda:0。这是正常现象,因为所选 GPU 对该进程来说是唯一可见的设备。
第三步:在两块 GPU 上运行双实例
使用不同端口,避免两个服务器发生冲突。
实例 A:
python main.py --cuda-device 0 --port 8188实例 B:
python main.py --cuda-device 1 --port 8189然后分别打开:
http://127.0.0.1:8188
http://127.0.0.1:8189这是生产环境中最可靠的多 GPU 模式:每块 GPU 对应一个独立队列。
正式并行工作时建议使用独立用户目录
如果两个实例每天都处于活跃状态,建议为它们配置不同的 --user-directory 路径,避免浏览器状态、工作流标签和用户设置相互干扰。
示例:
python main.py --cuda-device 0 --port 8188 --user-directory user-gpu0
python main.py --cuda-device 1 --port 8189 --user-directory user-gpu1第四步:了解 --default-device
ComfyUI 还提供了 --default-device 选项,用于设置默认设备,同时保持其他设备可见。
这听起来很吸引人,但它并不等同于自动多 GPU 执行。仅在工作流、自定义节点或高级场景需要其他设备保持可见时才使用该选项。
对大多数用户而言,--cuda-device 更易于理解和使用。
第五步:不要用多 GPU 来掩盖显存问题
如果工作流因某块 GPU 显存不足而失败,添加第二块 GPU 通常不会让同一个模型神奇地跑起来。请先尝试以下方案:
- 降低图像分辨率
- 减小批处理大小
- 关闭其他占用 GPU 的应用
- 在合适时使用量化模型
- 以
--lowvram启动 ComfyUI - 使用更小的模型或工作流
请参阅 ComfyUI Python 内存不足 获取更深入的排查路径。
常见错误
| 错误做法 | 为何失败 | 更好的方案 |
|---|---|---|
| 在同一服务器上打开两个浏览器标签 | 两个标签仍使用同一个 ComfyUI 进程 | 在另一个端口启动第二个进程 |
在错误位置添加 --cuda-device 1 | 该参数未传递给 main.py | 在启动命令中将其放在 main.py 之后 |
| 期望一个工作流自动跨两块 GPU 拆分 | 标准节点通常只在一块选定设备上运行 | 使用独立队列或专用节点 |
两个实例都使用 8188 端口 | 一个端口只能被一个进程占用 | 分别使用 8188 和 8189 |
| 安装了仅 CPU 版本的 PyTorch | ComfyUI 无法使用任何 NVIDIA GPU | 重新安装带 CUDA 支持的 PyTorch |
如何验证配置
启动 ComfyUI 并查看启动日志,你应该在设备信息行附近看到你的 GPU 名称:
Device: cuda:0 NVIDIA GeForce ...然后在生成过程中观察 nvidia-smi。如果你运行了两个实例,分别在每个实例中提交一个小型工作流,确认每块 GPU 都显示出活动状态。
如果只有一块 GPU 处于忙碌状态,请检查:
- 浏览器正在使用哪个端口
- 两个进程是否仍在运行
- 每条启动命令是否使用了不同的
--cuda-device - 第二个进程是否因端口已被占用而启动失败
Wonderful Launcher 的帮助
当你希望维护多个稳定的 ComfyUI 环境而非依赖一个脆弱的单一目录时,Wonderful Launcher 是一个很好的选择:
- 为普通图像生成保留干净的 GPU 0 环境
- 为实验性功能或视频节点保留独立的 GPU 1 环境
- 避免不同队列之间的自定义节点依赖冲突
- 在修改启动参数前保留可正常运行的工作流
如果你还在选择硬件,请从 GPU 兼容性 开始了解。如果 ComfyUI 能启动但浏览器持续断开连接,请参阅 ComfyUI 重连错误。
相关指南
参考资料
先按上面的步驟定位根因。还卡住时,可以下载 Wonderful Launcher 检查目前机器;启动器原生修复、任务日誌和執行階段检查会集中在一起。credits 只用於图片生成和按量工具。
下载 Wonderful Launcher查看 credits 方案这篇文件解決了你的問题嗎?
你的回饋会帮助我们優先補強真實 ComfyUI 排障文件。