2枚挿せばその分高速になるが、スロットの制約も受ける
今回の検証は、以下のような環境で実施した。今回CPUはRyzen 7 7800X3DとRyzen 5 7600の2種類を用意した。PCゲームではRyzen 7 7800X3Dは現在最強のひとつといえるが、Stable Diffusionではどうなのか? それを検証するためにコア数もTDPも抑えめなRyzen 5 7600を比較用に準備している。
とはいえStable Diffusionにおける処理ではCPU負荷はさほど高くない(設定にもよるがせいぜい20%程度)ので、CPUの性能(3D V-Cache)はあまり効かないのではないかと予想している。また、ドライバーは最新のGameReady 552.22を使用した。
テスト環境 | |
---|---|
CPU | AMD「Ryzen 7 7800X3D」(8コア/16スレッド、最大5GHz) AMD「Ryzen 5 7600」(6コア/12スレッド、最大5.1GHz) |
CPUクーラー | NZXT「Kraken Elite 360」(簡易水冷、360mmラジエーター) |
マザーボード | ASRock「X670E Taichi」(AMD X670E、BIOS 3.01) |
メモリー | G.Skill「F5-6000J3636F16GX2-TZ5NR」(16GB×2、DDR5-6000) |
ビデオカード | 玄人志向「GALAKURO GAMING GG-RTX4070TiSP-E16GB/EX/TP」 玄人志向「GALAKURO GAMING GG-RTX4070SP-E12GB/DF」 |
ストレージ | Micron「CT1000T500SSD8」(1TB M.2 SSD、PCIe 4.0) |
電源ユニット | Super Flower「LEADEX PLATINUM SE 1000W-BK」 (1000W、80PLUS Platinum) |
OS | マイクロソフト「Windows 11 Pro」(23H2) |
Stable Diffusion+Automatic 1111環境においては、学習モデルは「DreamShaper XL」を使用し、TensorRTも組み込んだ。まず1GPU(CPU側)のみを使い40枚出力し、さらに同じプロンプト/設定で2GPUで20枚ずつ並列で出力する。1GPU×40枚の出力時間が仮に10分として、2GPU環境で20枚を各GPUが5分で出力できるなら2GPU環境のメリットはある、と考えられる。
今回のテストで使用した条件は以下の通りだ。記述なき部分はAutomatic 1111のデフォルト値を利用している。
- 出力解像度:768×768ドット/ 1024×1024ドット
- Sampling Method:DPM++ 3M SDE
- Sampling Steps:50
- CFG Scale:7
- Batch size:1
- 40(1GPU時)/ 各20(2GPU時)
- プロンプト:epic space battle over a water planet, many ships, cinematic lighting, Depth of Field, hyper-detailed, beautifully color-coded, 8k, many details, chiaroscuro lighting
まず768×768ドット時の生成時間だが、1GPUで40枚生成するよりも、10枚ずつ2GPUで処理させればおのおの生成時間はほぼ半分となる予想通りの結果となった。
ただRTX 4070 SUPER環境では、GPUデバイス0側の処理スピードがハッキリと遅くなっている。カードの位置や電源ケーブルを入れ替えても変わらないので個体差というわけではないのだが、x16スロットを2系統のx8に分割するにあたり、なにかが発生していることが懸念される。上位のRTX 4070 Ti SUPERでは差が小さいため、単なるPCIe分割だけの問題ではない気がする。
解像度を上げると処理時間も長くなる。今回はHires.fixは利用していないがVRAMが12GBのRTX 4070 SUPERだとHires.fixなどを追加するとVRAM不足で出力できない場合もある(今回はAutomatic 1111側の不具合でHirex.fixの利用は見送った)。
これらの結果から、Stable Diffusion+Automatic 1111環境においてCPUのパフォーマンスは(Ryzen 7000シリーズであれば)ほとんど影響しない。場合によってはRyzen 5 7600の方がわずかに高速なこともあるし、3D V-CacheはStable Diffusionでは特別な威力を発揮しない(改めてゲーム特化のアーキテクチャーであることが確認できた)。
GPUのチョイスに関してはRTX 4070 Tiの方がGPUパワーがある分RTX 4070 SUPERよりも高速であり、2枚挿し環境においてもその強みが発揮されることもわかった。
生成効率を上げたい人にオススメ?
複数GPUを協調動作させて高速化するのではなく、並列に使うというのが本稿の肝である。同じプロンプトを異なるシードで処理させればGPUの数だけスループットを向上させることが可能になる。片方のGPUでプロンプトの研究をしつつ、もう片方のGPUで別のプロンプトの出力を重ねる、という使い方もできる。
今回は玄人志向のウェブサイトにある謳い文句(前述)を確かめるためにあえて同じGPUを2枚用意したが、RTX 4070+RTX 3060といった新旧の組み合わせでも問題ない。生成系AIの試行錯誤をもっと積み重ねたいと考えているなら、今回のような複数枚挿しでの生成に挑戦してみてはどうだろうか?