88
安定拡散ベンチマーク:NVIDIA、AMD、Intel GPU 45 機種を比較
Stable Diffusion sample images, after generating 768x768 and using SwinIR_4X upscaling, followed by cropping
(画像提供:Tom's Hardware)

安定拡散入門

Stable Diffusionや、Dall-E、MidjourneyといったAIベースの画像生成ツールは、現在最も普及しているディープラーニングの活用例です。学習済みネットワークを用いて画像、動画、テキストを作成することは、理論上の可能性だけでなく、現実のものとなりました。ChatGPTのような高度なツールは、学習に大量のハードウェアを搭載した大規模なサーバー環境を必要とする場合がありますが、学習済みのネットワークを推論用に実行することは、PCのグラフィックカードを使って行うことができます。Stable Diffusionを用いたAI推論において、コンシューマー向けGPUはどれほど高速なのでしょうか?それが私たちの研究の目的です。

人気のAI画像生成ツール「Stable Diffusion」を、最新のNvidia、AMD、Intel GPU 45種でベンチマークし、その性能を比較しました。Stable Diffusionは1年以上前からテストを続けており、初期のバージョンは動作させるのが難しく、ましてやスムーズに動作させるのは至難の業でしたが、近年は大幅に改善されています。すべてのAIプロジェクトがStable Diffusionと同じレベルの努力を注がれているわけではありませんが、適切なチューニングと努力をすれば、様々なGPUアーキテクチャがAIワークロードでどのような処理能力を発揮できるかについて、今回のベンチマーク結果からある程度の洞察が得られるはずです。

Stable Diffusion を実行する最も簡単な方法は、Automatic1111 WebUI プロジェクトを使用することです。ただし、それだけではありません。Nvidia GPU で実行させるのは、1 つの Zip ファイルの内容をダウンロード、解凍、実行するだけです。ただし、最新の TensorRT 拡張機能を使用してパフォーマンスを向上させるには、さらに追加の手順が必要です。手順はリンク先に記載されています。また、時間の経過とともにどのように改善されたかを確認したい場合は、以前にチューニングなしのベースモデルと比較して Stable Diffusion TensorRT のパフォーマンスをテストしました。今回、TensorRT 最適化を適用した、RTX 2060 から RTX 4090 までのすべての RTX GPUの結果を追加しています。

AMDおよびIntel GPU向けには、それぞれDirectMLとOpenVINOに特化したA1111 WebUIのフォークが利用可能です。Arc GPUの動作にはこれらのWebUI OpenVINO命令を使用し、AMD GPUの動作にはこれらのWebUI DirectML命令を使用しました。ちなみに、3社ともコミュニティと協力してパフォーマンスと機能の調整と改善に取り組んできたと認識しています。

AMD、Intel、NvidiaのいずれのGPUをご利用の場合も、最適な動作を実現するにはいくつかのハードルを乗り越える必要があります。リンクされたリポジトリの説明に問題がある場合は、コメント欄にご記入ください。できる限りお手伝いいたします。基本的な手順を理解すれば、WebUIを起動して画像生成を開始するのはそれほど難しくありません。ただし、追加機能(アップスケーリングなど)は、テキストから画像への基本コードとは別であり、パフォーマンスを向上させるには追加の変更とチューニングが必要となるため、今回のテストには含まれていません。

詳しい情報はページの下部に記載されていますので、ご興味があればご覧ください。ベンチマークだけを知りたいという方は、さっそく始めましょう。

安定した拡散512x512パフォーマンス

Stable Diffusion performance

(画像提供:Tom's Hardware)

これは特に驚くべき結果ではないでしょう。Nvidiaは、2017年後半のVolta V100以来、TensorコアによるAI技術の推進に取り組んできました。RTXシリーズは2018年にこの機能を追加し、世代ごとに改良とパフォーマンスの向上を図ってきました(理論上のパフォーマンスの詳細については以下を参照)。最新のチューニングを施したRTX 4090は、512x512のStable Diffusion画像を1秒あたり1枚以上、つまり1分あたり75枚の速度で生成しました。

AMD最速GPUであるRX 7900 XTXでも、1分あたり26枚の画像出力しかできず、そのパフォーマンスレベルの約3分の1に過ぎませんでした。さらに憂慮すべきは、RX 6000シリーズGPUのパフォーマンスの低さです。RX 6950 XTは1分あたり6.6枚の画像出力にとどまり、RX 7600に大きく遅れをとりました。RDNA 3に搭載されたAMDのAI Matrixアクセラレータが、この特定のワークロードにおけるスループットの向上に貢献していることは明らかです。

Intelの現在最速GPUであるArc A770 16GBは、1分間に15.4枚の画像処理を実現しました。このハードウェアの理論上の性能は、RTX 2080 Ti(XMX FP16スループットとTensor FP16スループットを比較した場合)よりもかなり高いことに留意してください。Arc GPUは157.3 TFLOPSで、RTX 2080 Tiは107.6 TFLOPSです。つまり、Arc GPUは理論上の性能の半分以下しか実現できていないように見えます。そのため、ベンチマークは実世界におけるパフォーマンスを測る最も重要な指標となります。

様々なGPUやアーキテクチャには違いがありますが、パフォーマンスは理論上の演算性能にほぼ比例して向上します。RTX 4090は、当社のテストではRTX 4080よりも46%高速でしたが、理論上は69%も演算性能が優れています。同様に、4080は4070 Tiを24%上回り、演算性能は22%も優れています。

新しいアーキテクチャは必ずしも大幅に高速化しているわけではありません。4080は3090 Tiを10%上回り、演算性能は20%向上する可能性があります。しかし、3090 Tiはメモリ帯域幅も広く(4080の717GB/秒に対して1008GB/秒)、これは確かに重要な要素です。旧世代のTuring世代も同様に持ちこたえており、新しいRTX 4070はRTX 2080 Tiをわずか12%上回り、理論上は演算性能が8%向上しています。

安定した拡散768x768パフォーマンス

Stable Diffusion performance

(画像提供:Tom's Hardware)

解像度を768x768まで上げると、Stable Diffusionを快適に動作させるには、より多くのVRAMが必要になります。メモリ帯域幅も、少なくとも低速域ではより重要になります。

各種Nvidia GPUの相対的な位置付けはそれほど変化しておらず、AMDのRX 7000シリーズはRX 7800 XT以上で若干の差をつけていますが、RX 7600は若干の差をつけています。7600は512x512解像度では7700 XTより36%遅いものの、768x768解像度では44%まで低下しています。

前世代のAMD GPUはさらに厳しい結果となりました。RX 6950 XTは1分間に2枚の画像もレンダリングできず、8GBのRX 6650 XT、6600 XT、そして6600はいずれも1枚の画像もレンダリングできませんでした。これは少し奇妙です。RX 7600は8GBのメモリでも問題なく動作していたのですが、これは他のアーキテクチャの違いが影響していたためです。

IntelのArc GPUも高解像度では劣勢に立たされました。言い換えれば、Nvidia GPU、特に最速モデルは競合製品との差を縮めたと言えるでしょう。例えば、4090は512x512の画像ではArc A770 16GBの4.9倍の速度でしたが、768x768の画像では6.4倍の差をつけました。

SDXLはまだテストしていません。主な理由は、メモリ使用量と動作の安定性が768x768の画像生成よりもさらに高くなる傾向があるためです。また、Nvidia GPUではTensorRTがサポートされていないため、多くのGPUでSDXLがうまく動作しない可能性が高くなります。ただし、高解像度出力の場合、SD1.5やSD2.1よりも結果が優れているため、今後調査する予定です。

現時点では、768x768 の結果よりもパフォーマンスが低下することが分かっています。例えば、RTX 4090 で 1024x1024 画像(SD1.5 を使用)を生成した場合、1 分あたりわずか 13.4 枚の速度しか得られませんでした。これは 768x768 画像生成の半分以下の速度です。1024x1024 画像はピクセル数が 78% 多く、処理時間は解像度の増加よりもやや速いペースで増加するため、当然の結果と言えるでしょう。

安定的な拡散モデルの選択

画像

1

3

Stable Diffusion higher resolution 1920x1080 attempts
1920x1080世代を直接試す(画像提供:Tom's Hardware)

どのバージョンのStable Generationを実行するかは、テストにおいて重要な要素です。現在、Hugging Faceからv1.4、v1.5、v2.0、v2.1のモデルに加え、新しいSDXLも提供されています。以前のバージョン1.xは主に512x512の画像でトレーニングされていましたが、バージョン2.xでは最大768x768の画像のトレーニングデータが追加されました。SDXLは768x768から1024x1024の画像を対象としています。前述のように、解像度が高いほどVRAMの容量も大きくなります。Stable Diffusionのバージョンが異なると、トレーニングデータの違いにより、同じプロンプトから全く異なる結果が生成されることもあります。

トレーニングデータよりも高解像度の画像を生成しようとすると、上記のような多頭、多肢、多眼、あるいはその他諸々の「面白い」結果になってしまう可能性があります。様々なアップスケーリングツールを使えばこうした問題への対策は可能ですが、Windowsデスクトップの壁紙として4K画像を大量に生成するだけなら、おそらく期待するほど単純ではないことをご承知おきください。(上記の画像のテーマは「キアヌ・リーブスの老戦士族長のポートレート写真、部族のパンサーメイク、赤地に青、横顔、目をそらし、真剣な目、50mmポートレート写真、ハードリムライティング写真」でした。ちなみに、このページから引用したものです。)

また、すべてのGPUが様々なプロジェクトから同等の扱いを受けているわけではないことにも留意する必要がありますが、コアアーキテクチャも大きな要因です。NvidiaはすべてのRTX GPUにTensorコアを搭載しており、現在のTensorRTコードはスパース性のないFP16演算のみを使用していると理解しています。これが、20シリーズから30シリーズ、そして40シリーズGPU(Turing、Ampere、Ada Lovelaceアーキテクチャ)へのスケーリングが、ベースラインのTensor FP16レートとほぼ相関している理由です。

上記のように、最新のWebUIソフトウェアを使用したAMD GPUのパフォーマンスは、RX 7000シリーズGPUでスループットが大幅に向上しました。一方、RX 6000シリーズGPUでは、Nod.aiのSharkバージョンを使用するとより良い結果が得られる可能性があります。なお、AMDは最近Nod.aiを買収しました。特にSD2.1ではRDNA 2 GPUでスループットが向上しましたが、結果はSD1.5とは異なっていたため、直接比較することはできません。Nod.aiにはSD1.5モデルを使用する場合の「sharkify」チューニング機能もないため、同一条件でのテストではパフォーマンスが低下しました。

テスト設定: バッチサイズ

画像

1

14

Stable Diffusion sample images, after generating 768x768 and using SwinIR_4X upscaling, followed by cropping
(画像提供:Tom's Hardware)

上記のギャラリーは、768x768の解像度で生成し、SwinIR_4Xアップスケーリング(「Extras」タブ内)を使用してトリミングとリサイズを行った、Stable Diffusionのサンプル画像です。上記のキアヌ・リーブスによる荒削りな試みよりも、はるかに優れた仕上がりになっていることにご賛同いただけると思います。

テストでは、すべてのGPUで同じ手順に従いました。「散らかった部屋」という同じプロンプトを使って、合計24枚の512x512と24枚の768x768の画像を生成しました。簡潔で分かりやすく、要点を押さえたものです。1回の実行で24枚の画像を生成することで、GPUに応じて3x8(8枚の同時画像が3バッチ)、4x6、6x4、8x3、12x2、または24x1のバッチを処理できるため、非常に柔軟に対応できました。

スループットの最適化に最大限の努力を払い、多くの場合1より大きいバッチサイズで実行しました。同時に生成する画像数を制限する要因はVRAM容量である場合もありますが、コンピューティング(およびキャッシュ)も考慮する必要があるようです。例えば、RTX 4060 Ti 16GBは8GBモデルと同様に6x4バッチで最高のパフォーマンスを発揮しましたが、4070は4x6バッチで最高のパフォーマンスを発揮しました。

512x512の画像生成では、多くのNvidia GPUが8枚の画像を3バッチ(最大バッチサイズは8)生成することで最適なパフォーマンスを発揮しましたが、一部のGPUでは4x6または6x4の方がわずかにパフォーマンスが向上することが分かりました。AMDのRX 7000シリーズGPUはすべて3x8のバッチ処理を好んでいましたが、RX 6000シリーズはNavi 21で6x4、Navi 22で8x3、Navi 23で12x2のバッチ処理で最高のパフォーマンスを発揮しました。IntelのArc GPUはすべて6x4で良好なパフォーマンスを示しましたが、A380は12x2のバッチ処理を採用しました。

768x768 の画像の場合、メモリと計算要件ははるかに高くなります。Nvidia RTX GPU のほとんどは 6x4 バッチで最適に動作し、一部のケースでは 8x3 バッチでも最適に動作しました。(6GB VRAM を搭載した RTX 2060 でも、6x4 バッチで最適に動作したことに注意してください。) AMD RX 7000 シリーズもほとんどの GPU で 3x8 バッチが最適でしたが、RX 7600 はバッチサイズを縮小する必要があり、6x4 で動作しました。RX 6000 シリーズは 24x1 でのみ動作し、一度に 1 枚の画像しか処理できませんでした (そうしないと出力が乱れてしまいます)。また、8GB の RX 66xx カードはすべて、より高いターゲット出力でレンダリングできませんでした。これらの GPU では、Nod.ai と別のモデルを選択する必要があります。

テストセットアップ

画像

1

3

Sample Stable Diffusion images for "messy room"
AMD GPU の「Messy Room」(画像提供: Tom's Hardware)

安定拡散テストベッド

Stable DiffusionのテストPCは、Core i9-12900K、32GB DDR4-3600メモリ、2TB SSDで構成されていました。合計45種類のGPUをテストしました。基本的にレイトレーシングハードウェアを搭載したGPUはすべてテスト対象で、Stable Diffusionを処理するのに十分なパフォーマンスを備えていると考えられます。さらに古いGPUも使用できますが、GPUがネイティブFP16をサポートしていない場合はパフォーマンスがかなり低下する可能性があります。NvidiaのGTXクラスのカードは、限られたテストでは非常に遅いことが分かりました。

初期のコンパイル時間を短縮するため、まず各GPUごとに必要な設定で単一のバッチを生成しました。実際には、このステップでバッチサイズの最適な構成を決定します。バッチサイズを決定したら、4回の反復処理を行い、それぞれ24枚の画像を生成しました。最も遅い結果を破棄し、残りの3回の実行時間を平均しました。そして、この値を使用して、各GPUが1分間に生成できる画像数を計算しました。

今回も、プロンプトは「散らかった部屋」を選びました。オイラー祖先サンプリング法、50ステップ(反復)、CFGス​​ケール7を使用しました。すべてのGPUでStable Diffusionのバージョン1.5モデルを実行していたため、結果の画像は概ね同等の内容でした。以前、SD2.1では実際には散らかっていない「散らかった部屋」が生成されることが多く、漫画のような画像になることもあったことに気づきました。また、後期のバージョン2.1モデルではトレーニングデータから多くの望ましい特性が削除されたため、多くのStable DiffusionユーザーにSD1.5が好まれているようです。

上のギャラリーは、AMD、Intel、Nvidiaの768x768解像度での出力例です。ご安心ください。すべての画像は、複雑さと内容が比較的似ているように見えますが、生成された数千枚の画像すべてを注意深く確認したわけではありません。参考までに、AMD GPUでは合計約2,500枚の画像が生成され、Nvidia GPUではさらに4,000枚以上の画像が追加されましたが、Intelでは約1,000枚の画像で済みました。どれも同じような散らかった部屋です。

理論上のGPUパフォーマンスの比較

上記のテストはStable Diffusionを用いた実際のパフォーマンスを検証したものですが、理論上のGPUパフォーマンスについても簡単に確認しておく価値があると考えました。考慮すべき点は2つあります。1つ目はGPUシェーダーの演算性能、2つ目はAIワークロードを高速化するために設計されたハードウェア(Nvidia Tensorコア、AMD AIアクセラレーター、Intel XMXコアなど)を使用した場合の潜在的な演算性能です。すべてのGPUが追加ハードウェアを備えているわけではないため、GPUシェーダーを使用する場合もあります。まずはそこから見ていきましょう。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

Max Theoretical GPU FP16 Compute Performance (for Stable Diffusion)

理論的な GPU シェーダー計算(画像提供: Tom's Hardware)

GPUシェーダーを用いたFP16演算では、NvidiaのAmpereアーキテクチャとAda LovelaceアーキテクチャはFP16をFP32と同じ速度で実行します。これは、FP16がTensorコアを使用するようにコーディング可能であり、またそうすべきであるという前提に基づいています。一方、AMDとIntelのGPUは、半精度FP16シェーダー演算においてFP32の2倍の性能を発揮し、これはTuring GPUにも当てはまります。

これは、潜在的に興味深い動作につながります。例えば、RTX 2080 TiはFP16 GPUシェーダー演算で26.9 TFLOPSの性能を備えており、これはRTX 3080の29.8 TFLOPSにほぼ匹敵し、RTX 3070 Tiの21.8 TFLOPSを明らかに上回ります。AMDのRX 7000シリーズGPUも、すべてがGPUシェーダーに限定されれば、はるかに競争力が増すでしょう。

明らかに、FP16コンピューティングのこの結果は、実際のパフォーマンスとは全く一致していません。これは、最適化された安定拡散実装が可能な限り高いスループットを選択するためです。これは、現代のアーキテクチャのGPUシェーダーでは実現できません。そこで、各GPUに搭載されているTensorコア、Matrixコア、AIコアについて考えてみましょう。

画像

1

2

Max Theoretical GPU FP16 Compute Performance (for Stable Diffusion)
(画像提供:Tom's Hardware)

NvidiaのTensorコアは明らかに強力ですが、前述の通り、Stable DiffusionはTensorRTコードでスパース性を活用していないようです。(FP8も使用していないため、計算速度が2倍になる可能性もあります。)つまり、GPUの性能比較を最も的確に行うには、スパース性を考慮していないNvidia GPUの最初のグラフに注目するべきであり、スパース性を考慮した2番目のグラフは避けるべきです。また、TensorRT以外のコードではスパース性を活用しているように見えることにも注目してください

理論的な計算性能を示す上記のグラフが、安定拡散グラフとどのように一致しているかを見るのは興味深いです。簡単にまとめると、Nvidia GPUの多くは、AMD 7000シリーズと同様に、予想通りのパフォーマンスを発揮しています。一方、Intel Arc GPUはいずれも予想の半分程度のパフォーマンスしか発揮していないようです。なお、私の数値はブーストクロックの2.4GHzを使用しており、低い方の2.0GHzという「ゲームクロック」(私の経験上、ゲームクロックはめったに発生しない最悪のシナリオです)を使用していないことに注意してください。

RX 6000シリーズGPUも同様にパフォーマンスが低調です。これは、シェーダーを介してFP16演算を行う方が、RDNA 3のWMMA命令を介して同じ演算を行うよりも効率が悪いためと考えられます。そうでなければ、RX 6950 XTとRX 6900 XTは少なくともRX 7600を上回るはずですが、私たちのテストではそうはなりませんでした。(繰り返しになりますが、RDNA 2 GPUのいずれかを使用していて画像スループットを向上させたい場合は、Nod.aiのプロジェクトを使用するとRDNA 2 GPUのパフォーマンスが向上する傾向があります。)

明確でないのは、Stable Diffusion のさらなる最適化の余地がどれだけあるかということです。生の計算性能だけを見れば、Intel は GPU のスループットをさらに向上させることができるはずです。また、Nvidia の 30 シリーズおよび 40 シリーズ GPU が TensorRT のスパース性機能を活用していない理由があるのではないかとも考えられます。あるいは、活用はしているものの、それほど効果がないだけなのかもしれません。(以前、Nvidia のエンジニアにこの件について尋ねたところ、現在は使用されていないとのことでしたが、この辺りはまだ不透明です。)

Stable Diffusionをはじめとするテキスト画像生成技術は、現在AI分野の中でも最も発展・研究が進んでいる分野の一つであり、コンシューマーレベルのハードウェアでも容易に利用可能です。Whisperを用いた音声認識やチャットボットのテキスト生成など、他のAI分野も検討してきましたが、今のところStable Diffusionほど最適化されておらず、活用もされていないようです。他にテストすべきAIワークロード、特にAMD、Intel、そしてNvidiaのGPUで動作するワークロードについてご提案がありましたら、コメント欄でお知らせください。

ジャレッド・ウォルトンは、Tom's Hardwareのシニアエディターで、GPU全般を専門としています。2004年からテクノロジージャーナリストとして活躍し、AnandTech、Maximum PC、PC Gamerなどで執筆活動を行っています。初代S3 Virgeの「3Dデセラレータ」から最新のGPUまで、ジャレッドは最新のグラフィックストレンドを常に把握しており、ゲームパフォーマンスに関する質問は彼にお任せください。