こんにちは!悠です!
またまた非常に有益なRedditのスレッドを見つけてしまいました。それがこちらです。
Installing cuDNN to boost Stable Diffusion performance on RTX 30x and 40x graphics cards
by u/AESIRu in StableDiffusion
「Stable Diffusion」でAIイラストの生成速度を高速化する手法として有名なのはxformersですが、Pytorch2.0系を導入している方はopt-sdp-attentionを使うことでも同様の結果を得られるようなんですね。
RTX30xxやRTX40xx等のハイスペックGPUでは、xformersと比べて10%~15%程度の高速化が望めるそうです。
そこで今回は、opt-sdp-attentionのオプションを使ってAIイラストの生成速度を高速化するやり方をご紹介していきます。

現状はローカル版でおすすめのオプションです。
Pytorch2.0のインストール
Pytorchとは、Pythonのオープンソース機械学習ライブラリであり、「Stable Diffusion」を動かすのに必須なプログラムのことです。
「え?そんなのダウンロードしたことないけど?」と思われるかもしれませんが、ローカル版WebUIをPCにインストールする際に自動的に導入されているんですね。
ローカル版導入時は多くの方が1.13.1+cu117のPytorchを使用していると思うので、これを2.0.0+cu118にアップデートする必要があります。
Pytorchのバージョンはコマンドプロンプトでも確認できますが、WebUIを起動して一番下に表示されるバージョンをチェックするだけでもOKです。
Pytorchのアップデートのやり方に関しては、下記の記事でまとめていますので参考にしてください。

なお上で紹介したRedditの記事では、webui-user.batをメモ帳で開いて下記のように入力して起動することでもPytorchを2.0.0+cu118にアップデートできると紹介されていました。
@echo off set PYTHON= set GIT= set VENV_DIR= set TORCH_COMMAND=pip install torch==2.0.0 torchvision --extra-index-url https://download.pytorch.org/whl/cu118 set COMMANDLINE_ARGS=--reinstall-torch call webui.bat
WebUIを起動してAIイラストを生成する際は、set TORCH_COMMANDの欄を全て削除して、set COMMANDLINE_ARGSをいつも使うオプションに変更してください。
opt-sdp-attentionの使い方
opt-sdp-attentionの使い方は、webui-user.batを起動してset COMMANDLINE_ARGSの中に下記のオプションを追加するだけです。
なおxformersと同時に使うことはできないので注意してください。
--opt-sdp-attention
AUTOMATIC1111のOptimizationsのページによると(下記)、Pytorch2.0系の環境ではxformersよりも高速化できるそうです。
ちなみに同じページ内にopt-sdp-no-mem-attentionというオプションもあり、こちらも同様にPytorch2.0系の環境で高速化ができるようですが、私のGTX1660Tiで試すとCUDA out of memoryになってAIイラストが生成できなくなってしまいました。

高速化はできるけれど、VRAMの消費量は増えるのかもしれないです!
xformersとopt-sdp-attentionの簡単な比較
実際にGTX1660Tiを使ったローカル版WebUIで、イラストの生成速度を簡単に比較してきました。
生成速度の比較は、768×512の画像をtxt2imgで1枚生成した後、出力欄に表示されるTime takenで行いました。
WebUIを起動して1回目のイラスト生成はデータの読み込み等で時間がかかるので、2回目以降の値で比較しています。
結果は次の通りです。
- 高速化オプションなし:29.75s
- xformers(ver0.0.18):23.47s
- opt-sdp-attention:23.61s
僅差ですが、私の環境化ではxformersの方が高速化できていました。
GTX10xx等の古いGPUでは、opt-sdp-attentionよりもxformersの方が優れているという記事もあったので、やはりハイエンドGPU向けのオプションのようですね。
Google Colaboratory版で使いたい場合
「エラーなくWebUIを起動してAIイラストを生成できる」環境を構築できている場合、どこでもいいのでセルを追加して下記のコマンドを入力し実行します。
#PyTrochのバージョンを確認 import torch print(torch.__version__)
もしこの結果が2.0.0+cu118なら、!COMMANDLINE_ARGSの中にopt-sdp-attentionを追加するだけでOKです。
ただ、それ以外のバージョンが出力された場合は、xformersを使うことをおすすめします。
まとめ
以上がPytorch2.0系の「Stable Diffusion」で、AIイラストの生成速度の高速化を行うことができるopt-sdp-attentionオプションの使い方でした。
ハイエンドGPUを使っている方には特に効果があるオプションなので、ぜひ皆さんも試してみてくださいね!
では、ここまで読んでいただきありがとうございました。
コメント
上記インストール方法で実施すると、Torchはバージョンアップしますがxformersは既存のままになるので起動時に警告が出ます
torch: 2.0.0+cu118 • xformers: 0.0.16rc425
ワーニングを回避するには手動でxformersをバージョンアップする必要があります
\webui\venv\Scripts\activate.bat
pip install -U xformers
python -m xformers.info
これでエラーが出なくなります
torch: 2.0.0+cu118 • xformers: 0.0.19
コメント&ご報告ありがとうございます!
Redditのやり方でもTorchをアップデートできることがわかってよかったです!
とはいえxformersもアップデートしないとエラーが消えないのなら、下の記事で私がまとめた方法でもよさそうですね~
https://yuuyuublog.org/xformers_update/
-autolaunchは最後にしないとそれより後ろの記述を無視することになる。
set COMMANDLINE_ARGS=–xformers –autolaunchが正しいと思います。
コメントありがとうございます!
え!もしそうなら私ずっとやり方を間違えていたかもしれません…!!!!
一応、–autolaunch –xformers にしてもコンソールには「Applying attention optimization: xformers… done.」と出ていたり、autolaunch以降に記述した「–lyco-dir models/lora」は、私の環境では機能していたりするのですが、環境によって異なるのでしょうか?
いつも参考にさせてもらってます。
上のコメントにもあるように警告が出る場合、以下のようにbatを書き換えて起動するのが一番簡単にxformersのアップデートができると思います。
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set XFORMERS_PACKAGE=xformers==0.0.20 ←追加する
set COMMANDLINE_ARGS=–xformers –reinstall-xformers ←追加する
call webui.bat
必要なバージョンは自分で確認する必要があります。
xformersの更新後は記述を元に戻す必要があります。