Stable Diffusionのメモリ不足対策・解決策まとめ
様々なモデルを駆使して自分の思うがままの画像を生成できる「Stable Diffusion」。動作には高速なグラフィックボードと大容量のVRAMが必要です。
公式ではVRAM4GB以上で動作するとされており、そのためStable DiffusionではVRAM容量が4GB以下の場合、エラーが発生する可能性が高くなります。実際実用的に動かすためには8GBでなんとか、色々な処理を実行しようとすると、12GBは欲しく、欲を言えば24GB、さらにとVRAMはあればあるほど良いです。
メモリ不足のエラーが発生
メモリが足りないと、画像生成時に「RuntimeError: CUDA out of memory」とエラーが出現します。この場合画像の生成が中断され、正しく画像を生成できなくなってしまいます。このメモリ不足は生成画像のサイズに対してVRAMが足りていないという場合がほとんどなので、生成する画像の解像度を下げることで、ある程度回避できるのですが、大きい画像をどうしても生成したいという場合いくつかのStable Diffusionの設定を見直すことで、生成することが可能となります。
Stable Diffusionのメモリ不足対策
Stable Diffusionの設定を司るパラメーターについては、Stable Diffusionを起動する際のbatファイル、webui-user.batをテキストエディタで開き、書き込んで設定していきます。いくつかの方法がありますので自身の環境やVRAMに合わせて対策を選択しましょう。
対策1:GPUのメモリを再利用する
GPUのメモリの利用率が60%を超えた場合は、GPUのメモリのブロックを再利用してメモリ不足を防ぎます。このしきい値を変えることでパーセンテージを変更することも可能です。末尾の数字を変更することで、しきい値を変更することが可能です。
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6
対策2:GPUのメモリの断片化を防ぐ
設定したサイズよりも大きな断片化を防ぎ、メモリ不足を発生しにくくします。
max_split_size_mb:128
対策3:-–medvramや–lowvramを利用する
CPU RAMを使いVRAMの負担を軽減する方法。VRAMの負担を減らしたぶん生成速度が遅くなりますが、メモリ不足が起きにくくなります。
set COMMANDLINE_ARGS=-–medvram
あまり推奨はされていませんが、「–medvram」の代わりに「–lowvram」と記載すると、生成がかなり遅くなってしまうため多くの場合はオススメされていませんが、どうしても動かない場合はお試しください。
set COMMANDLINE_ARGS=--lowvram
対策4:-–xformersを使う
xformersライブラリを使用します。メモリ消費量と速度が大幅に改善します。
set COMMANDLINE_ARGS=--xformers
対策5:–opt-sdp-attentionを使う(xFormersと併用不可)
環境によってはxFormersが動作しない環境もあります。xFormersが利用できない環境での高速化にはopt-sdp-attentionが有効とされています。Pytorch2.0系の環境ではxformersよりも高速化できるという報告も上がっています。注意点としてxFormersと併用はできないためご注意ください。
「xFormers以外で、Stable Diffusionの生成速度を高速化」をご覧ください。
set COMMANDLINE_ARGS=–opt-sdp-attention
対策6:その他アプリケーションを閉じる
原始的な方法ですが、他のアプリケーションが起動している場合は終了し、PC及びVRAMのリソースを集中させましょう。
設定はwebui-user.batに書き込む
1.2はファイル冒頭に、3.4はset COMMANDLINE_ARGS=に続いて書き込みましょう。
パラメータを合わせて利用する際は半角スペースで繋いでいきます。
set COMMANDLINE_ARGS=--xformers -–medvram
Google Colabの場合は?
「Google Colab」でStable Diffusionoを利用している場合、「webui-user.bat」にアクセスするにGoogle Driveのマイドライブsdフォルダ内のstable-diffusion-webuiフォルダを開き「webui-user.bat」を「Text Editor」か「Anyfile Notepad」で開きます。
それでもメモリ不足に悩まされたら
かなりエラーがでる率は下げることができますが、どうしても限界は存在しますので、作業効率があまりにも悪いと思ったら、より高速で大容量のVRAMのグラフィックボードを導入しましょう。現状1.5については4GBあれば動作するとされていますが、体感的には8GB、欲を言えば12GBのVRAMは欲しいところです。
Windowsの設定、ドライバや様々な設定を見直すことで高速化できることがわかってきています。詳しい情報は「Stable Diffusionのパフォーマンスを向上させるための15のTips」もご覧ください。