Xformersを導入する

Last-modified: 2023-11-30 (木) 16:26:34

Xformersについて

追加ライブラリの一つ。
生成AI分野でしばしば使われる。画像生成だけでなく、言語生成などにも。
https://github.com/facebookresearch/xformers

Xformersによる高速化について

Xformersを有効化すると、次の効果を得ることができます。

  • 画像生成速度の大幅な向上
  • 使用するVRAM量の大幅削減

恩恵が大きいので、基本的に導入したほうがよいでしょう。
「cuda out of memory」エラーが発生したときに、お世話になるオプションです。

PyTorch2系の高速化について

どこに書こうか迷いましたがとりあえずここに書きます。
PyTorch2系にアップデートすると"--opt-sdp-attention --opt-sdp-no-mem-attention"のパラメータ
を--xformersの代わりにCOMMANDLINE_ARGSに設定することで高速化が図れると紹介するサイトも
ありますが、VRAM消費量はxformersのほうが少ないので注意しましょう。
GTX1070 8GBで生成時に上記の最適化を利用したら768x768の生成がVRAM不足で動かなくなりました。

導入方法

導入要件

  • NVIDIA系のGPUであること。

必須要件を満たせない場合は、Xformersは導入出来ません。
※この場合、DirectMLを使用することになります。

GTX 9xx等の非常に古いグラボを使用している場合

Xformersは標準では GTX 10xx 以降のグラボ*1にしか対応していません。
とはいえその 10xx でも発売が6年前と結構前なのであまり気にする必要もないでしょう。

 

ただ、もしかすると「昔のPCをAI用マシンにしたい」とかでそれより前のグラボを使う事があるかもしれません。
そういった時はこのページの内容は無視して以下のページの指示に従ってください。
ただし自前でコンパイルする必要があったりでハードルは高めです。
https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Xformers

インストール

1.webui-user.bat を開く

 webui-user.bat をテキストエディタで開きます(※)。
 ダブルクリックじゃないよ。編集するために開くんだよ。※右クリック→「編集」、またはメモ帳で開く。

   stable diffusionのフォルダ
  └webui
       ├ webui-user.bat  ←これ。
        └ webui.bat    ←こっちじゃない。
注意: 編集するのはwebui-user.bat の方だよ

注意: 編集するのはwebui-user.bat の方だよ
webui.bat の方じゃないよ
としあきがwebui.batを編集するのは厳禁だよ
なぜならwebui.batは1111の開発メンバーによってアプデされることがあるからだよ
もしもとしあきが手元のwebui.batを編集してしまうと、後日git pullとかで1111を最新版に更新する際に、編集履歴同士が衝突して面倒くさいことになるよ
だからとしあきが編集していいのはwebui-user.batの方だけだよ
ゆめゆめ忘るることなかれ
(そう囁くと老婆は煙のように姿を消した…)

 

2.webui-user.bat を編集&保存

 set COMMANDLINE_ARGS= の後ろに --xformers という引数を書き加えてください。
 以下のようになっていればOK.
 よくわからなければ下記をそのまままるっとコピペすれば動きます。
 編集後に保存します。

@echo off

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--xformers

call webui.bat
 

3.WebUIを起動

すると、インストールが自動で実行されて導入完了です。
 なお、上記の「--xformers」コマンドは削除不要です。

4.Xformersを使用したくない時

 「--xformers」コマンドを削除しましょう。


導入済みのXformersの更新方法

 すでにxformersが導入していて、かつ1111を更新及び再起動したときに
 notice(注記)として、そのxformersのバージョンでは未検証(サポート外みたいなもの)と表示されることがあります。
 そんなときは、コマンド「--reinstall-xformers」を追記しましょう。(追記するのは更新時の1回のみ)

set COMMANDLINE_ARGS=--reinstall-xformers

PyTorchのアップグレード(必要な場合のみ)

XformersにはPyTorchが必要です。
PyTorchそのものは既にインストール済みだと思います(web-UI導入時)。
通常作業は不要ですが、もし旧バージョンと指摘された場合はアップグレードしてください。

 

webui-user.batを開き、下記コマンドを追加

--reinstall-torch

インストール実行後は、コマンドを外す。

指摘・更新するべき箇所や助言など

  • "--xformers --reinstall-xformers"を実行したらこんなエラー出てくるようになっちゃった
    /usr/local/lib/python3.9/dist-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: libtorch_cuda_cu.so: cannot open shared object file: No such file or directory -- 2023-07-16 (日) 21:42:13
  • os.environ.get('COMMANDLINE_ARGS', "--xformers")や"webui.bat --xformers"でうまくいったと言っている人、起動するのはwebui.batじゃなくてwebui-user.batの方です -- 2023-07-21 (金) 07:09:03
    • そっちでも動くのね…webui-user.batをメモで上書きしてwebui.batの方起動してたわ。webui-user.batがエラー出て動かない時はPythonのパスが無い所為かも -- 2023-10-17 (火) 03:59:28
  • webui-user.batのset COMMANDLINE_ARGS=で
    自動ウィンドウ機能の--autolaunchは一番最後の順番にすること。
    autolaunchを--xformersより先に記述すると
    --xformersを無視してしまうので順番には気をつけてください
    この記事 https://wikiwiki.jp/sd_toshiaki/%E3%80%8Cwebui-user.bat%E3%80%8D%E3%82%92%E7%B7%A8%E9%9B%86%E3%81%99%E3%82%8B は間違ってます。
    正しくはset COMMANDLINE_ARGS=--xformers --autolaunch
    -- 注意? 2023-07-26 (水) 19:27:58
    • それ書いたの私です。まさか、と思って今一度試したところ、Xformersは起動しました。下記が起動ログです。起動後に動作していることを確認しました。しかし、hashによっては起動しないのかもしれません。
      Python 3.10.10 [MSC v.1929 64 bit (AMD64)]Version: v1.5.0Commit hash: a3ddf464a2ed24c999f67ddfef7969f8291567beInstalling requirements for Seed TravelLaunching Web UI with arguments: --autolaunch --xformers#
      あるいは何か記入ルールを間違えると、起動する場合とそうでない場合があるとか・・・?謎です。 -- 2023-07-26 (水) 20:20:52

(Tips)

導入がうまく行かない場合
→ XformersがなくてもStable diffusionは動作します。
  導入できない理由は、個々のPC環境に依存するので、エラー文を眺めるほかありません。
  質問による解決は難しいです。
  どうやっても使えないケースもあります。
  自己解決できないなら、いさぎよく導入を諦めましょう。

  • 既存コメントの先頭にあるラジオボタンをONにすると、そのコメントの下にぶら下げ返信する形になります(ツリー構造)。
  • コメントの文中で↵ボタン(下の画像参照)を押すと「&br;」の文字列が挿入されます。これは送信後に改行として機能するので、文章の整形に役立ちます。
    br.png

*1 正確にはアーキテクチャが Pascal, Turing, Ampere, Lovelace または Hopper のもの