ComfyUI 多 GPU:怎样安全使用多张显卡
解释 ComfyUI 在多 GPU 场景下能做什么、不能做什么,说明 --cuda-device 的用法,以及怎样把两个实例跑在不同端口上。
ComfyUI 可以指定使用某一张 GPU,也可以在不同 GPU 上各跑一个独立实例。
如果你搜的是 comfyui multi gpu,先记住三个结论:
- 大多数普通工作流默认还是只会跑在一张已选中的 GPU 上
- 更实用的多卡方案通常是 两个 ComfyUI 实例 + 两个端口 + 两张 GPU
- 想让 ComfyUI 从 GPU 0 换到 GPU 1,最常用的参数是
--cuda-device
很多人希望一个 KSampler 自动把同一个工作流拆到两张卡上,但这通常不是标准 ComfyUI 工作流默认会做的事。
快速答案
| 目标 | 推荐做法 | 例子 |
|---|---|---|
| 用 GPU 1 代替 GPU 0 | 用 --cuda-device 1 启动 | 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 |
| 想让一个工作流自动跨两张卡 | 默认通常不支持 | 需要明确支持分布式或多卡的模型 / 节点 |
| 显存不够想靠第二张卡兜底 | 通常不现实 | 先缩分辨率、缩 batch、用低显存模式 |
多 GPU 在 ComfyUI 里通常分三种情况
- 选一张 GPU 来跑:例如固定跑在 GPU 1。
- 跑多个实例:一个实例用 GPU 0,另一个实例用 GPU 1。
- 把同一个工作流拆到多张 GPU:单个模型或单个工作流真正跨卡并行。
前两种是常见、可操作的。第三种不是多数标准工作流的默认行为。
第 1 步:先确认你的显卡编号
在 Windows 或 Linux 上先运行:
nvidia-smi通常第一张卡是 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 问题,而是 Torch 或 CUDA 根本没装好。先去看 GPU Compatibility。
第 2 步:用 --cuda-device 选定一张 GPU
手动安装版:
python main.py --cuda-device 1Windows 便携包可以在启动命令后面加:
.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --cuda-device 1--cuda-device 的核心作用是:当前这个 ComfyUI 进程只看见并使用你指定的那张卡。
所以即使日志里仍打印 cuda:0,也不一定是错的。因为对这个进程来说,选中的那张卡可能已经变成了“唯一可见卡”。
第 3 步:两张卡最稳的做法是跑两个实例
实例 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这才是多数生产场景下最稳的多卡模式:一张卡一个队列。
如果你长期这样用,建议顺手把用户目录也分开:
python main.py --cuda-device 0 --port 8188 --user-directory user-gpu0
python main.py --cuda-device 1 --port 8189 --user-directory user-gpu1这样浏览器状态、工作流标签和用户设置不容易互相打架。
第 4 步:理解 --default-device
ComfyUI 还有一个 --default-device。它和 --cuda-device 不一样:
--cuda-device更像“只给这个进程一张卡”--default-device更像“默认优先这张卡,但别的卡仍然可见”
大多数用户只需要 --cuda-device。只有在你明确知道某些节点或高级工作流需要保留其他设备可见时,再考虑 --default-device。
第 5 步:不要把多 GPU 当成显存补丁
如果根因是某个工作流单卡显存不够,第二张卡通常不会自动让同一个模型“拼卡成功”。
优先做这些:
- 降低分辨率
- 降低 batch size
- 关闭其他占显存程序
- 需要时加
--lowvram - 用量化模型或更小模型
如果你真正的问题是显存压力,先看 Python Out of Memory in ComfyUI。
常见误区
| 误区 | 为什么不对 | 更好的做法 |
|---|---|---|
| 只开两个浏览器标签页 | 两个标签页还是同一个 ComfyUI 进程 | 真正再起一个新进程 |
把 --cuda-device 1 放错位置 | 参数没有传给 main.py | 确保参数跟在 main.py 后面 |
| 期待一个工作流自动分到两张卡 | 标准节点通常不会默认跨卡 | 用两个实例,或者用明确支持多卡的方案 |
两个实例都占用 8188 | 同一个端口只能被一个进程绑定 | 用 8188 和 8189 |
| 装成 CPU-only Torch | ComfyUI 根本用不到 NVIDIA GPU | 重装正确 CUDA wheel |
怎么验证配置生效
启动后先看 ComfyUI 日志里的设备信息,例如:
Device: cuda:0 NVIDIA GeForce ...再在生成时观察 nvidia-smi。如果你跑了两个实例,就分别在两个端口各排一个小任务,确认两张 GPU 都有活动。
如果只有一张卡有负载,回头检查:
- 你打开的是不是正确端口
- 两个进程是不是都还活着
- 两个命令是不是确实用了不同的
--cuda-device - 第二个实例是不是因为端口冲突没启动成功
相关页面
如果这个问题已经碰到你真实在用的 ComfyUI 环境,先用 Wonderful Launcher 接管和检查当前机器,再配合文档决定怎么修。
下载 Wonderful LauncherDid this fix your issue?
Your answer helps prioritize verified ComfyUI repairs.