MENU
\ ポイント最大11倍! /

【初心者向け】Stable Diffusionで超高速に画像生成する設定をオン。

こんにちは、画像生成AIでひたすら猫のイラストを生成している じょじお(@jojio‗illust)です。

この記事はStable Diffusionの高速化設定であるxformersをオンにしてみたらめちゃくちゃ快適になったので紹介します。

設定時に出たエラーと、その対処方法についても解説。

「大きな画像の生成」や、「アップスケール」の高速化をしたい方に向けた内容です。

▲AI画像の大量ファイルをプロンプトと一緒に簡単に整理する方法はこちら。

素材に関連する英単語100個以上まとめました。

すべてのプロンプト関連記事はこちらにまとめています。

▲Midjourneyユーザー向け。専用Discordサーバーを作って画像生成作業を効率化する方法。

目次

xformersとは?

xformersというものがStable Diffusionを高速化できるらしいということで調べてみました。

xformersについて、Automatic1111さんのWebUI リポジトリのxformersの項に解説があったのでみてみましょう。

xformersのメリット

Xformers library is an optional way to speedup your image generation.

This optimization is only available for nvidia gpus, it speeds up image generation and lowers vram usage at the cost of producing non-deterministic results.

(訳)Xformersライブラリは、イメージ生成を高速化するオプションの方法です。この最適化は、nvidia gpusでのみ利用可能であり、イメージ生成を高速化し、vramの使用率を低下させますが、非決定的な結果という代償を払います。

Automatic1111 – xformers
じょじお

xformersは画像生成を高速化する効果があるとのことですね。

じょじお

ただ、「非決定的な結果という代償を払います。」というのがめちゃくちゃ引っかかります。なんじゃそら・・・・悪魔との契約みたいなものなのだろうか・・・?

xformersのデメリット:非決定的な結果(non-deterministic results.)とは?

非決定的な結果」という文言がリンクになっていたので、リンク先へジャンプして非決定的な結果とは何なのか確認してみました。

非決定的な結果(non-deterministic results.)

リンク先にはxformersを利用した際に生じる、いくつかの既知の問題がリストアップされていました。

わたしが一番気になったのは下記の点です。下記は私なりに要約した文章です。

同一シード同プロンプトなら通常は同じ絵が出るが、xformersをオンにしている場合、結果に差異が出ることがある。高解像度の画像を生成するときや、ANDキーワード(マルチプロンプト)を使う時、長文プロンプトを使う時でこの問題は顕著になる。

とのことです。つまりシード値を固定して画像を連続生成するときに、一貫性のない画像がでることがあるということなのでしょうか。

ただ、このスレッドに添付されている問題の画像を見てみると、目を凝らしてみなければわからないレベルの違いでした。私にはとても小さな問題のように感じたのでこれについて私は目をつぶることにしました。xformersを使ってみていますが、今のところ特に問題は感じていません。

他にもいくつかの問題があるようです。xformersを利用する際は、必ずご自身で問題を確認してから自己責任でご利用ください。不安な方は、オンオフを切り替えながら運用する方法もありだと思います。簡単に切り替えを行う方法も後述しています。

xformersの問題点

参考にしたページ

xformersの設定手順

前提条件

xformersの有効化の前に、一応、私の環境をさらしておきます。

  • GPUはNVDIA GeFource RTX 3060(VRAM12GB)
  • CUDAは11.6

xformersにはCUDAというものが必要になるらしいのですが、これについては私はよくわかってないです。私のPCにおいては、個別にインストールしたわけではなく、グラボ付きのPCを購入したところデフォルトで入っていたようです。

自作PCをお使いの場合や、グラボを個別にアップグレードしている方は別途CUDAのインストールが必要になるのかもしれません。

CUDAバージョンの確認方法:コマンドプロンプトで「nvideia-smi」を実行。

NVDIAのグラボ以外ではxformersを使うことはできないようです。

xformersのインストール方法

じょじお

結論から言うと手順はメチャクチャ簡単です。エラーがでなければ。

xformersのインストール方法について、Automatic1111公式の解説には、とても長い手順が解説されています。この解説内では自分でpythonの「pip」コマンドでxformersをビルドしています。

ところが、いろいろと調べたところ、下記のGithub内の議論で、WebUIのバッチファイルにコマンドライン引数を記述するだけで有効化できるという情報を見つけました。

You cannot install xformers like that on Windows.
You just enable it in the commandline arguments, add –xformers to the argument.
The UI will install the module on next launch.

You can also use –reinstall-xformers if need be.

(DeepL訳)

コマンドラインの引数に –xformers を追加して有効にするだけです。
次の起動時にUIがモジュールをインストールします。

必要であれば–reinstall-xformersを使うこともできます。

Github – No module ‘xformers’. Proceeding without it. #5303

私は、このコマンドライン引数の設定だけでxformersを有効化することができたので、今回はこの方法を紹介します。

じょじお

さっそく設定してみます。

▲webui-user.batを右クリックして「編集」を選択してメモ帳などで開き「set COMMANDLINE_ARGS=」の行を下記のように書きかえます。

set COMMANDLINE_ARGS=--xformers

▲書き換えた保存して閉じます。

これで設定は完了です。

xformersが有効化できているかの確認

▲バッチファイルをいつも通り起動したら、起動ログに「Launching Web UI with arguments: –xformers」と表示されればxformersの有効化は成功です。

参考

コマンドライン引数についての補足

既に「–xformers」以外にもコマンドライン引数を使っている方は、引数を同時に使うことが可能です。

引数を半角スペースで連結して書いてください。

例えば私はスマホでもアクセスできるように「–listen」オプションを使っています。この場合、下記のように記述します。

set COMMANDLINE_ARGS=--xformers --listen

▲コマンドライン引数が有効になっているか起動時に確認してください。

▼WebUIをスマホやiPadから使う方法はこちら。

xformersの検証

さっそくどれくらい画像の生成時間に差があるのか検証してみました。

H512xW512の画像サイズ バッチ50

  • xformersオンの場合:2分28秒
  • xformersオフの場合:3分03秒

H1920xW1080の画像サイズ バッチ1

  • xformersオンの場合:00分48秒
  • xformersオフの場合:01分35秒
じょじお

xformersを有効化にした方は明らかに速いです。画像サイズが大きくなるほど効果を体感できそうです。

xformersの無効化・有効化の切り替え

xformersを無効にする方法は、webui-user.batに記述したコマンドライン引数を削除するだけです。

オフオンの切り替えを頻繁に行いたい場合は、「xformersがオンのwebui-user.bat」と「xformersがオフのwebui-user.bat」のバッチファイルを2つ作っておいて、起動時にどちらをダブルクリックするかで切り替えれば楽です。

▲2つのバッチファイルを作ってみました。

xformers有効化すると画像生成ができない。

私はxformersは有効化できたのですが、有効化すると画像生成が全くできなくなり、下記のエラーがでました。

ValueError: Query/Key/Value should all have the same dtype

query.dtype: torch.float32

key.dtype : torch.float32

value.dtype: torch.float16

(翻訳)バリューエラー:クエリ/キー/バリューはすべて同じdtypeでなければならない

これは、下記に解決策をみつけました。

For me that particular error was generated by a setting I’ve changed

[ ] Upcast cross attention layer to float32

and I got that error when this option was checked

(訳)

私の場合、このエラーは、私が変更した設定によって発生しました。

[]アップキャストクロスアテンションレイヤーをfloat32へ

で、このオプションがチェックされていると、このエラーが発生しました。

I need help fixing XFORMERS for Automatic1111

この方は、「Upcast cross attention layer to float32」の設定をオフにすることで解決したようです。

私は、この設定値に心当たりがありました。デフォルトではこの設定値はオフなのですが、私はpruned16系のモデル(軽量版モデル)を使うためにこの設定をオンにする必要があり、設定変更していたのを思い出しました。

私は再びpruned16系のモデルが使えなくなる心配を抱えつつ「Upcast cross attention layer to float32」をオフに戻しました。ですがこの心配は結果的に不要でした。

xformersはこの問題を解決してくれたようです。

Upcast cross attention layer to float32」をオフにする方法は下記の記事をご確認ください。

まとめ

以上、Stable Diffusionの高速化設定方法でした!!!!

じょじお

この記事がお役に立ちましたらシェアボタンからシェアお願いします!!!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次