RTX4080と5080のマルチGPUでstable diffusion 1111とstable diffusion Forgeを同時に画像生成させる

2025/6/1

一つのパソコンケースに2つの電源と2枚のビデオカードを入れる編からの続き


ハードウェアは順調に完成し、windows11はマザボ変更後も再認証の必要なくPINの再設定のみで起動し、ビデオカード2枚とも認識した。(CUDAでは第2スロットの5080がdevice1、第6スロットの4080がdevice0となった)
ここを参考にstable matrixでstable diffusion forgeを2つインストールし、起動オプションに「--device-id 0 --port 7681」「--device-id 1 --port 7682」と設定して2つ起動し生成実行すると、異常に遅い。
Hwinfoでビデオカード2枚の稼働を確認すると、4080しか動いてない!5080は遊んだままだ。
forgeの起動時のコンソール文字列を見ると、オプションで「--device-id 1」が通ってるのに、その後で「device 0 cuda NVIDIA 4080」を認識している。
原因を探るとredditで同じ悩みを抱えてる人が見つかり、どうもforgeでは起動時の--device-idの指定が無効になる?

これまでforgeを使ってきて慣れてるのだが、仕方なく5080用にAutomatic1111もインストールした。

Forgeはdevice id 0(4080)しか使えないので、1111の起動オプションに--device-id 1(5080)を入れる。
1111を起動すると「RuntimeError: CUDA error: no kernel image is available」が出て画像生成してくれない。
Forgeはmatrixが自動でRTX5000シリーズ対応バージョンのPyTorchを入れてくれたのに1111だとダメなんかーい。

となると、Forgeで5080を使わせ、1111で4080を使わせるのがいい。
5080をdevice id 0にして、「--device-id」が効く1111に4080を指定して使わせるようにする。
今パソコンには第2スロットに5080が、第6スロットに4080が刺さってるが、CUDAはカード応答速度が速い順にIDを割り当てるため4080がid 0に、5080がid 1になっている。(5080より4080の方がレスポンス早いのか!?OC版だから?)
これをPCIバス順にCUDAのdevice idを割り当てるように変更すればいい。
windows11の[システムの詳細設定]-[システム環境変数]-[変数名]に「CUDA_?DEVICE_?ORDER」を新規追加し、[変数値]に「PCI_BUS_ID」を入れてwindowsを再起動すると、5080がid 0に、4080がid 1になった。

これでForgeが5080を使うようになり、1111は起動オプションに「--device-id 1」を入れて4080が使えるようになった。

で、Foregeは元からサクサク画像生成してるが、1111で画像生成しようとすると、xformersのエラーが出て画像生成してくれない。
xformersのバージョンが今パソコンに入ってるCUDA12.8と合ってないせいだろう。
てっとり早く、1111の起動オプションからxformersを外して起動して生成させてみる…
UI画面に画像が表示されるまでは行けたが、途中で「Out of Memory」で止まってしまう。モデルデータが大きすぎてVRAMに収まりきらないということ?4080のVRAM16GBあるんだが…Xformersがないせいか。

結局、パソコンにRTX50xxシリーズに対応するCUDA12.8が入ってる以上、1111のRTX50xx対応化は必須ということか。
ここを参考にPyTorchとXformersをRTX50シリーズ対応版にアップデート。
すんなり1111で画像生成できるようになった。XL解像度でバッチサイズ2まで行けてる。(3だとたまにOut of Memoryで止まる。稀に2でも止まるので長時間放置生成なら1。)

4080と5080がフル稼働で画像生成中。
5080は大型ヒートシンクにより放熱性抜群で100%連続稼働でも外気温30度でGPU60度前半、4080はケース外にあり追加ヒートシンク・ファンを付けてあるのでオーバークロック連続稼働でGPU80度台でサーマルスロッティング発動無し。