本記事ではxFormersとStable Diffusoion Web UIへの導入方法について解説をします。次のような方におすすめの記事になっております。
- 画像生成が遅くて時間を無駄にしている。
- メモリが不足してRuntimeError: CUDA out of memory.が発生する。
- xFormersを導入したいけどメリットとデメリットを把握したい。
xFormersとは
xFormersとはMeta社(旧: Facebook)が開発したオープンソースです。Stable DiffusionやChatGPTで使われているTransformerという部品を高速に計算できるようにする技術です。これを使うことでTransformerを利用しているディープラーニングモデルの時間効率とリソース効率が大幅に向上します。
xFormersはStable Diffusion Web UIをインストールした時点でインストールされているので追加でインストールする必要はありません。そのためStable Diffusion Web UIだと簡単に利用することができます。
xFormersのメリットは?xFormers有無比較で画像生成の効果を測定!
画像の生成時間が改善
xFormersのメリットは画像の生成時間が改善される点です。これがどのぐらいの変化なのかを調査しました。解像度512×768の画像を生成してみた結果ですが6.4秒が4.9秒に縮まりました。33%改善されるのでかなり大幅な改善です。GPUはRTX 3080Ti(16GB)です。
消費GPUメモリの削減
もう一つの大きなメリットは消費されるGPUメモリが削減されることです。これも調査した結果、6.7GBから5.8GBに変わりました15%の削減になります。生成した画像の解像度512×768の画像、GPUはRTX 3080Ti(16GB)です。
xFormersのデメリット、注意点は?
xFormersは計算を効率化するだけの手法なのでデメリットと呼べるものはあまりないです。強いて挙げるとすれば次のような注意点があります。
xFormers導入前と比べてわずかに生成される画像が変わる
わずかにですが生成される画像がxFormersを導入すると変化します。目ではほとんどわからない些細なレベルです。
左: xFormersなし、右: xFormersあり
違う画像が生成されているかを確認するために差分をとった画像を作成してみました。目の周辺、あごのや服装や背景の表現方法が変わっているようです。着物のデザインがわずかに違う箇所があります。間違い探しですね。
左: xFormersあり、右: 差分画像
過去バージョンのデメリット(生成される画像が同じ設定でも非決定的)
The Xformers library provides an optional method to accelerate image generation. This enhancement is exclusively available for NVIDIA GPUs, optimizing image generation and reducing VRAM usage. Older versions below 0.0.20 will produce non-deterministic results.
https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Xformers
xformersを使うことで生成される画像が同じパラメータでも異なるランダムな結果になることがありました。wiki上の説明では非決定的(non-deterministic)となっています。これはバグだったようで現在のバージョンでは解消されました。手元での確認をしてみましたが、特に変化はありませんでした。
参考: xformers option has good and bad aspects
xFormersを導入できるのはNVIDIA製のGPUのみ
Stable Diffusion Web UIでxFormersを導入できるのはNVIDIA製のGPUのみだけです。AMD製のGPUではサポートされてません。あくまで2023年9月時点なので近い将来、AMDでも採用される可能性はあります。デメリットのないxFormersが標準で導入されてないのはこれが原因でしょう。なので、NVIDIA製のGPU搭載のPCをお持ちでしたらxFormersを導入しないと損です。
NVIDIA製じゃなければ–opt-sdp-attentionを使おう!
--opt-sdp-attention
というオプションがありこれも--xformers
とほぼ同等の効果があります。
Stable Diffusion Web UIでのxFormersの導入方法
Stable Diffusion Web UIからxFormersを利用するのは起動時のコマンドの引数に–xformersを追加するだけです。
といっても起動スクリプト経由(webui-user.bat)で起動している人はコマンドをみたことがないかもしれないです。なのでどのようにするかを解説していきます。
起動時スクリプトに引数–xformersを追加してxFormersを有効化
メモ帳でwebui-user.batを開きます。開き方ですがメモ帳を開いてファイルをドラッグアンドドロップします。すると起動スクリプトの中身を見ることができて編集することができます。8行目に
set COMMANDLINE_ARGS=--xformers
の一行を追加します。
Before
@echo off
if not defined PYTHON (set PYTHON=python)
if not defined VENV_DIR (set "VENV_DIR=%~dp0%venv")
set SD_WEBUI_RESTART=tmp/restart
set ERROR_REPORTING=FALSE
mkdir tmp 2>NUL
After
@echo off
if not defined PYTHON (set PYTHON=python)
if not defined VENV_DIR (set "VENV_DIR=%~dp0%venv")
set SD_WEBUI_RESTART=tmp/restart
set ERROR_REPORTING=FALSE
set COMMANDLINE_ARGS=--xformers
mkdir tmp 2>NUL
保存してメモ帳を閉じましょう。するとxformersが使えるようになります。いつも通りにwebui-user.batを起動するとコマンドプロンプトに次のようなメッセージが表示されています。
Launching Web UI with arguments: --xformers
このようになっていればxformers
が導入されています。
FAQ
他に性能を改善する方法はないの?
他には仮想メモリやスワップの拡張もおすすめしております。モデルのロード時にPCがフリーズしてしまう際などは有効な手法です。
Windowsユーザー向け
Mac、Linux系OSユーザー向け
Stable Diffusion重い…PCが落ちる場合は?
重いPCが落ちるなどギリギリな環境の場合はスペックを見直しましょう。
私もギリギリの環境でStable Diffusionを使っていたのですがPCを買い換えて時間が大幅に削減されてもっと早く買い換えておけば良かったと後悔しました。
Stable Diffusion SDXLで登場や円安が進んでいる今がスペックの見直しのタイミングです。もし気になる方は次の記事を参考にしてみてください。
「importerror no xformers / xformersがインストールされていないようです」、”No module ‘xformers’. Proceeding without it.”が表示される
これはxFormersを導入していない場合に表示されます。これ自体は表示されていても特に問題はないです。ただしxFormersを導入していないのはもったいないので本記事を参考にxFormersを導入してみましょう。
xFormersを無効化するには?
xFormersを無効化するには–xformersを引数から外します。もしスクリプト経由でStable Diffusion Web UIを起動している場合はファイルを次のように修正します。スクリプトをメモ帳で開いて次のような記載がある箇所を見つけて–xformersを削除してください。
set COMMANDLINE_ARGS=–xformers
の行を削除。
コメント