Stable Diffusion web UIをきれいにアップデートする

WinMergeによるStable Diffusion web UIの `webui-user.bat` の差分

Caution

この記事はHexo(2023年4月17日以前)、またはGatsby(2024年4月13日以前)時代の記事だよ❗ 現在のブログとは見た目や機能が異なる可能性があるよ❗

Stable Diffusionをローカルで使う人は結構な割合の人がお世話になってる web UI 。 こいつの更新( v1.6.0 )が来てたので、アップデートしたい。

が、単にアップデートしちゃうと前Ver( v1.5.1 )の設定とかが悪さするかもしれない。 そこで、『きれいに』アップデートしようと思う。

1. バックアップ

何はともあれバックアップ。 cloneしたweb UIのフォルダ(ローカルrepo)をコピペするだけ。

web UIのフォルダ以外は使ってないんじゃないかなあ。 確認はしてないけど、GitHubで公開してるようなアプリだし、普通は内部で完結するのが流儀だよね。

2. ローカルrepoのクリーンアップ

ローカルrepoをcloneしたときの状態まで戻す。 つまり、 webui-user.bat を実行して落としてきたPython環境とか、 自分の設定とか、CheckPointとかLoraとかをまとめて全部吹っ飛ばす❗

(よくわからん人は git clone したほうが確実だし早い。)

まずは、どのファイルがふっとばされるのか確認する。 ↓のコマンドを実行。

$ git clean -nffdx
Would remove __pycache__/
...

Would remove models/**_
Would remove models/_**
Would remove models/\*\*\*
...
Would remove venv/

Would remove *** って表示されるディレクトリとファイルが消去対象。

良さそうなら↓で消去実行。オプションから n を引っこ抜けば良い。

git clean -ffdx

これできれいになった。 つまり、 v1.5.1git clone してきたのと同じ状態になった。

余談: git clean -ffdx について

最初は git clean -fdx で良いと思い込んでたのですげーハマった。 入れ子になったGitレポジトリまでcleanするためには -ffdx にしないといけないようだ。

悔しかったので Qiitaに記事を書いた

3. ローカルrepoの更新

いよいよ更新。↓でOK。これで最新になる。

git pull

4. 何もいじらない(バニラ)状態でまずは動作確認

ここで拡張機能とかをいれるのは時期尚早。 まずは動作確認のためにバニラで動かす。

いつもどおり webui-user.bat を起動。

webui-user.bat

Python環境の構築を最初から始めるのでちょっと時間がかかる。 しばらくすると localhost:7860 にアクセスしろって言われるので、これでweb UIは準備OK。

バニラなので --listen オプションはついてない。 Macからはアクセスできないので、Windowsから localhost:7860 にアクセスする。

見慣れた画面になるので、適当に1枚生成してみて生成できるようならOK。 当然、CheckPointも何も入ってないので、素のStable Diffusion V1.5(なのか❓)しか選べないはず。 今は生成ができればOK。

5. WinMergeで旧環境から必要なものを探す

みんな大好き WinMergeくん 。 こいつを使えば、バニラの最新環境と旧環境のファイル差分がまるわかり。

こんな感じ↓。 更新時のスクリーンショットは取り忘れてたので現環境( v1.6.0 )と旧環境( v1.5.1 )の差分になっちゃってるので注意。

WinMergeによるStable Diffusion web UIのファイル差分

キャッシュとかDoc用のテキストファイル類は放置で良いかな。 大事なのは設定系と、自分で突っ込んだLoraとか。

試しに webui-user.bat を見ると↓。

WinMergeによるStable Diffusion web UIの `webui-user.bat` の差分

旧環境では --listen--no-half--xformers を指定してるね。 ここから必要なものだけピックアップして現環境に適応していけば良い。 (具体的な解説は後述。)

以降の記述は完全に私向けの設定をするための記述なので、参考程度に見てね。

6. style.csvnotification.mp3 のコピー

style.csv は自分で編集したスタイルが保存されているファイル。 試しにバニラ環境でスタイルをいじってみたが、 csvの中身の形式は v.1.5.1 のときと差がなかった。 互換性があると判断してコピペ。

(「なんでcsvなんだよ」っていう技術的なツッコミは置いておく。全体設定ファイルは config.json でJSONなのになぁ。)

notification.mp3 は画像生成が完了したときに鳴らす音声ファイル。 web UI側で設定とかは特になく、 ローカルrepoの直下に notification.mp3 というファイルがあれば自動で認識して鳴らしてくれる。 これもコピペで良い。

7. embeddings のコピー

↓を旧環境からコピペ。これは今も使うので。

  • easynegative.safetensors
  • ng_deepnegative_v1_75t.pt
  • verybadimagenegative_v1.3.pt

8. 拡張機能のインストール

↓を再インストール。アップデートも兼ねる。

  • a1111-sd-webui-tagcomplete
    • いわゆるDanbooruタグを自動で補間してくれる拡張
  • sd-webui-controlnet
    • 女の娘に指定のポーズを取らせる拡張(ControlNet)
  • sd-webui-regional-prompter
    • 領域ごとにプロンプトやLoraを指定する拡張(Regional Prompter)

↓は今は使わないのでインストールしない。こういう取捨選択ができるのもきれいにアップデートする利点だよね。

  • multidiffusion-upscaler-for-automatic1111
    • 画像分割してUpscaleすることで低VRAMでも超高解像度が実現できる拡張
    • 生成が重すぎて使ってない

ちなみに、起動オプションに --listen が指定されていると、拡張機能はインストールできないので注意。 まぁ、別PCからGitリポジトリをCloneさせれたらセキュリティ的にやばいので当然か。

9. CheckPointとLoraのコピー

コピペするだけ。

ここも、使わなくなったCheckPointとLoraはコピペしないようにしてダイエットしよう。

あと、一部のCheckPointはアップデートしてたりするので、それもここで対応。

10. 起動オプションをコピー

webui-user.bat にて COMMANDLINE_ARGS を必要に応じてコピペ。 先述の通り、↓をコピペ。

  • --listen
    • これで外部のPCからアクセスできるようになる。
    • https://PCのIP:7860 でアクセスできる。
    • 普段は、Windowsで webui-user.bat を実行しつつ、Macからアクセスして画像生成してる。
  • --xformers
    • 画像生成用のライブラリ、xformersを使えるようにする。
    • 画像生成がちょっと早くなって、VRAMの使用量をぐっと抑えれる。

↓のオプションは採用しないことに。

  • --no-half
    • 浮動小数点演算の精度に関連する…らしい❓
    • これをつけてないとエラーを吐くVAEがあった。
    • こういうよくわかってないものは使わないに限る。
    • v1.6.0 ではこれなしでもエラーを吐くVAEはない。自動で対応してくれるようになった❓

11. 生成先フォルダをDropboxへのシンボリックリンクに切り替える

生成結果は普段使い慣れてる画像ビュワーで見比べたい。 となると、生成結果をMacに自動で転送すれば良い。

そこで、生成先をDropboxのフォルダにする。 web UIの設定から変更しても良いけど、 ローカルrepoの外側を参照させることになるので、なんかイケテナイ。

ここはシンボリックリンクを貼ることにする。 コマンドは↓。

New-Item -ItemType SymbolicLink -Path "C:\Users\ユーザ名\repo\stable-diffusion-webui\outputs\" -Target "C:\Users\ユーザ名\Dropbox\stable-diffusion-outputs\"

勘違いしないのでほしいのは、Dropboxはシンボリックリンクを認識しないことね。 web UIは認識してくれる。 なので、Dropbox側を普通のフォルダにしておいて、 web UI側をシンボリックリンクにする。

このテクは別のクラウドサービスでも使えると思う。 BoxでもGoogle Driveでもお好きなものをどうぞ。

あ、ただし各サービスとも検閲が入るので、アブナイ画像を生成するときはお気をつけて。 NASがほしいなぁ❗

12. 全体設定を変える

web UIのSettingsを変更する。

全体設定は config.json に保存されるようだ。 これも旧環境からコピーしようかとも思ったがやめた。 自分が変更してない設定内容なんかも大量に記録されてて、新環境で悪さしそうだったので。

しかも、記載内容が順不同なんだよなぁ。なんでや💢 これのせいで、新環境と旧環境の差がWinMergeで分からない…。

12-1. 画像グリッドを保存しない

バッチ生成したときに画像グリッドができるが、 これがDropboxの容量を食うので保存しないようにする。

↓のチェックマークを外す。

  • 『Saving images/grids』
    • 『Always save all generated image grids』

12-2. Alt + ←→ によるプロンプトの移動を無効にする

Alt + ←Alt + → でプロンプトを移動できる。 が、これは邪魔。 Macだと同じコマンドにカーソルの単語移動がOSレベルで割当たってるので、バッティングしちゃうのよね。 ついでにいうとプロンプトも書く順序を決めてるので、移動したいってことないんだよなぁ。

↓のチェックマークを外す。

  • 『User interface』
    • 『Alt+left/right moves prompt elements』

12-3. Clip Skipを2にする

画質向上設定の一種。 AI画像生成は層ごとに画像を生成するが、 最後の層をスキップすると良い結果になる…という実験的な知見が得られているらしい。

Clip Skipは最後の層から何番目までをスキップするかの設定。 2 を設定すると最後の層だけスキップする。

↓を 2 にする。

  • 『Stable Diffusion』
    • 『Clip Skip』

12-4. CheckPointをRAMにキャッシュする

何も設定変更するところはない

一応↓の設定が存在するが、

  • 『Stable Diffusion』
    • 『Checkpoints to cache in RAM』

注釈に↓のように書いてある。

(obsolete; set to 0 and use the two settings above instead)

要はこの設定は廃止すると。

で、2つの設定っていうのが↓。

  1. 『Maximum number of checkpoints loaded at the same time』: デフォルトは 1
  2. 『Only keep one model on device』: デフォルトは有効

「ぶっちゃけよくわからんな…」と思ったが、後者のほうの注釈が↓。

(will keep models other than the currently used one in RAM rather than VRAM)

「今使ってるやつ以外のモデルはVRAMじゃなくてRAMに保存するようになる」って書いてある気がする。 裏を返せば、今使ってるモデルはVRAMに置いてくれてる(=高速化済み)ってことじゃね❓

まぁ、最終的によくわからんかったw 素人がパッといじって高速化できるようなものではないと判断。 何もいじらないようにしておく。

12-5. VAEをRAMにキャッシュする

こっちはVAEのほうのキャッシュ設定。キャッシュしたほうが早くなるのでしておく。

↓の設定を 1 にする。

  • 『VAE』
    • 『VAE Checkpoints to cache in RAM』

12-6. VAEの選択用プルダウンを表示

いつもの。

↓に sd_vae を追加。

  • 『User interface』
    • 『Quicksetting list』

あとがき

以上❗ なんか長くなっちゃった❗ 良きStable Diffusionライフを❗

本当は1、2週間前に書くつもりだったんだが、流行り病にかかったものでな…。 おかゆと飲み物は常備しとけマジで。あと龍角散。