xformersからsdpに変更する方法(より高速になる?)

SD関連

はじめに

xformersの代わりに入れるものです。
早くなるかは環境によるかもしれないのと、新しいものなので何かあった時に対処するのが面倒になる可能性は考慮しておいてください。(今のところExtension周りでエラーも吐いてないので大丈夫そうではあります)

追記(高解像度の場合、恩恵が大きくなっていくようです)

4000番台は結構早くなるらしい(?)という話とVRAM消費量が増える(低VRAMの人は注意)という話をよく見ますね。

また、何かあった時のために別フォルダで新規環境を作って入れたほうが良いと思います(併用でスピード実験もできるので)
めんどくさくて上書きして後悔している人がここにいます。
(テスト結果の情報が少ないのはそれが原因ですw)


テスト結果

3090のt2i生成ではそこまで変わる感じはしませんでした。
一応t2iの768*768x1.5(Latent)を1枚生成した時の比較を置いておきます。
(早い)–opt-sdp-no-mem-attention > xformers > –opt-sdp-attention(遅い)

xformers
–opt-sdp-no-mem-attention
–opt-sdp-attention

it/sは数字が大きい方が早いです。


やり方1(webui-user.batの編集で入れる)

2回目移行の起動時前に消す項目があるので忘れないようにしてください。
面倒に感じるならやり方2の方がおすすめです。

webui-user.batに下記を記入します。
COMMANDLINE_ARGS=~の部分はxformers関連の引数をすべて消してください。
ほかは残したまま(–ckpt-dirとか)でこれを追記で大丈夫です。
set TORCH_COMMAND=~の部分はそのまま丸ごと追記でOKです。

set TORCH_COMMAND=pip install torch==2.0.0 torchvision --extra-index-url https://download.pytorch.org/whl/cu118
set COMMANDLINE_ARGS=--opt-sdp-no-mem-attention --opt-channelslast --reinstall-torch

何かエラーが出てよく分からんってなったらvenvフォルダを消せば古いtorch,xformersは消えるので、その方が手っ取り早いかもしれません。venvフォルダを消した後は上記を追記してあるbatをもう一度起動してください。

【次回起動時には消す所】
・set TORCH_COMMAND=~の丸ごと追記した1行全部
・set COMMANDLINE_ARGS=~の–reinstall-torchの部分のみ


やり方2(コマンドラインで入れる)

こちらの方法の場合はあとで消す項目とかはないです。

Powershellでvenv環境に入る

webuiのルートフォルダ(webui-user.batある所)でShift+右クリックからPowershellを開きます。
下記を入力してvenv環境に入ります。

venv\Scripts\activate

pip,setuptoolsの更新

やらなくてもいいけど、ついでだしやっておいたほうがいいやつです(多分)
pipについてはどこかのタイミングでアップデートしてくださいっていうメッセージが出るので出たらやるでもいいですが、最初にやっといたほうが楽です。

python.exe -m pip install --upgrade pip
python -m pip install --upgrade pip setuptools

xformersとtorchをアンインストールする

新規環境を作っている方はこれはスルーで大丈夫です。

pip uninstall xformers -y
pip uninstall torch torchvision -y

新しくtorchを入れる

pip install torch==2.0.0 torchvision --extra-index-url https://download.pytorch.org/whl/cu118

コマンドライン作業は終わりです。閉じてOKです。

webui-user.batを編集する

webui-user.batのCOMMANDLINE_ARGS=に下記の引数を追加します。
また、xformers関係の引数は全て消してください。
他の引数(–ckpt-dirとかはそのまま残しておいて大丈夫です)

set COMMANDLINE_ARGS=--opt-sdp-no-mem-attention --opt-channelslast

確認方法

WebUI起動後に一番下の表記がtorch 2.0.0+cu118になっていればOKです。


sdp関連のコマンドライン引数一覧

引数説明(機械翻訳)
--opt-sdp-attentionxformers を使用するよりも高速で、手動で torch 2.0 を venv にインストールしたユーザーのみが利用できます。(非決定論的)
--opt-sdp-no-mem-attentionxformers を使用するよりも高速で、手動で torch 2.0 を venv にインストールしたユーザーのみが利用できます。(決定論的、 よりわずかに遅い--opt-sdp-attention)
--opt-split-attentionクロスアテンションレイヤーの最適化により、ほとんどコストをかけずにメモリ使用量が大幅に削減されます (パフォーマンスが向上したという報告もあります)。黒魔術。NVidia と AMD の両方のカードを含む では、
デフォルトでオンになっています。torch.cuda
--disable-opt-split-attention上記の最適化を無効にします。
--opt-sub-quad-attentionSubquadratic Attention は、メモリ効率の高い Cross Attention レイヤーの最適化であり、必要なメモリを大幅に削減できますが、わずかなパフォーマンス コストがかかる場合があります。xformers が機能しないハードウェア/ソフトウェア構成でパフォーマンスが低下したり、世代が失敗したりする場合に推奨されます。macOS では、これにより、より大きなイメージの生成も可能になります。
--opt-split-attention-v1上記の最適化の古いバージョンを使用し、メモリをあまり消費しません (VRAM の使用量は少なくなりますが、作成できる画像の最大サイズはより制限されます)。
--opt-channelslast安定した拡散のためのトーチ メモリ タイプをチャネル ラストに変更します。詳細に研究されていない効果。

参考元

以下を参考にこの記事は作成しました。

タイトルとURLをコピーしました