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 - 第二個實例是不是因為端口衝突沒啟動成功
相關頁面
先按上面的步驟定位根因。還卡住時,可以下載 Wonderful Launcher 檢查目前機器;啟動器原生修復、任務日誌和執行階段檢查會集中在一起。credits 只用於圖片生成和按量工具。
下載 Wonderful Launcher查看 credits 方案這篇文件解決了你的問題嗎?
你的回饋會幫助我們優先補強真實 ComfyUI 排障文件。