
PyTorch 2を使うようになってからxformersの効果はあまりないようです。こちらはPyTorch 1系を使用している方向けの記事になります。
Stable Diffusionはテキストや画像から新しい画像を生成できるAIの技術です。
高クオリティな画像が簡単に生成できることから、現在いろいろな界隈で利用者が増えています。
しかし、Stable Diffusionは多くの計算を必要とするため、スペックによってスムーズに動作しない可能性があります。
そこで今回はコマンドライン引数「xformers」を使って、Stable Diffusionの動作を高速化する方法について解説します。
少しでも動作を軽くして画像生成を行いたいという方は、ぜひ参考にしてください。
- Stable Diffusionで画像生成を高速化したい
- xformersの使い方がしりたい
- xformersの効果について詳しくしりたい
なお、こちらの記事はStable Diffusionがインストールされていることを前提としています。
インストールがまだの方はこちらの記事を参考にしてみてください。
Stable Diffusionのコマンドライン引数とは?

コマンドライン引数は、Stable Diffusionを起動したときに動作を制御できるパラメータのことです。
バッチファイルを右クリックして編集を開くと「set COMMANDLINE_ARGS=」とあります。
COMMANDLINE_ARGSを日本語に訳したものがコマンドライン引数で、ここにパラーメータを指定することでさまざまな設定が可能です。
わかりやすいものだと、Stable Diffusionをダークモードにできるものがあります。
「set COMMANDLINE_ARGS=--theme dark」と入力すると、ダークモードで起動します。

このように起動前にStable Diffusionの動作を制御できるものが、コマンドライン引数です。
今回はコマンドライン引数の中から、画像生成を高速化できる「xformers」をご紹介します。
Stable Diffusionのxformersってどんな機能?

簡単に言うとxformersはVRAMの使用量を軽減しつつ、画像生成を高速化できるものです。
Stable Diffusionでは画像を生成するのに非常に多くの演算を行いますが、xformersを使うと演算を最適化したアルゴリズムで行えます。
画像を生成するための演算が最適化されるので、通常よりVRAMの消費量が抑えられ、画像生成を高速化できるという仕組みです。
公式でもxformersのインストールは推奨されています。
For more efficiency and speed on GPUs, we highly recommended installing the xformers library.
GPU の効率と速度を向上させるために、xformers ライブラリをインストールすることを強くお勧めします。
https://github.com/Stability-AI/stablediffusion
ただし、使用するモデルや画像生成時の設定によって、必ず当てはまるというわけではありません。
ハイクオリティの画像だと画像生成速度は上がっても、VRAMの消費量が増加してしまうパターンがあります。
また古すぎるGPUなどには対応していないこともあるため、注意が必要です。
torchとxformersのバージョン
xformersを使用する前にtorchのバージョンを確認する必要があります。
torchのバージョンによって有効なxformersのバージョンも異なるからです。
torchが1.x系の場合はxformersは0.0.16まで、torchが2.x系の場合はxformers 0.0.17から対応しています。
これらのバージョンはWeb UIを起動してページ下部から確認ができます。

もし2つのバージョンが合っていない場合は、アップデートすることができます。
torchをアップデートする方法
torchをアップデートデートするにはWeb UIのフォルダにあるバッチファイル「webui-user」を右クリックして、編集を開きます。
以下のコマンドを入力して、保存します。
set COMMANDLINE_ARGS=--reinstall-torch
set TORCH_COMMAND=pip install torch==2.0.0 torchvision --extra-index-url https://download.pytorch.org/whl/cu118
実際に入力するとこのような形です。

これはtorchを2.0.0にして、再インストールするコマンドです。
この状態でバッチファイルを起動すると、torchが再インストールされます。
Web UIの下部を確認して、「torch: 2.0.0+cu118」となっていればアップデート完了です。
xformersをアップデートする方法
まずWindowsの検索で「cmd」と入力して、コマンドプロンプトを開きます。
以下のコマンドを入力して、ディレクトリを変更します。
cd "C:\Users\user\デスクトップ\stable-diffusion-webui\venv\Scripts"
cdがチェンジディレクトリコマンドで、そのあとにWeb UIをインストールしたフォルダにある「\stable-diffusion-webui\venv\Scripts"」のパスを指定しています。
お使いの環境に合わせて書き換えてください。
ディレクトリを変更したら以下のコマンドを実行します。
pip install -U xformers
問題なくインストールが終わったら、下記コマンドでバージョンの確認ができます。
python -m xformers.info
23年5月現在では「xformers 0.0.19」になっていれば無事アップデートできています。

Stable Diffusionでxformersを使う方法
Torchのアップデートと同じく、バッチファイルを編集してコマンドライン引数を指定します。
まずWeb UIのフォルダにあるバッチファイル「webui-user」を右クリックして、編集を選択します。

「set COMMANDLINE_ARGS=」という項目があるので、そこに「--xformers」と入力します。

この状態でバッチファイルを起動して、コマンドプロンプトに「Launching Web UI with arguments: --xformers」と表示されていれば、正しく設定ができています。

Web UIを起動したらTorchとxformersのバージョンも確認してみてください。
23年5月時点ではtorch: 2.0.0+cu118 xformers: 0.0.19となっていればどちらもアップデートできています。

またxformersを強制的に有効化するオプションや、より計算量を減らしてパフォーマンスを向上させるオプションもあります。
--force-enable-xformers
xformersは全てのモデルに対応しているわけではなく、モデルによってサポートされていないものがあります。
ですが、--force-enable-xformersを使えば、全てのモデルに対してxformersを強制的に有効化できます。
ただ--force-enable-xformersを使用しても、必ずVRAMの使用量が軽減できるわけではありません。
モデルや設定により異なるため、画像生成のパフォーマンスを確認しながら使い分けが必要です。
--xformers-flash-attention
通常プロンプト(呪文)の全ての要素を計算して画像が生成されますが、--xformers-flash-attentionを有効にするとプロンプトの選別ができます。
プロンプトの中から重要度を計算するときに、一定のしきい値以下のものを除外してくれるというものです。
これにより計算量が減るため、VRAMの使用量も軽減されるという仕組みです。
ただこちらも絶対ではないので、使用する場合は確認しながら調整してください。
Stable Diffusionでxformersを使うとどれくらい変わるの?
いくつか異なるモデルや設定で、xformersを使い、生成速度とVRAMのパフォーマンスがどれくらい変わるか試してみました。
neverendingDreamNED
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 3254474635, Size: 512x512, Model hash: 64b14b6ca5, Model: neverendingDreamNED_bakedVae
xformersなし

Time taken: 5.86sTorch active/reserved: 3187/3710 MiB, Sys VRAM: 5864/8192 MiB (71.58%)
xformersあり

Time taken: 5.11sTorch active/reserved: 2627/3070 MiB, Sys VRAM: 5254/8192 MiB (64.14%)
結果:画像生成時間-0.75秒、VRAM消費量-7.44%
※上記の設定にHires upscale: 1.5, Hires upscaler: Latentを追加
xformersなし

Time taken: 22.93sTorch active/reserved: 3534/4054 MiB, Sys VRAM: 6200/8192 MiB (75.68%)
xformersあり

Time taken: 15.92sTorch active/reserved: 3322/4638 MiB, Sys VRAM: 6966/8192 MiB (85.03%)
結果:画像生成時間-7.01秒、VRAM消費量+9.35%
chilled_remix
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 3275626319, Size: 512x512, Model hash: 70e66e96d7, Model: chilled_remix_v1vae
xformersなし

Time taken:5.83sTorch active/reserved: 3172/3690 MiB, Sys VRAM: 5836/8192 MiB (71.24%)
xformersあり

Time taken:4.98sTorch active/reserved: 2630/3072 MiB, Sys VRAM: 5256/8192 MiB (64.16%)
結果:画像生成時間-0.85秒、VRAM消費量-7.08%
dreamlike-anime-1.0
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 2612741319, Size: 512x512, Model hash: aacfb54d9c, Model: dreamlike-anime-1.0
xformersなし

Time taken: 8.88sTorch active/reserved: 2629/3144 MiB, Sys VRAM: 5290/8192 MiB (64.58%)
xformersあり

Time taken: 6.35sTorch active/reserved: 2627/3126 MiB, Sys VRAM: 5310/8192 MiB (64.82%)
結果:画像生成時間-2.53秒、VRAM消費量+0.24%
どのモデル・設定でもxformersありの方が画像生成速度は向上しています。
ただhires.fixなどを使用して高解像度の画像を生成すると、VRAMの消費量も増加するという結果でした。
Stable Diffusionでxformersを使うデメリットはある?

デメリットはほぼありませんが、同じパラメーターでも一貫性のない画像が生成されるという報告が上がっています。
誰かのプロンプト(呪文)を参考にして、それと同じ画像を生成したいときは、xformersを使わない方が精度は上がるかもしれません。
xformers使って高速化する方法まとめ
今回はコマンドライン引数「xformers」でStable Diffusionを高速化する方法について解説しました。
- Stable Diffusionのコマンドライン引数とは?
- xformersの機能について
- xformersを使う方法
- xformersでパフォーマンスの検証
- xformersのデメリット
モデルや設定によりVRAMの使用量は増加しますが、画像生成速度もしっかり向上できます。
画像生成の量が多くなるほど、この恩恵は大きいです。
Stable Diffusionは自分の理想を求めて何枚も画像生成をするのが醍醐味なので、パフォーマンスを上げて損することはありません。
公式でも推奨されている設定ですので、ぜひ試してみてください。
コメント