サイトアイコン はまとりねっと

【Stable Diffusion】簡単なパフォーマンスチューニングの結果【SD1.6】

AUTOMATIC1111でVersion1.6.0を入れてみました。デフォルト状態のままでは重いので簡単にできるチューンアップをしてみました。ついでに時間も計測してみたので、参考になれば幸いです。ただ、環境によっては効果が無いとか、悪影響を与えてしまうこともあると思いますので、その点、ご考慮いただいてご覧ください。

SDXL:masterpiece, best quality, higher, insanely detailed, 8k, river, mountain, shining
negative:(worst quality, low quality:1.4),(depth of field, bokeh, blurry:1.4)

1. 私の環境

私の環境は以下の通りです。

Windows11

AUTOMATIC1111ーStableDiffusion Version1.6.0

Intel Core i5-13500

3060Ti VRAM 8GB

32GB Memory

これくらい書いておけばいいかな?

全く同じ環境ということは無いでしょうが、似た環境の方は多いと思います。

単純にインストールして、SDXLの画像(1024x1024)を生成しようと試みましたが、ピクリとも動きませんね。(苦笑)他の値はデフォルトです。

2. 行った設定

何がネックになっているかという話ですが、まず間違いなくVRAM不足です。生成中はMAXで張り付いています。ちなみにCPUは5%~15%ぐらいなので、まったくと言っていい程、関係ありません。

以下行った検証ですが、GPUの温度は52度前後で温度としては問題ない状態で行っています。

2.1. Default状態、1024x1024の画像生成

モデルは「sd_xl_base_1.0.safetensors」を使っています。VAEも一応「sdxl_vae.safetensors」を入れています。他ちょいちょいと設定変更とかしていますが、あまり画像生成には関係の無い設定変更のみです。txt2imgの画面では画像サイズの変更以外はしていません。prompt/negative promptは適当に入れました。

ちなみに512x512では42秒で生成できていますが、SDXLでは1024x1024がある意味最低サイズなので、ちょっとおかしな画像が生成されました。

そして1024x1024の画像生成にかかった時間は・・・・

 

7分15秒

 

これではちょっと使えません。。。

エラーではないのですが、「–no-half-vae」をつけろと言われたのでここでセットします。

以降、1024x1024の画像生成です。

2.2. –medvram の設定

–medvramは速度を落として、VRAMを少し節約してくれて、ちょっと処理を遅くする機能があります。

セットして実行したところ・・・

 

38秒

 

え?なんという劇的な変化でしょうか。もう、試さなくていいんではなかろうかと思いました。

一応「–no-half-vae」を外してやっても結果は同じでした。(以降「–no-half-vae」は付けたままの試行です)

「–lowvram」を使うとよりメモリを節約してくれます。しかし、行けるならばそこまで節約しなくてもいいのかなと思いこの検証からは外しています。ちなみに53秒でした。

2.3. –xformers の設定

よく聞く「高速化するにはこれだっ!」ってオプションの–xformersの設定をしてみます。–medvramの設定は外しています。

私も以前のバージョンでは使っていたオプションですね。

セットして実行したところ・・・

 

6分4秒

 

なんか期待外れというかなんというか。もっと早くなると思っていたのですが、うーん。でも、少なからず効果はあるようです。

「–xformers」の代わりに「–opt-sdp-attention」を使えます。「–xformers」はNVIDIA専用の機能なので、「–xformers」を使えない場合は「–opt-sdp-attention」を使用してください。私の環境では「–opt-sdp-attention」で6分59秒かかったので「–xformers」を載せています。

2.4. garbage_collection_threshold:0.6 の設定

これはVRAMを再利用する設定です。(よくわからんけど)0.6という値は60%を超えたら、ガーベッジコレクションしてくれるってことです。要は効率よくVRAMを利用してくれるって感じですね。とはいえ、不要な処理を間に入れることになるのでスピードという観点ではそんなに期待できないです。

セットして実行したところ・・・

 

8分16秒

 

やはり、速くはなりませんでした。素で実行したのの1分増しです。

よく「max_split_size_mb:128」も追加してね。という 記事を見かけるのですが、この設定を入れるとエラーになったため省きました。

入れるには以下のように記載します。

set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128

3. 組み合わせ

ここまで個別に試して来たので、組み合わせを試してみたいと思います。

3.1. 全部入れ

ここまでやってきたところ、–medvramがダントツなのですが、設定を全部入れたらどうなるのか?というところで試してみようと思います。

セットして実行したところ・・・

 

エラーがでました。。。

 

Error
Connection errored out.

このエラーに対応するのに「–no-gradio-queue」というのが効果あるらしいです。ちょっと議論を覗いてみましたが、原因等よくわからないですね。

この設定を追加して実行したところ・・・

 

40秒

 

これくらいならば、いけそうです。

3.2. –medvram + –xformers の設定

速度に効果が見られたこの2つのオプションを足してみたらどうなるかを検証してみました。「–no-gradio-queue」は一応入れておきます。

セットして実行したところ・・・

 

37秒

 

素晴らしい。最速です。

garbage_collection_threshold:0.6 の設定も悪くは無いと思うのですが、VRAMを常に使い切っている状態からするとこの機能が常に働くことになり、遅くなってしまうということなんじゃないかと思います。

まとめ

今まで使ったオプションをまとめます。全て「webui-user.bat」に入れます。(赤字部分が追加)

@echo off

set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=–xformers –no-half-vae –no-gradio-queue –medvram

call webui.bat

この中で、ガベージコレクションのオプションは入れても入れなくてもどっちでも良いと思います。動作を考えると入れない方がいいのかな?とも思いますね。

1画像を生成するのに40秒というのは決して速くはありませんが、7分以上かかっていたことを考えるとまぁましになったのかなと思います。一応、Stable Diffusionを使ってみようって気になりますね。この3060tiの環境下ではSDXLの画像生成はちょっと厳しいという感じでしょうか。まぁ、512×512レベルの生成には10秒かからないので、こっちで遊んでいきます。Upscaler使えば十分楽しい画像は出力できますしね。

尚、これらのオプションは他のバージョンとかでも利用可能だと思います。

重ねてですが、あくまで私の環境でこうなったという話であり、ご自分の環境で全く同じような効果を得られるということではありません。ご自分の環境でいくつかオプションを試して、速いと思った構成にしてください。

最後に表を。

オプション 1024x1024の画像生成にかかった時間
デフォルト(ノーオプション) 7分15秒
–medvram 38秒
–xformers 6分4秒
garbage_collection_threshold:0.6 8分16秒
–medvram + –xformers + garbage_collection_threshold:0.6 40秒
–medvram + –xformers 37秒

参考になれば幸いです。

他のSDに関する投稿:

モバイルバージョンを終了