見出し画像

Stable Diffusion WebUI メモリ削減&高速化(VRAM6GB環境)

 Stable Diffusion WebUIで私が普段使用している設定について速度と出力を検証した。十分なVRAMを確保できない環境でStable Diffusionを使う人に役立つ内容をまとめた。結論のみを読みたい場合はまとめを読むと良い。
※個人の備忘録であり、正確性を完全に保証できない。

環境

CPU : i7-10875H
GPU : RTX3600-laptop (6GB) 
stable-diffusion-webui version [4c1ad74]
Model : untitled-replicant

非推奨の設定

Webブラウザ

 ハードウェアアクセラレーションを切る。
 GPUがブラウザ関連の処理を行わなくなり、GPUメモリの消費をわずかに削減できる。生成時間には全く影響がないため、0.1GBすら惜しいような状況でもない限りわざわざ設定する必要はない。

グラフィックの設定

 ハードウェアアクセラレータによるGPUスケジューリングを切るとわずかにパフォーマンスが上がるという噂があったが、全く効果がないことがわかった。少なくともこの環境では生成速度に変化が見られなかった。

ライブプレビュー

 初期において、プログレスバーのレンダリングが生成を遅くするとの噂があった。現在では、プログレスバーの表示・ライブプレビューの表示はいずれも生成速度に影響しないようだ。

--medvram

 VRAMの削減効果がある。後述するTiled vaeのほうがメモリ不足を解消する効果が高いため、使う必要はないだろう。生成を10%ほど遅くすると言われているが、今回の検証結果では生成速度への影響が見られなかった。

生成を高速化する設定

コマンドライン引数による最適化

--xformer

 生成を高速化し、メモリ消費を大幅に削減する。wikiによると適用前後で出力が少し変化するようだが、高速化するメリットが大きいため使用を推奨する。
 この環境では生成時間が約73%に短縮された。

--xformers-flash-attention

 xformerと合わせて使うオプション。wikiによると、SD 2.0系統のモデルによる出力の再現性が上がるらしい。xformerのみを適用した場合と比べて生成時間が約92%に短縮された。

xformer無効化
xformer有効化
xformers-flash-attention有効化

 上記を見比べてみてほしい。ほとんど違いがないことがわかるだろう。

メモリ消費を削減する設定

拡張機能によるメモリ消費の削減

Tiled vae

 メモリの最大消費量を大幅に削減し、OOM(CUDA out of memory)を解消する。
 使用しない場合の最大解像度は1024x1024が限界で、それ以上はOOMを引き起こす。この拡張を使うことで1024x1024 to 2560x2560が生成可能になる。画素数でいうとおよそ6倍にあたる。

バッチ処理による高速化テクニック

バッチ処理とは

 複数の画像の生成を並列処理することで、1回の生成で複数の画像を得ることである。バッチ処理を行い1度に複数枚を生成する場合、1枚あたりの生成速度が向上する場合がある。

バッチ回数とバッチサイズ

 「バッチ回数」はバッチ処理を行う回数である。「バッチサイズ」は1度に生成する画像の数を表す。例えば、バッチ回数4、バッチサイズ1の処理では「1枚生成する処理を4回」行うが、バッチ回数1、バッチサイズ4の処理では「4枚生成する処理を1回」行う。後者はバッチ処理による高速化の恩恵を受けられる場合がある。
 基本的にバッチサイズが大きくなるほど1枚あたりの生成時間は短縮されるが、その分VRAMを消費する。VRAMの余剰が少なくなると処理が低速になるため、それらが釣り合う点を探す必要がある。

最適なバッチサイズ

  • バッチサイズ1 1.11s/it 1枚あたり1.11s/it

  • バッチサイズ2 2.10s/it 1枚あたり1.05s/it

  • バッチサイズ3 3.07s/it 1枚あたり1.02s/it

  • バッチサイズ4 4.18s/it 1枚あたり1.04s/it

  • バッチサイズ5 5.27s/it 1枚あたり1.05s/it

  • バッチサイズ6 6.99s/it 1枚あたり1.16s/it

 計測を行った結果、バッチサイズ3か4が最適なことがわかる。
 wikiによれば、VRAMに余裕がある場合はバッチサイズ8までは最適化の余地があるようだ。

まとめ

  • コマンドライン引数は--xformers --xformers-flash-attentionが良い

  • Tiled vaeを使おう

  • バッチサイズは1024×1024の場合は4が高効率である

  • その他の設定は必要がない

 上記の適用により、1024x1024の生成が68s -> 43sまで高速化する。
 最大解像度が1024x1024 -> 2560x2560に増加する。


いいなと思ったら応援しよう!