Stable Diffusion Web UIでVRAMはどのくらい使うのか?
画像生成AIのStable Diffusion Web UIにおいて、VRAMがどのくらい使われているのか。VRAM8GB / VRAM12GB / VRAM 24GBのグラフィックボードでテストしました。
結論から先に言えば、8GBのVRAMで始めることはでき、高精細な画像を作成しようとすれば24GBのVRAMが欲しい場合もある感じです。
基本的なVRAM使用量について
Stable Diffusion Web UIはVRAM8GBでも動作させることができます。
VRAMとは?
「VRAM」は、グラフィックボード上のメモリのことです。これはメインメモリと異なり後から増設できないため、VRAM量を検討することはそのままグラフィックボード選びとなります。
VRAMの量は絵を描くためのキャンバスやそれを置く台のサイズなどに相当します。VRAM容量が大きければ精細な絵が描けますし、絵の内容を様々に加工するだけの広さも持っているというわけです。
512x512 1枚
Stable Diffusionでは、現在「512x512px」サイズで学習されたmodelが一般的です。このため、出力も基本的に512x512がベースになります。まずはそれでVRAMがどのくらい使われているのかを見てみました。
私のテスト環境においては、Stable Diffusion Web UIが起動した時点でVRAMを5GBほど利用し、512x512の画像をtxt2imgで1枚する際に、最大6.5~8GBほどのVRAMを瞬間的に使用しました。
画像から画像を出力するimg2imgにおいてもVRAMは同じような結果です。
より少ないVRAMで実行できるコマンドラインオプションもありますが、速度低下のデメリットがあるとのことです。
コマンド | 説明 |
--medvram | Stable Diffusion モデルがVRAMの消費を少なくするために、 cond (テキストを数値表現に変換する)、 first_stage (画像を潜在空間に変換して元に戻す)、 unet (潜在空間の実際のノイズ除去) の3つの部分に分割し、 常に1つだけがVRAMにあり、残りは CPU RAMに送信されるようにします。 ライブ プレビューが有効になっている場合を除き、パフォーマンスが少し低下します。 |
--lowvram | 上記をさらに徹底的に最適化し、unet を多くのモジュールに分割し、 1 つのモジュールのみをVRAMに保持します。 パフォーマンスは壊滅的です。 |
ControlNet(Openpose)でのVRAM使用量
人物のポーズ指定には「ControlNet」をWeb UIの拡張機能として使うことが多いです。
ControlNetでは画像を分析したり、棒人間を使ったりとさまざまな方法で出力画像に登場する人物の姿勢などを決めることができます。
棒人間による指定ができるopenposeで構図を決めるようにすると、VRAM使用量が7GB台になり、出力時には最大で8.1GBほどのVRAMを利用しました。
LoRA
Low-Rank Adaptation of Large Language Models (LoRA) は、メモリ消費を抑えながら大規模モデルのトレーニングを高速化するトレーニング方法および、それによって作成されたモデルファイルを指します。
Stable Diffusionで利用するモデルの特徴を保ったまま、特定の人物やオブジェクトを再現するような小規模改編が可能です。
VRAM的に大きな負荷にはなりません。Hugging FaceのDiffusersページでは、LoRAの学習についても「わずか11GBのGPU RAM を持つハードウェアで実行できます」と書かれています。
XformersでVRAM削減
XformersはPyTorchのための高速なTransformerライブラリです。
Stable Diffusion Web UIでは起動オプションによって自動的にインストールすることができます。
XformersをStable Diffusion Web UIで利用するには、2023/1/23以降のStable Diffusion Web UIが必要ですので、古いWeb UIを使っている方はまずgit pullでアップデートして下さい。
そして、webui-user.batをテキストエディタで開き、set COMMANDLINE_ARGSに--xformersを指定します。batファイルを起動するとXformersがインストールされます。
具体的には以下のようにします。
set COMMANDLINE_ARGS= --xformers
なお、Stable Diffusion Web UIにおけるXformersは現状、NVIDIA GeForce 10シリーズ(Pascal世代)以降のNVIDIA製グラフィックボード専用で、AMD Radeon等はサポートしていません。
Stable Diffusion Web UIはAMD製カードもサポートしている都合上、「NVIDIA用機能」という事情もあるXformersは標準で採用していないものと思われます。(AMDカードで利用できるDirectML版フォークもあるにはある)
Xformersを利用するとVRAM使用量を削減でき、画像生成速度をアップすることができます。テストでは6GB台で収まっていました。
また、画像生成速度アップの効果が大きいです。
i9-13900KF/RTX 4090 24GB(xformers+Pコアのみ) |
|
---|---|
i9-13900KF/RTX 4090 24GB(Pコアのみ) |
|
i7-13700F/RTX 3060 12GB(xformers+Pコアのみ) |
|
i7-13700F/RTX 3060 12GB(Pコアのみ) |
|
XformersをStable Diffusion Web UIで利用するには、2023/1/23以降のStable Diffusion Web UIが必要ですので、古いWeb UIを使っている方はまずgit pullでアップデートして下さい。
そして、webui-user.batをテキストエディタで開き、set COMMANDLINE_ARGSに--xformersを指定します。batファイルを起動するとXformersがインストールされます。
具体的には以下のようにします。
set COMMANDLINE_ARGS= --xformers
Xformersのデメリット
XformersはTransformerライブラリであり「変換」が行われるため、生成物にブレが生じます。具体例を以下に示します。
通常環境で同一Seedを2回生成した時の差(Xformers未使用)
まず、Xformersを使わない場合、同一のmodeやseedを使うことで同じ画像を再現できます。
Xformers利用した時の差
Xformersを利用する場合、同一のSeedで出力した場合でも出力内容がわずかに違います。今回のサンプル画像ではあえて指先など、Stable Diffusionが苦手とする部分をそのまま出していますが、こういった細部はXformersによって影響を受けることがあります。
このわずかな差は基本的にあまり気にしないで使えると思いますが、その差を大きく感じるためにあえて使わないという人もいます。
Stable Diffusion 2.1
Xformersが有効なら、Stable Diffusion 2.1モデルが利用できます。Stable Diffusion 2.1では768x768pxのモデルデータとなっているので、512x512より高精細な画像を出力することができます。modelの構造がかなり違うみたいで一般的なLoRAやControlNetなどが利用できないなどのデメリットもあります。また、Xformersが有効でないと黒画像出力になってしまいました。モデルデータは以下からダウンロードできます。
RTX 4090でStable Diffusion 2.1モデルで768x768pxで出力すると9.2GBのVRAMを使いました。
RTX 3070 Ti 8GBで768x768pxで出力すると8GBいっぱいいっぱいを使っていました。
ここまでのまとめ
- 512x512ではVRAM8GBくらいで動きそう
- XformersでVRAMを減らせるが、出力画像の再現性がなくなる
- XformersオンのSD2.1モデルでは768x768で9GBくらい使うが、8GBVRAM搭載グラボでも出せた
Batch Size
Stable Diffusion Web UIでは、画像の出力数はBatch size(1度に処理する枚数) × Batch count(何回) で決まります。
Batch sizeを上げると一度に最大8枚の画像を出力できます。
もちろん、Batch countを増やして1枚ずつ8枚を連続して出すよりも、Batch sizeを増やして8枚を1回に並行で書くほうが早いです。
512x512, Xformers有での画像出力速度比較
設定 | RTX 4090 (24GB) |
RTX 3070 Ti (8GB) |
Batch count:8, Batch size:1 | 14.51秒 | 29.36秒 |
Batch count:1, Batch size:8 | 8.11秒 | 16.43秒 |
ではその場合VRAM消費量は増えるのでしょうか。
Batch sizeとVRAM量
RTX 4090を用いて、512x512でのバッチサイズごとのVRAM使用量を見てみました。
Batch size | VRAM(GB) | |
Xformersなし | Xformers | |
1 | 7.4 | 6.5 |
2 | 8.3 | 7.0 |
3 | 9.5 | 7.3 |
4 | 12.5 | 7.4 |
5 | 14.1 | 7.5 |
6 | 15.7 | 7.6 |
7 | 17.3 | 7.5 |
8 | 18.9 | 7.7 |
Xformersによる出力(というかVRAM管理?)が根本的に違うことを感じられます。
Xformersなしの場合、Batch size=8で19GB近くのVRAMを使っているわけですが、かといって24GBのVRAMが必須というわけでもなさそうです。
確かにRTX 4090では18GBを超えていますが…
RTX 3070 Ti 8GBでは8GBをビタビタに使いながらも無事に完了しました。VRAMの中で上手く割り当ててくれるのかもしれないですね。
以前のテストではBatch sizeをちょっと増やすだけで簡単にVRAM不足のエラーになっていたのですが、Web UIが良くなったのか落ちなくなりましたね。
アップスケールの種類と必要なVRAM
512x512の画像はアイコンやSNSくらいまでなら良いとして、もう少し解像度を上げたいことがあるでしょう。
そこで活躍するのがStable Diffusion Web UIから利用できる各種アップスケール機能です。
アップスケールにはいくつかの方法がある
- Extrasタブ:アップスケーラを呼び出して低VRAMでアップスケールが可能
- SD upscale:img2imgタブのscriptから。タイル状に分割してStable Diffusionをかけて統合する。やや破綻しやすい
- Hires. fix : SD upscaleのような破綻を防ぐ。画像になる前に高解像度化を行うこともできる。VRAMが多く必要
【VRAM軽め】Extrasタブの通常のアップスケール
Stable Diffusion Web UIのExtrasタブで各種AIアップスケールが実行できます。Stable Diffusionでの画像出力よりVRAM負荷は低いため、512x512画像が出せるPCであればアップスケール時のVRAM量を気にする必要はありません。バッチ処理もできるので、気に入った画像をまとめてアップスケールすることができます。
元の絵に対して忠実かつ無難な選択肢ですが、「画像の塗りやアウトラインをキレイにする」という形であり、512x512時点から情報量はあまり増えていないかもしれません。
SD upscale
img2imgタブのscriptから「SD upscale」というアップスケール機能が使えます。
これは、画像をタイル状に分割し、個別にStable Diffusionをかけて新たな情報を描き足しつつアップスケールするものです。
このため、アップスケール元の画像の出力情報が必要です。Stable Diffusion Web UIで出力した画像であれば、PNG Infoタブなどで元の画像の出力情報を調べられます。そこからSend to img2imgでプロンプトやその他出力設定をimg2imgに送って利用します。
img2imgに送ったら、modelやvae、LoRAやControlNetなどを利用した場合はそれらも再現します。
ScriptからSD upscaleを選び、Scale Factorで「何倍にしたいのか」を設定し、Upscalerを選びます。
そして重要な設定項目がDenoising strengthです。Stable Diffusionによる再生成の強さを決めるような項目です。とりあえずは0.1未満で破綻しないかチェックし、徐々に値を上げてみると良いです。
Generateします。
8GB程度のVRAMで十分に利用できそうです。タイルに分けて出力後に統合しているので、1回あたりの負荷は1つのタイルぶんの負荷しかありません。
少し冒険したDenoising strength 0.5での結果です。絵が鮮明になったとともに再構成されていることがわかるでしょう。
しかし、Denoising strength が高くなると、それぞれ分割したエリアで好き勝手に再構成したために、絵が分けられたエリアで崩壊してしまっています。SD upscaleではこういった「分割による破綻」が起こりやすいのが欠点です。
Hires. fix
Hires. fixはtxt2imgで利用できるアップスケール機能です。SD upscaleのように分割による崩壊が起きないのが特徴です。
txt2imgでHires. fixのチェックを入れることでアップスケール用のメニューが出現します。
Upscalerでどのアップスケーラーでアップスケールするかを選びます。
Denoising strengthはSD upscale同様、値を高くするほど元の画像の風合いが失われ、変化していきます。Hires stepsは0なら元生成のSampling stepsをそのまま利用するようです。元画像のSampling stepsを調整しながらHires. fixしたい時などは0が良いでしょう。
アップスケーラーや画像によってベストなアップスケールは探りながら考えていく必要があります。例えばlatentアップスケーラではDenoising strengthは0.5以上など、比較的高めにしないと効果を発揮しません。
出力された画像は元の絵からイメージが変わりがちですが、等倍で出力されたかのような情報量を持っているように見えます。1024x1024くらいまでなら問題は少ないですが、それ以上の高解像度になると崩壊しやすくなるかもしれません。
これをベースにさらにextrasでアップスケールをかければより美しくできるでしょう。
なお、2048x2048で無事に出せれば、以下のようにズームに耐えられる品質になります。
とりあえず、Hires. fixはかなりVRAM的に重い処理ですが、img2imgのSD upscaleよりも崩壊しにくく、画像のディテールを増やしてくれる点で強力です。
他のアップスケールでは画質が物足りなかったり、ちょっと冒険したい時に使える感じです。
Hires. fixとVRAM使用量の例
Hires.fixでは潜在空間を広げてアップスケールを行う仕組み上、1枚ごとにシビアにVRAMを必要とするようです。
Hires. fixのVRAMの使い方
Xformersオフの場合はこんな感じでアップスケール処理中は常時高いVRAM使用量になります。
Xformersオンでは、2箇所のVRAM使用ピークがあるようです。最初にグイっとVRAMを確保するタイミングがあります。アップスケール中は一定のVRAM量を利用し、最後の要求量が最も高くなります。
最後の処理でメモリ不足になって落ちることが多いですが、実際どのくらいあれば足りるかは使用しているVRAM量ではわかりにくいです。
以降のテストの数値は「とある環境での例」くらいで見てください。
RTX 4090 24GB : ピークVRAM使用量 (Batch size=1)
設定 | 512x512 -> 1024x1024 |
512x512 ->2048x2048 |
Xformersなし | 17.3GB | 22.3GB |
Xformersあり | 9.47GB | 22.3GB |
RTX 4090 24GBでどのくらいVRAMを使うかテストします。512x512で出力し、Hires. fixで1024x1024する場合、Xformersなしでは17.3GB、Xformersありでは9.47GBに抑えて出力されていました。Xformersの恩恵は一応あるのかな?
最高設定の2048x2048では、どちらも22.3GBという数値ですが、Windows上で認識しているVRAMが22.5GBなので、その上限に届いていると思います。
RTX 3060 12GB : VRAM使用量(Batch size=1)
設定 | 512x512 -> 1024x1024 |
512x512 ->1561x1561 |
512x512 ->2048x2048 |
Xformersなし | 10.19GB | エラー | エラー |
Xformersあり | 11.9GB | 11.9GB | エラー |
RTX 3060 12GBで同様のテストを行ったところ、512x512で出力し、Hires. fixで1024x1024にアップスケールしつつの出力はXformersの有無問わず問題なくできました。
2048x2048はxformersの有無問わず、torch.cuda.OutofMemoryError(メモリ容量不足)で無理でした。1.65GB空いているところ、4GBを確保しようとしたのでエラーみたいです。
1561x1561という値あたりでXformers有無によって行けるかどうかの差が出ました。Xformersは多少恩恵があるのかもしれません。
RTX 3070 Ti 8GB: VRAM使用量(Batch size=1)
設定 | 512x512 -> 1024x1024 |
512x512 ->1280x1280 |
Xformersなし | 7.94GB | エラー |
Xformersあり | 7.96GB | エラー |
8GBのVRAMでも1024x1024は問題なく完了しましたが、それ以上は厳しそうです。
ここまでのまとめ
- VRAM 8GBでは1024px程度へのHires.fixは使えるだろう
- VRAM 12GBあると1500px程度へのHires. fixが使えるだろう
- VRAM 24GBあると2048px程度へのHires. fixが使えるだろう
PCスペックごとの出力時間
16枚の512x512px画像出力にかかる時間(短い方が良い)
prompt: photograph, forest, morning, canon
DDIM,150steps,512x512, Batch count=16,Batch size=1, CFG 30, seed 2398368750
スペックごとの能力差を明らかにする目的もあり、Step150、CFG30と非常に重めの設定をしています。Xforemersは利用していません。
i9-13900KF/RTX 4090 24GB |
|
---|---|
i9-13700F/RTX 4070 Ti 12GB |
|
5800X/RTX 3070 Ti 8GB |
|
i7-13700F/RTX 3060 12GB |
|
画像生成の所要時間に関しては上位のRTX 40シリーズのほうが当然優れています。
同じVRAM12GBでも、RTX 3060 12GBとRTX 4070 Tiだと処理速度はかなり違います。RTX 4070 Tiだと1024x1024のHires. fixを常時出すような使い方もできるでしょう。
また、GPUパワーが十分な場合、CPU性能によっても結構速度が変わってきます。
例えば12世代以降のIntelはPコア(強)/Eコア(弱)という非対称なCPUコアが搭載されていますが、Stable Diffusion(というかPython)はEコアにもタスクを振ってしまうことがあり、それがボトルネックになることがあります。
i9-13900KF/RTX 4090 24GB(Pコアのみ) |
|
---|---|
i9-13900KF/RTX 4090 24GB |
|
RTX 4090の場合、13900KをPコアのみで動かすようにするだけで、これほどの差が出ます。
i7-13700F/RTX 3060 12GB(Pコアのみ) |
|
---|---|
i7-13700F/RTX 3060 12GB |
|
なおRTX 3060だとほんのわずかしか差は出ません。
PCを選ぶ際のコスパ
まるっとPCを買い替えると考えると、PC全体のコスパはどうなんだ?ということになります。上記512x512のテスト結果から、1万円あたりの処理能力という観点でドスパラのPCコスパを比較してみます。
1万円あたりのコスパの高さ(512x512基準)
RTX 4090機(約57万円) |
83.5
|
---|---|
RTX 4070 Ti機(約31万円) |
131
|
RTX 3060 12GB機(約17万円) |
135
|
RTX 3060 12GB機が最もコスパが高いです。RTX 4070 Ti機はやや下がりますが悪くありません。
RTX 4090は上記のような低解像度出力のテストではコスパは良くないものの、Hires. fixで高解像度を出せるという点でコスパ以上の魅力があるでしょう。
Stable DiffusionのためのおすすめグラボとPC
以上のことから、おすすめできるPC環境について考えてみます。
- Batch Size=8は8GB程度のVRAMでも意外と出せちゃう (以前のWebUIより色々工夫されたのかも)
- ただしHires. fixはVRAMが絶対であり、出せる解像度の上限はVRAMで決まる
- Hires.fixのようにVRAMありきの高度な処理が今後追加される可能性を考えても、12GBはあったほうが安心だろう
- さらに、GPUの処理性能が高い方が早く処理が終わる
このことから、ミドルグレードながらもVRAMが多い「RTX 3060 12GB」は入門者に安心しておすすめできます。
RTX 40シリーズはRTX 30シリーズに比べて電力効率がかなりよくなっていますので、予算が許せばRTX 40シリーズにしたほうが良いと思います。
RTX 4090 | RTX 4070 Ti | RTX 3060 12GB | |
VRAM量 | 24GB | 12GB | 12GB |
512x512の出力 | ○ | ○ | ○ |
Batch Size目安 (512x512) |
8 | 8 | 8 |
Hires. fix目安 (Batch Size=1) |
~2048x2048 | ~1500x1500 | ~1500x1500 |
画像出力速度 | 非常に速い | かなり速い | そこそこ |
電力効率(ワッパ) | 非常に良い | 非常に良い | 普通(基準として) |
RTX 3060 12GB
RTX 3060 12GBはエントリー向けのGeForce RTXシリーズながら、12GBのVRAMを搭載したモデルです。コスパは最強クラスです。
今回、RTX 3060のテストにも使用したraytrek MVは、クリエイター向けのミニタワーPCです。CPUは13世代i7を搭載しており「RTX 3060搭載モデルの中でもちょっと良いグレード」です。CPUが担当する作業も多いStable Diffusionにとってはこのくらいあってもちょうど良いと言えるでしょう。ゲームでもRTX 3060の能力を高く引き出すことができます。価格的にも学生さんなどや初めて本格的なPCを使ってみたい人へおすすめできます。
RTX 4070 Ti 12GB
VRAM12GBという点ではRTX 3060 12GBと変わらないものの、優れた処理速度はRTX 3060の比ではなく、純粋に価格に見合った製品になっていると思います。RTX 40シリーズならではの電力効率(ワットパフォーマンス)の良さも魅力で、前世代RTX 3090では350W必要だったところ、285Wで同等以上の性能を発揮します。
GPU:RTX 4070 Ti 12GB
メモリ:16GB DDR4
ストレージ:1TB(Gen3) NVMe SSD
ゲーミングPC「GALLERIA」ブランドからの一台。こちらも実機をテストしましたが、GPUが大型のため冷却力が高く、CPUも静音性が高い空冷であるため非常に静かです。ゲーム性能も高く、長く使えそうな感じがします。最新ゲームも高画質で快適に遊べる高バランスマシンとしてイチオシです。
RTX 4090 24GB
日々進化する画像AIの世界で先んじたい方にとって、24GBという大容量VRAMは他の人に出来ない表現を行うための武器だと考えています。この記事で紹介している内容は2ヶ月後には陳腐化し、新しい高解像度機能が生まれているかもしれません。そういった時に、最高グレードのハードウェアを持っていればいち早く新技術を導入できる可能性が高いわけです。また、画像AIの使い方に早く慣れるために「トライ・アンド・エラー」を多く行いたい方も、GPU処理能力の高さからRTX 4090を選ぶ価値があります。
raytrek 4CZZはケース品質やメンテナンス性を含めておすすめできるハイエンド機種です。AI時代を見据えてフルコミットしたい人におすすめです。もちろんゲーム性能も最高クラスです。ゲームも画像AIも最高画質で楽しめます。
PCのカスタマイズポイント
いずれも、画像AI用途だとストレージのNVMe SSDを大容量にしたほうが良いです。
modelや出力画像で100GB単位ですぐ埋まるので、最低でも1TB以上は欲しいところ。モデルの学習もする人なら2TBあっても元は取れるはず。
メモリについては16GBで始められますが、Pythonが10GB以上使ってることがあったりするので、32GBあるとメモリ不足に怯えなくていいと思います。
ドスパラなら手数料無料の分割払いも可能
支払い方法で「分割払い(JACCS)」を選択すると、最大48回まで手数料無料の分割払いが可能です。(審査があります)
「お金が貯まったらPCを買おうかな」と言っている間に、AIも日進月歩でどんどん新しい世界になってしまいます。いち早くエッジコンピューティング環境を入手するために活用してください。
記事の内容は執筆、更新日時時点の情報であり、現在は異なっている場合があります。 記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。
【今日のおすすめ】
【auひかり】最大10Gbpsの超高速通信!最大126,000円還元キャンペーンキャッシュバックで初期工事費も実質無料!