Stable Diffusion web UIをきれいにアップデートする
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.1
を git 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
)の差分になっちゃってるので注意。
キャッシュとかDoc用のテキストファイル類は放置で良いかな。 大事なのは設定系と、自分で突っ込んだLoraとか。
試しに webui-user.bat
を見ると↓。
旧環境では --listen
と --no-half
と --xformers
を指定してるね。
ここから必要なものだけピックアップして現環境に適応していけば良い。
(具体的な解説は後述。)
以降の記述は完全に私向けの設定をするための記述なので、参考程度に見てね。
6. style.csv
と notification.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つの設定っていうのが↓。
- 『Maximum number of checkpoints loaded at the same time』: デフォルトは
1
- 『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週間前に書くつもりだったんだが、流行り病にかかったものでな…。 おかゆと飲み物は常備しとけマジで。あと龍角散。