マルチGPUワークステーションでのStable Diffusionの利用

Stable Diffusionはディープラーニングを使った画像生成AIとして有名なモデルです。Stable Diffusionはソースコードおよび学習済のモデルが公開されており無料で利用することができます。また、さまざまな学習済みモデルについても、Hugging Faceといったサイトからダウンロードすることも可能です。Stable Diffusion向けのwebuiツールを使用することによって、簡単かつローカル環境で画像生成AIを試すことが出来ることから人気があります。

Stable Diffusionによる推論(画像生成)あるいは追加学習といった処理は計算量が非常に多いため、GPUがほぼ必須となります。GPUとしてはNVIDIA社製品が用いられることが一般的で、エンタープライズやデータセンタレベルの信頼性や大容量のGPUメモリが必要でない場合は専らコンシューマ向けのNVIDIA GeForce GPUが使用されます。GPUのCUDAコア数やGPUメモリ量は性能に大きく影響するため、なるべく上位のGPUを搭載する方が望ましいですが、その一方で現在のGPUは消費電力が高く発熱量も大きくなっています。例えばコンシューマ向け最上位のGeForce RTX 4090では一般的にPCIe 3スロット厚以上のサイズで内排気空冷方式となっています。このようなGPUをPCやワークステーションに2枚以上搭載することは冷却面から困難なため、1枚のハイエンドGPUを1台のPCやワークステーションに搭載することになります。

画像生成AIを使用して所望の画像が得られるようにするためには、入力するテキスト(プロンプト)を試行錯誤が必要があります。試行錯誤にかかる時間をなるべく短縮するため方法は性能の高いGPUを複数利用することです。たとえば、Stable Diffusionをブラウザから利用するための有名なツールとしてAUTOMATIC1111/stable-diffusion-webuiがありますが、このstable-diffusion-webuiではWeb UIをGPUのデバイスIDを指定して起動することが可能です(※現時点では当該ツールで1個のWeb UIから複数GPUを利用することはできません)。したがって複数のGPUが搭載されていれば、それぞれのGPUに対して別々なWeb UIを立ち上げて別々の処理を行うことができます。ユーザが複数であれば、各ユーザが特定のGPUを使うようなことも可能です。一方で前述の通り、空冷方式のGeForce RTX 4090を1台のマシンに複数枚搭載することは困難です。とにかく多くのGPUを使用したい場合でも、GPU 1枚に対してホストPCやワークステーションが1台必要になるためホストマシン自体の費用が増えてしまいます。

弊社ではコンシューマ向けGPUとしてハイエンドのGeForce RTX 4090を水冷化することによって、マシン1台に最大4枚のRTX 4090を搭載したマルチGPUワークステーション・マルチGPUサーバを実現しています。水冷化されたマルチGPUサーバは、最大4枚のRTX 4090を同時に高負荷状態で稼働させてもサーマルスロットリング状態に入ることなく安定して稼働します。処理内容によってはGPUだけではなくCPU、ホストメモリおよびディスクI/Oの性能等に影響されるため、搭載GPU枚数と処理能力が直線的に比例するとは限りませんが、このようなマルチGPUマシンは価格、設置スペース、消費電力および管理コストを削減することが可能です。

以下はRTX 4090を搭載したマシンでStable DiffusionをAUTOMATIC1111/stable-diffusion-webuiで利用した場合の結果です。ホストマシンの構成はCPUがEPYC 7402、メモリが64GB (8x 8GB DDR4-3200 ECC REG)、SSDは2.5インチのSATA SSDです。OSはUbuntu 22.04、NVIDIA Driverは545.23.08で、CUDA、cudnnに関してはstable-diffusion-webui環境がインストールされるpytorchの依存関係でインストールされたバージョンをそのまま使っています(ここではCUDA 11.8)。また、webuiはサーバとして他マシンからアクセスできるようにポート番号を指定しており、それ以外のオプションをつけずに起動しています。


実行時の設定
・Sampling Steps: 100
・batch countとbatch sizeをそれぞれ変更
・その他設定はデフォルト(Sampling method DPM++ 2M Karras, サイズ512×512, CFG Scale 7, promptは空白)

(1) Batch count: 8, Batch size: 1
実行時間:42.5 sec (webui上の表示)

100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:05<00:00, 19.47it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:05<00:00, 19.54it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:05<00:00, 19.56it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:05<00:00, 19.58it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:05<00:00, 19.58it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:05<00:00, 19.55it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:05<00:00, 19.57it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:05<00:00, 19.57it/s]
Total progress: 100%|███████████████████████████████████████████████████████████████████████| 800/800 [00:42<00:00, 18.87it/s]

(2) Batch count: 4, Batch size: 2
実行時間:27.4 sec (webui上の表示)

100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:06<00:00, 15.42it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:06<00:00, 15.43it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:06<00:00, 15.43it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:06<00:00, 15.44it/s]
Total progress: 100%|███████████████████████████████████████████████████████████████████████| 400/400 [00:27<00:00, 14.66it/s]

(3) Batch count: 2, Batch size: 4
実行時間:26.2 sec (webui上の表示)

100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:12<00:00, 8.09it/s]
100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:12<00:00, 8.09it/s]
Total progress: 100%|███████████████████████████████████████████████████████████████████████| 200/200 [00:26<00:00, 7.68it/s]

(4) Batch count: 1, Batch size: 8
実行時間:26.0 sec (webui上の表示)

100%|███████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:24<00:00, 4.06it/s]
Total progress: 100%|███████████████████████████████████████████████████████████████████████| 100/100 [00:25<00:00, 3.89it/s]

GPU 2枚を搭載してそれぞれのGPUに対してwebuiを起動できることも確認しました。ただし、同じwebuiのインストールディレクトリから2つ以上のwebuiを起動すると当然、当該ディレクトリ内の同じ設定ファイルが読み込まれて起動してしまいます。各種設定変更を行う場合は、各GPUに対して個別にwebuiをインストールする方が望ましいです。もしくは複数ユーザで利用するのであれば、特定のユーザが特定のGPUを占有できるような使い方になります。


弊社では国立研究開発法人様といった教育・研究機関、民間企業R&D部門向けにRTX 4090を水冷化したマルチGPUワークステーション、サーバ等を販売しております。さまざまなディープラーニングを用いたAIの研究開発用途においてご予算面からエンタープライズ向けGPU導入が難しい場合でも、コストを抑えてマルチGPUマシンを導入することができます。お見積りのご希望やご相談などございましたら、お気軽にお問い合わせください。

AMD EPYC Milan
GeForce RTX 4090 最大4枚搭載
タワー型GPU計算機

  • AMD EPYC 7003を1基搭載
  • NVIDIA GeForce RTX 4090を最大4台搭載可能なタワー型
  • 3台のGPUをPCI-E Gen4 X16フルレーン接続

製品モデル一覧

Intel Xeon Ice Lake
GeForce RTX 4090 最大3枚搭載
タワー型GPU計算機

  • Intel Xeon Ice Lakeを1基搭載
  • NVIDIA GeForce RTX4090を最大3台搭載可能なタワー型
  • 3台のGPUをPCI-E Gen4 X16フルレーン接続

製品モデル一覧

AMD Threadripper Pro
GeForce RTX 4090 最大3枚搭載
タワー型GPU計算機

  • AMD Threadripper Proを1基 搭載
  • GeForce RTX 4090を最大3台搭載可能、研究室で利用できるように騒音を低減したタワー型
  • 3台のGPUをPCI-E Gen4 X16フルレーン接続

製品モデル一覧

Intel Xeon W-3400 Sapphire Rapids
GeForce RTX 4090 最大3枚搭載
タワー型GPU計算機

  • Intel Xeon W-3400を1基搭載
  • NVIDIA GeForce RTX4090を最大3台搭載可能なタワー型
  • 3台のGPUをPCI-E Gen4 X16フルレーン接続

製品モデル一覧