当ブログにはプロモーション、アフィリエイト広告が含まれます。

【Stable Diffusion】コマンドライン引数「xformers」を使って高速化する方法!

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」を右クリックして、編集を選択します。

Windows11の方は右クリック→その他のオプションを表示→編集に行けます。

「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 optimization causes inconsistent generations with the same parameters · Issue #1999 · AUTOMATIC1111/stable-diffusion-webui
Describe the bug The new xformers optimization has something that makes it so that when given the same parameters for generation the same image won't be generat...

誰かのプロンプト(呪文)を参考にして、それと同じ画像を生成したいときは、xformersを使わない方が精度は上がるかもしれません。

xformers使って高速化する方法まとめ

今回はコマンドライン引数「xformers」でStable Diffusionを高速化する方法について解説しました。

まとめ
  • Stable Diffusionのコマンドライン引数とは?
  • xformersの機能について
  • xformersを使う方法
  • xformersでパフォーマンスの検証
  • xformersのデメリット

モデルや設定によりVRAMの使用量は増加しますが、画像生成速度もしっかり向上できます。

画像生成の量が多くなるほど、この恩恵は大きいです。

Stable Diffusionは自分の理想を求めて何枚も画像生成をするのが醍醐味なので、パフォーマンスを上げて損することはありません。

公式でも推奨されている設定ですので、ぜひ試してみてください。

コメント

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