ComfyUIで使うGPUを指定する|v0.34以降のWindowsは既定で1枚しか使わない

ComfyUIで使うGPUを指定する|v0.34以降のWindowsは既定で1枚しか使わない に関する記事のアイキャッチ画像 ComfyUI
この記事の要点

  • いま生成に使われているカードは、起動ログの Device 行と http://127.0.0.1:8188/system_stats の devices を数え、cuda:0 に出ている名前を読めば分かる
  • 2枚とも見せるには起動行の末尾に --cuda-device all を足す。ただし見せるだけでは、今回測った通常のワークフロー1本は速くならなかった
  • 出力し終えるまでの時間を縮めたいなら、ComfyUI を2つ起動し、2つ目に --cuda-device 1 --port 8288 を与えて枚数を配る(--port だけだと2つとも同じカードに載る)

数字はすべて v0.34.5 の Windows 11、RTX 5080 と RTX 5060 Ti、SDXL での測定。1本の生成を複数GPUへ分割する経路、動画生成、Linux と macOS は測っていない。cuda:0 の名前で生成先が分かるのは、配置ノードを置かない通常のワークフローの場合。

ComfyUIがいまどのGPUを使っているかを確かめる

GPUを2枚積んでいるのに ComfyUI が片方しか使っていないように見えるとき、最初に疑うのは設定画面ではなく起動時の指定である。v0.34.5 の Windows では、GPUを選ぶ指定を何も書かずに起動すると、CUDA が数える順の先頭の1枚 (cuda:0) だけが見える状態で立ち上がる。2枚積めば両方が見える、という前提が成り立たない。なお ComfyUI 自体に必要なスペックはComfyUI推奨スペック実測ガイドにまとめてある。

いま何枚見えているかは2箇所で数えられる。ひとつはコンソールに出る起動ログで、その起動で ComfyUI が見えているデバイスは Device で始まる行に1枚ずつ並ぶ。公式Windows Portable なら、bat をダブルクリックしたときに開くコンソール窓がそれにあたる。この起動ログは既定では標準エラー出力に送られるが、コンソールに表示される点は変わらない(標準出力へ送るには --log-stdout を付ける)。もうひとつはブラウザで http://127.0.0.1:8188/system_stats を開き、devices 配列の件数を数える方法で、待ち受けポートを変えている場合はその番号に読み替える。

起動条件 起動ログの Device 行 /system_stats の devices
指定なし 1行 (cuda:0 NVIDIA GeForce RTX 5080) 1件
CUDA_VISIBLE_DEVICES=0,1 2行 (cuda:0 RTX 5080 と cuda:1 RTX 5060 Ti) 2件

2箇所は同じ枚数を返す。数えるのは枚数だけでなく名前も含めたい。本体同梱の SelectModelDevice のような配置ノードを使わない通常のワークフローであれば、cuda:0 に出ている名前が、その起動で生成を走らせるGPUである。ここに出ている名前が、指定を足さないまま回している限り生成に使われ続けるカードである。どのカードが cuda:0 になるかは CUDA の並び順で決まり、既定は最速優先 (FASTEST_FIRST) なので通常は速い方が先頭に来る。ただし CUDA_DEVICE_ORDER に PCI_BUS_ID を設定している環境では PCI バスID の昇順になるため、並び順を推測せず起動ログの名前で確かめる。

枚数を数えた結果が ComfyUI 以外のランタイムでも同じなら、原因は ComfyUI の外にある。切り分けの手順はWindows+OCuLink で2枚目が使われる条件で扱っている。

v0.34以降のWindowsでは指定しないとGPUが1枚しか見えない

v0.34.5 は、--cuda-device--default-device も環境変数 CUDA_VISIBLE_DEVICES も指定が無いとき、CUDA_VISIBLE_DEVICES0 を設定してから起動する。この分岐は os.nament のとき、つまり Windows のときだけ通る。

v0.34.5 はこの絞り込みを行うときに警告を出さない。何も表示されないまま1枚に絞られるので、2枚目が見えないのが機材側の問題なのか本体の既定なのか、起動ログからは判別できない。警告を追加する変更は PR 16055 として2026年9月3日に master へマージされているが、2026年9月6日時点では v0.34.5 までのどのタグにも入っていない。

公式Portableの起動batにGPU指定は無い

公式Windows Portable に同梱される run_nvidia_gpu.bat は3行で構成される。ComfyUI を起動しているのは main.py--windows-standalone-build だけを渡す1行で、残る2行はドライバ更新と vc redist を案内する echo と pause である。

.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build

GPUを選ぶ指定はどの行にも無い。配布物をそのまま使っている場合、指定なしの起動に該当する。

影響を受ける起動と、受けない起動

絞り込みが通るのは --cuda-device--default-device・環境変数 CUDA_VISIBLE_DEVICES のいずれも与えずに起動した場合で、このうちどれか1つでも与えてあれば分岐に入らない。

今回の構成では cuda:0 に RTX 5080 が出たため、指定なしのままでも生成は速いカードで走った。どのカードが cuda:0 になるかは並び順の設定で変わるので、他の機体でも同じとは限らない。SDXL の同じワークフローを RTX 5060 Ti だけに見せた条件では、中央値が RTX 5080 の約2倍 (正順で約2.05倍、逆順で約1.96倍) かかっている。指定を足すかどうかの判断材料は枚数ではなく、見せた1枚がどちらのカードかである。

この既定が入った時期

この既定を含む最初のリリースタグは v0.34.0 で、v0.33 系には入っていない。2026年9月6日時点の最終タグは v0.34.5 である。v0.33 系を使い続けている環境では、この分岐に当たらない。

2枚を見えるようにする書き方

生成時間まで測った書き方は3通りある。Portable 利用者は run_nvidia_gpu.bat をコピーして別名で保存し、起動行の末尾にフラグを足す。

.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --cuda-device all

--cuda-device all は v0.34.5 の実装で受け付けられ、CUDAデバイスを絞らずに残す。PR 16055 が追加した警告でも、Windows の1枚制限を外す指定として案内されている。IDをカンマ区切りで並べる書き方も同じフラグで、--cuda-device 0,1 と書けば2枚とも残る。

環境変数で渡す場合、cmd では起動前に次の1行を実行する。この指定は打ったウィンドウの中でだけ有効なので、同じコマンドプロンプトから続けて起動用の bat を実行する(bat をダブルクリックすると別のセッションになり、この指定は渡らない)。

set CUDA_VISIBLE_DEVICES=0,1

環境変数が設定されていれば1枚に絞る分岐そのものが通らないため、0,1 のように複数のIDを並べておけば2枚とも残る。

起動時のフラグ全般はComfyUIの起動オプション実測ガイドで別に扱っている。生成時間は測っていないが、経路としてはもうひとつ --default-device がある。デバイスIDを整数で1つ受け取って既定のデバイスを決めるもので、指定したIDを先頭に並べ替えた CUDA_VISIBLE_DEVICES を組み立てる作りのため、他のデバイスは見えたまま残る。可視GPUを1枚に絞る指定ではなく、この指定があるときも1枚に絞る分岐は通らない。

書き方 書く場所 デバイスの見え方 今回の生成時間の測定
--cuda-device all 起動行の末尾 いま見えているデバイスをすべて残す 測った
--cuda-device 0,1 起動行の末尾 並べたIDのデバイスが残る 測った
CUDA_VISIBLE_DEVICES=0,1 起動前の環境変数 (cmd では set) 並べたIDのデバイスが残る 測った
--default-device 0 起動行の末尾 指定したIDが既定になり、他のデバイスも見えたまま残る 測っていない

PR 16055 が追加した警告文によれば、1枚に絞る既定は NVIDIA 由来の問題への対処として本体に入ったものとされている。指定して2枚を見せるのは、本体の既定を外す操作にあたる。導入時の PR 15737 では --cuda-device all--disable-pinned-memory を組み合わせる案内が付いていたが、その警告は PR 15813 で削除され、PR 16055 が追加した現在の警告が案内しているのは --cuda-device all だけである。

見えるようにするだけでも、2枚目のVRAMがまったく触られないわけではない。--cuda-device all で起動した条件では、生成中の2枚目のピークが 114MiB だった。今回の条件では16GBに対して1%未満で、見えるようにしただけによる2枚目のVRAM消費は小さかった。裏返せば、見せただけの2枚目はこの程度しか使われていない。2枚を実際に運用する手順と、VRAMが合算されるわけではない件はComfyUI マルチGPU運用ガイドにまとめてある。

2枚見えても1本の生成は速くならない

測定条件を先に置く。SDXL Base 1.0、1024×1024、20ステップ、euler、cfg 7.0。ウォームアップ後5回の中央値を取り、条件を並べる順序を入れ替えた2パスで測った。外部のカスタムノードは無効化してあるが、--disable-all-custom-nodes が読み込み対象から外すのは外部のカスタムノードであり、comfy_extras の本体同梱ノードは無効化されない。実測表では物理の搭載順で呼び、1枚目が RTX 5080、2枚目が OCuLink 接続の RTX 5060 Ti である。どちらも16GB。2枚目をどう挿すかで帯域が変わる点はマザーボードとPCIeレーンの選び方で扱っている。

条件どうしの差を語る前に、条件内のばらつきを見ておく。同じ条件を繰り返したときの幅は、正順のパスで 0.7〜4.5%、逆順のパスで 1.6〜9.0% あった。

起動条件 ComfyUIから見えるGPU 生成時間 中央値 (正順) 生成時間 中央値 (逆順) 条件内の幅 (正順/逆順) 2枚目のピーク
指定なし 1枚 (RTX 5080) 3.895秒 4.080秒 4.5% / 9.0% 0MiB
--cuda-device all 2枚 (5080 と 5060 Ti) 3.905秒 3.906秒 0.9% / 6.2% 114MiB
CUDA_VISIBLE_DEVICES=1 1枚 (RTX 5060 Ti) 7.981秒 7.983秒 1.2% / 1.6% 9,572MiB
--cuda-device 0,1 2枚 (5080 と 5060 Ti) 3.897秒 3.922秒 0.7% / 4.1% 114MiB
CUDA_VISIBLE_DEVICES=0,1 2枚 (5080 と 5060 Ti) 3.903秒 3.906秒 1.7% / 4.7% 114MiB

表から外した「1枚目のピーク」は、ComfyUI が1枚目で生成した4条件のいずれでも、繰り返しごとに高い水準と低い水準を行き来した。4条件を通した範囲は 8,471〜11,582MiB で、低い側の水準は条件によって 8.5GB 前後から 9.8GB まで動く。条件内の最大幅は --cuda-device all の 8,753〜11,253MiB だった。条件ごとの特徴として読める動きではないため、この値で条件間を比べない。二山になる理由はこの測定では確かめていない。

  • 指定なし: 9,848〜11,582MiB
  • --cuda-device all: 8,753〜11,253MiB
  • --cuda-device 0,1: 8,475〜10,874MiB
  • CUDA_VISIBLE_DEVICES=0,1: 8,471〜10,871MiB
  • CUDA_VISIBLE_DEVICES=1: 1,406〜1,525MiB (この分は ComfyUI が使ったものではない)

表の「1枚目」「2枚目」は物理の搭載順を指し、1枚目が RTX 5080、2枚目が RTX 5060 Ti である。CUDA_VISIBLE_DEVICES=1 の条件は ComfyUI から見える1枚が RTX 5060 Ti になるため、生成は2枚目で走っている。

読み取れることは単純である。2枚とも見せた3条件と指定なしの差は、どれも繰り返しの幅の内側に収まる。正順のパスで最も短かったのは指定なしの条件だが、逆順のパスでは2枚見せた3条件より長く、順序を入れ替えると再現しなかった。この構成とこのワークフローでは、見せる枚数を増やしても1本の生成時間は動かないと読める。生成は常に1枚で走っており、2枚目へ処理を分割してはいない。本体同梱の MultiGPU 系ノードは読み込まれた状態だが、ワークフローには置いていない。

幅を大きく超える差が出たのは、見せた1枚が RTX 5060 Ti になった条件である。生成時間を決めているのは見えている枚数ではなく、生成が走ったカード(通常のワークフローでは cuda:0 に出るカード)がどちらかだった。

単一機・単一モデルの測定であり、動画生成・他のモデル・Linux や macOS は測っていない。各条件の開始前には2枚目の使用量が 0MiB であることを確認している。2枚目のピークは条件ごとに 0MiB・114MiB・9,572MiB と分かれるが、同じ条件を10回繰り返した中では毎回同じ値だった。VRAMの余裕そのものが生成時間を動かすかどうかは、使えるVRAMを絞ると生成は遅くなるかで別に測っている。

枚数を配ると出力し終えるまでの時間が縮む

手順の前提をひとつ先に置く。ComfyUI の待ち受けポートの既定は 8188 で、2つ目を既定のまま起動するとポートが衝突する。2つ目には --port で別の番号を与え、あわせて --cuda-device でもう一方のカードを割り当てる。--cuda-device に書くのは CUDA が数える順のIDなので、cuda:1 がどちらのカードかは起動ログの名前で確かめる。--port だけを足すと2つ目も同じカードに載り、後で出てくる「どちらも指定なし」の条件と同じになる。

.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --cuda-device 1 --port 8288

2枚に振り分けても、2本が出そろうのは RTX 5060 Ti が終わってから

ComfyUI を2つ起動し、同じワークフローを1本ずつ同時に投入した。3回の中央値である。

2つの起動のしかた 実際に使われたGPU 先に終わった1本 後に終わった1本 2本が出そろうまでの壁時計
どちらも指定なし 両方とも1枚目 (1枚目ピーク15,780〜15,794MiB、2枚目0MiB) 9.16秒 11.37秒 11.37秒
CUDA_VISIBLE_DEVICES=0 と =1 1枚目と2枚目 (9,398MiB と 9,572MiB) 3.85秒 7.94秒 7.95秒
--cuda-device 0 と --cuda-device 1 1枚目と2枚目 4.06秒 8.09秒 8.09秒

2枚を同時に回したときの消費電力は1枚/2枚構成の電力実測で別に測っている。どちらも指定なしで起動した条件 (GPUを選ぶ指定だけが無く、2つ目には --port で別番号を与えている) では、2つ目の ComfyUI も1枚目に載る。この条件の「先に終わった1本」「後に終わった1本」は、同じGPU上で走った2本を指している。振り分けた2条件では、先に終わるのが RTX 5080 に投げた1本、後に終わるのが RTX 5060 Ti に投げた1本で、2本が出そろう時刻は RTX 5060 Ti に投げた1本が終わる時刻で決まる。2本だけを同時に流したときの値であり、本数を増やした場合は別に測った。

同じ8枚を出力する時間で比べる

同じ8枚を出力し終えるまでの壁時計を各2回測った。モデルロードは事前に済ませてある。

構成 内訳 8枚の壁時計 1秒あたりの枚数
RTX 5080だけ 8枚 31.57秒 0.253枚
5080に5枚 と 5060 Tiに3枚 5080が19.5秒で5枚、5060 Tiが24.3秒で3枚 24.27秒 0.330枚

RTX 5080 だけで8枚を出力すると 31.57秒、5枚と3枚に配ると 24.27秒だった。RTX 5080 は割り当てられた5枚を 19.5秒で終えており、24.27秒との差は RTX 5060 Ti を待っている時間である。縮んだのは8枚を出力し終えるまでの時間であって、1本あたりが速くなったわけではない。配分後の RTX 5060 Ti は3枚を 24.3秒で出力しており、1枚あたりでは、速度差を考慮すれば当然 RTX 5080 より遅い。

同じ8枚を出力し終えるまでの時間 (1つで8枚と、ComfyUI を2つ起動して2枚へ配った場合)同じ8枚をSDXL Base 1.0で出力し終えるまでの時間を比べた図。RTX 5080だけで8枚を出力すると31.57秒。ComfyUI を2つ起動して5080に5枚・RTX 5060 Tiに3枚を配ると、5080は割り当てられた5枚を19.5秒で終え、5060 Tiが24.3秒で3枚を終えて、全体は24.27秒になる。差は23.1パーセント短い。24.27秒と5080が終わった19.5秒の間は5060 Tiを待っている時間で、配分を最適化した場合の下限は測っていない。測定は2026年9月6日、ComfyUI v0.34.5、1024×1024、20ステップ、各2回。同じ8枚を出力し終えるまでの時間SDXL Base 1.0 / 1024×1024 / 20ステップ / 各2回RTX 5080 だけ8枚 31.57秒2つ起動して配る5080 が5枚 19.5秒5060 Ti が3枚 24.3秒23.1% 短い010203024.27秒は配分最適時の下限ではない
同じ8枚を出力し終えるまでの時間。ComfyUI を2つ起動して5080に5枚・5060 Tiに3枚を配ると31.57秒から24.27秒に縮む。

配る枚数は速いカードへ多めに寄せる必要がある。2本が出そろう時刻は遅いカードが終わる時刻で決まるため、均等に配ると RTX 5080 だけで出力し終える場合と変わらないこともある。今回は5枚と3枚という整数の配分による測定で、配分を最適化した場合は測っていない。この23.1%が速さの違う2枚に固有の値である点は、よくある質問で扱う。24.27秒はこの配分での値であり、配分最適時の下限ではない。枚数・解像度・ステップ数を変えれば比率も動く。

今回測ったのは ComfyUI を2つ起動して枚数を配る方法だが、1本の生成そのものを複数GPUへ分けて処理する経路も本体に用意されている。v0.34.5 には本体同梱のノードとして MultiGPU CFG Split があり、1本の生成のサンプリングを複数GPUへ分割する用途で提供されている。ただし公式ドキュメントが挙げる要件は Ampere 世代以降の同一機種GPU2枚 (公式の例は 2 x 3090 や 2 x RTX6000 Pro) で、異なる機種の混在は非対応としている。CFGが1のワークフローでは効果が出ないともしている。RTX 5080 と RTX 5060 Ti の組み合わせはこの要件を満たさないため、今回は測っていない。時間を縮める手段が枚数を配ることに限られるとは言えない。なお画像生成ではなくローカルLLMの場合、2枚目は1枚に収まらないモデルのオフロード解消では別の結果になる。

まとめ

目的別に、次に打つものを整理する。

  • いま既定でどちらのカードを使う状態か知りたい: 起動ログの Device 行と /system_statsdevices を数え、cuda:0 の名前を読む
  • 2枚とも見える状態にしたい: 起動行の末尾に --cuda-device all を足す。本体の既定を外す操作にあたる点は踏まえておく
  • まとめて出力するときの合計時間を縮めたい: ComfyUI を2つ起動し、2つ目に --cuda-device 1--port の別番号を与えて枚数を配る
  • 1本の生成そのものを速くしたい: 見せる枚数を増やしても、今回測った範囲では変わらなかった。1本を分割する MultiGPU CFG Split は Ampere 世代以降の同一機種2枚とCFGが1より大きいことが要件で、今回の構成は要件を満たさないため測っていない

2枚目を買い足すかどうかの判断材料も同じところにある。今回のように機種の異なる2枚では、2枚目から得られたのは1本あたりの速さではなく、同じ時間に出力できる枚数だった。単発でプロンプトを詰めていく使い方では今回の測定で差が出ず、まとめて出力する使い方で ComfyUI を2つ起動して枚数を配るなら、出力し終えるまでの時間が縮む。ただし Ampere 世代以降の同じ機種を2枚そろえ、CFGが1より大きいワークフローで使う場合は、本体同梱の MultiGPU CFG Split が要件上の対象になるので、機種を選べる買い足しでは取れる選択肢が変わる。

本記事の実測値は2026年9月6日、ComfyUI v0.34.5、当該構成での測定に基づく。

よくある質問

ComfyUIを2つ起動したときの1枚目のピーク 15,780〜15,794MiB は、1本ぶんの2倍なのか

足し算にはなっていない。単独で1本を走らせたとき、同じ「指定なし」の条件での1枚目のピークは 9,848〜11,582MiB だった。2つ起動したときの値はその2倍に届かない。なぜこの水準に収まるのかは、この測定では確かめていない。16GB に対する余りはわずかなので、同じGPUに2本を載せる使い方は上限に近いところで動くことになる。

2枚目を別のアプリで使っているが、--cuda-device all を足しても差し支えないか

見せるだけなら、2枚目のピークは 114MiB で 16GB の1%未満だった。一方、2つ目の ComfyUI に --cuda-device 1--port の別番号を与えて起動し、2枚目へ生成を投げる使い方では 9,572MiB を占める(--port だけでは2つとも同じカードに載る)。見せることと使わせることは分けて考えたい。

同じ機種のGPUを2枚積んだ場合はどうなるか

本体同梱の MultiGPU CFG Split について、公式ドキュメントが挙げる要件は同一機種のGPU2枚である。Ampere 世代以降の同じ機種を2枚積み、ワークフローのCFGが1より大きい構成は、要件の上ではこの経路の対象に入る。RTX 5080 と RTX 5060 Ti の組み合わせは要件を満たさず、その経路は測っていないため、分割したときに何秒になるかはこの記事の範囲外である。

枚数を配る方法についても、同じ機種を2枚積んだ構成では結果が変わる。本記事の23.1%は速さの違う2枚での値で、2本が出そろう時刻は遅いカードが終わる時刻で決まるぶん、短縮の上限が構造的に低い。同じ機種を2枚積めば配分に端数が出ないので、本記事の実測値から割り算すると、8枚を半分ずつ配ったときの短縮率は50%前後になる。ただしこれは実測値から計算した値であって、同機種2枚の構成は測っていない。

参考資料

タイトルとURLをコピーしました