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に関する投稿: