はじめに
Stable Diffusionの高速化では定番となるxFormersがありますが、
さらなる高速化が可能となるSDPAの使い方を紹介します。

導入の仕方から、生成時間の比較結果も載せているので最後まで見ていってね。
この記事では以下のことが理解できます。
- Pytorch2.0 SDPAのインストール方法
- Pytorch2.0 SDPAの使い方
- SDPAを使用した場合の画像生成時間
SDPAとは

SDPAはscaled dot product attentionの略で、Pytorch2.0で実装されています。
従来のxformersと比較すると、さらに画像生成時間を短縮することが可能です。
SDPAをインストールする
SDPAを使用するにはPytorch2.0にアップデートする必要があります。
- STEP1仮想環境(venv)の準備
仮想環境を上書きしてしまうと、トラブルが発生した場合に大変なことになるので、既存の仮想環境をバックアップしておきましょう。
「webuiフォルダ」 → 「venv」フォルダの名称を適当なものに変更しましょう。
venvフォルダ 変更後のフォルダ名 私は「venv_old」に変更しました。
- STEP2スクリプトファイルの実行を有効化する
Windows PowerShellを管理者権限で実行します。
PowerShellはタスクバーの左端にあるWindowsスタートボタンを右クリックすると、ポップアップメニューに起動ボタンが表示されます。
PowerShellを管理者権限で起動 PowerShellが表示されたら以下のコマンドをコピペしてエンターキーを押下します。
PowerShell Set-ExecutionPolicy RemoteSigned
完了したら、PowerShellウィンドウは閉じて構いません。
- STEP3新しい仮想環境を作る
「webuiフォルダ」の何もないエリアでShift + 右クリックし、表示されたポップアップメニューから「PowerShellウィンドウをここで開く」をクリックします。
※もしくは、cdコマンドでwebuiフォルダに移動しますPowerShellを起動 PowerShellが表示されたら以下のコマンドをコピペしてエンターキーを押下します。
python -m venv venv
これでwebuiフォルダ内に新しい「venv」フォルダが作成されます。
続いて以下のコマンドをコピペしてエンターキーを押下します。
venv\Scripts\Activate.ps1
これで仮想環境に入ることができます。
- STEP4Pytorch2.0をインストールする
引き続き以下のコマンドをコピペしてエンターキーを押下します。
pip install torch==2.0.0 torchvision --extra-index-url https://download.pytorch.org/whl/cu118
少し時間がかかりますが、気長に待ってください。
これでインストール完了です。
SDPAを有効化する
「webuiフォルダ」の中にある「webui-user.bat」を編集モードで開きます。
COMMANDLINE_ARGSに「–opt-sdp-attention」を追加します。
※-は2つです

後は普段通りにwebui-user.batをダブルクリックして、Stable Diffusion WebUIを起動します。
SDPAでどのくらい高速化されるのか計測してみた
SDPAを使用した場合に、どの程度高速化されるのか画像生成時間を比較しました。
xformersの有無、–opt-sdp-attention、–opt-sdp-no-mem-attentionで生成時間を測定しています。
–opt-sdp-attentionは低VRAMで使用できますが、生成する度に画像が変化します。
–opt-sdp-no-mem-attentionは生成速度が低下する傾向で、VRAMをたくさん使いますが、設定が同じであれば同じ画像が生成されます。




テストは解像度512×512、ステップ数20、バッチ回数10で実施しました。
測定結果は以下の通りです。
コマンドライン引数 | 生成速度 | 使用VRAM | 速度比較 |
無し | 7.21it/s | 5.4gb | -(基準) |
–opt-sdp-attention | 11.06it/s | 4.4gb | 153% |
–opt-sdp-no-mem-attention | 10.95it/s | 5gb | 152% |
–xformers | 8.71it/s | 4.5gb | 121% |
ということで、SDPAの効果は抜群でした!
環境により結果は異なるので、効果は各自確認してみてください。

テストに使用したGPUはRTX4070 tiだよ。
50%以上早くなるから–opt-sdp-attentionは手放せないね
SDPAを使用してトラブルが発生した場合
もしもトラブルが発生した場合には、Pytorch2.0をインストールしたvenvフォルダを適当な名前にリネームして、バックアップした旧venvフォルダ名を「venv」に戻すだけです。
「webui-user.bat」に記述したPytorch2.0用のコマンドライン引数「–opt-sdp-attention」などは、忘れずに削除しようね。
あとは普段通りに起動すれば、旧環境で起動します。
AI画像生成は余裕を持ったストレージ容量がおすすめ
AI画像生成では思った画像が生成できないことが多々あるので、テスト用の画像を沢山生成します。
また、モデルデータも数GBのデータ容量なのでデータ保存先となるストレージは大容量のHDDやSSDがおすすめです。
容量を求めるならHDD、読み込み/書き込みスピードもある程度欲しい場合はSSDを選択しましょう。
(SSDの方がスピードと静音性(無音です)に優れます)
まとめ
今回は、Stable Diffusionを高速化するSDPAの使い方を紹介しました。
環境によりますが50%以上の高速化も可能となるので、ぜひチャレンジしてみましょう!

というか必須レベルでは?
実は、TensorRTを使用すると画像生成時間が2倍程度高速になります。
TensorRTを使用した画像生成方法については↓の記事が参考になります。
Comment