Stable Diffusion Web UI (AUTO1111)を安全にアップデートする。

Stable Diffusion Web UI (AUTO1111)をアップデートするだけであれば、”git pull”を実行するだけでできるのですが、その後に起動する保証はどこにもありません。

また知らぬ間に手元のコードを変更していたり、ダウンロードしたファイルなどがgitで管理されておらずその対応に困ることもあると思います。

トラブルが起こったときの解決には骨が折れますし大変です。Stable Diffusion Web UIはStable Diffusionの進化に追従するためしょうがないことではあるのですが、アップデートした後に動かなくなかったり、バグが発生することなんて日常茶飯事です。特に大規模アップデートが起こった直後は危険なことが多いです。

トラブルが起こるのはしょうがないとして、元の状態にすぐに戻せる状況に戻せる状態にしておくことをおすすめします。本記事では安全にStable Diffusion Web UIをアップデートする手順について紹介します。

別フォルダで新しく環境を作る方法もあり

アップデートが面倒であれば、新規にフォルダを作成してそこにgit cloneでコードを取得して新しく環境を作る方法があります。

コマンドプロンプトで次を実行

mkdir sd2
cd sd2
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

sd2配下のstable-diffusion-webui\webui.batを実行するだけで新しいバージョンのWEB UIを起動できます。あとは必要な拡張機能をインストールして、モデルファイルなどを過去のバージョンのフォルダから移動することで安全に新バージョンのStable Diffusion WEB UIを利用できます。

特にSDXLを使うためにStable Diffusion Web UIをアップデートする場合は新しく環境を作る方法がおすすめです。詳しくは以下の記事を参考にしてください。

アップデート前にやるべきこと

ソースコード自体をアップデートしたい場合のやるべき手順をまとめます。「やったほうが良い」や「やっても良い」は必要に応じて飛ばしても構いません。

  • githubリポジトリを確認して状況確認(★★やったほうが良い)
  • 現在のコミットハッシュを確認してメモする(★やっても良い)
  • models,embeddingsのバックアップを取る(★やっても良い)
  • 現状の状態を別ブランチで保存(★★★絶対やったほうが良い)
  • git pull(必須)

githubリポジトリを確認して状況確認

githubリポジトリを確認して状況確認確認とは、Stable Diffusion Web UI (AUTO1111)や拡張機能のgithubページのissueなどを確認して問題が起こっているかどうかの確認です。常にissueはあるとは思いますが、あまりにもissueが多い状況だったら、一度バグが落ち着くまでアップデートを控えるという手もあります。

ちなみに私が確認するページは次の通りです。

Stable Diffusion Web UIのリリースノートの確認

Releases · AUTOMATIC1111/stable-diffusion-webui
Stable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub...

Stable Diffusion Web UIのIssueの確認

Issues · AUTOMATIC1111/stable-diffusion-webui
Stable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub...

あとはControlNetは重要な拡張機能で依存関係も多そうなので確認。

Issues · lllyasviel/ControlNet
Let us control diffusion models! Contribute to lllyasviel/ControlNet development by creating an account on GitHub.

現在のコミットハッシュを確認してメモする

git logなどでコミットハッシュを確認して現在の状況を確認しておくと、コードの状態を戻しやすくなります。後ほど、現在の状況をブランチに保存するため、不要と言えば不要ですが、手間は少ないので確認してメモしておいて損はないです。

git log

次のようなコミットログが表示されますが、最上部のコミットハッシュをメモします。この例だと、394ffa7b0a7fff3ec484bcd084e673a8b301ccc8がコミットハッシュです。

commit 394ffa7b0a7fff3ec484bcd084e673a8b301ccc8 (HEAD -> master, tag: v1.4.0)
Merge: baf6946e dbc88c96
Author: AUTOMATIC <16777216c@gmail.com>
Date:   Tue Jun 27 08:38:14 2023 +0300

    Merge branch 'release_candidate'
...以下略

models,embeddingsのバックアップを取る

“stable-diffusion-webui/embeddings”や”stable-diffusion-webui/models”は追加モデルが保存されるので、変更が行われていることでしょう。万全を期すのであれば、フォルダを別のところにコピーしてバックアップを作っておきましょう。

バックアップをとったほうが良いものの、容量が大きいので面倒だったりします。モデルファイルが変更されることは基本的にはないので、私の場合はバックアップをとらないことが多いです。

現状の状態を別ブランチで保存

現在の状態を別ブランチで保存します。これはgithubの真骨頂ですね。まずは、新しくブランチを切ります。ブランチ名は日付を入れることをおすすめします。

git checkout -b 20230801backup

次にすべてのファイルをgit addします。ただし、巨大なファイルを追加する可能性がある場合は時間がかかるのでaddすべきかどうかを考えてください。*.safetensors,*.ckpt,*.pthなどのモデルファイルは.gitignoreに記載されているため気にしなくて大丈夫です。

もし追加する必要がありそうなファイルがあれば.gitignoreに記載しましょう。

git add -A

これでファイルがステージングに登録されます。一旦、現状の確認を行います。

git status

私の場合は以下のような感じになりました。

On branch 20230801backup
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   config_states
	deleted:    embeddings/Place Textual Inversion embeddings here.txt
	deleted:    extensions/put extensions here.txt
	new file:   models
	deleted:    models/Stable-diffusion/Put Stable Diffusion checkpoints here.txt
	deleted:    models/VAE-approx/model.pt
	deleted:    models/VAE/Put VAE here.txt
	deleted:    models/deepbooru/Put your deepbooru release project folder here.txt
	deleted:    models/karlo/ViT-L-14_stats.th
	modified:   modules/ui.py
	deleted:    style.css

正直知らないファイルばかりですが、この変更をコミットします。

git commit -m "20230801バックアップ"

ちゃんとコミットされたことを確認しましょう。gitの初期設定が完了してないとコミットが完了してないケースなどがあります。git statusをして”nothing to commit”という文字が表示されていればコミットは成功しています。

$ git status
On branch 20230801backup
nothing to commit, working tree clean

最新のStable Diffusion Web UIをgit pull

これで下準備が完了しました。それではgit pullしていきますが、masterブランチに切り替えます。

git checkout master

ではgit pullします。

git pull

これでアップデートは完了です。それでは動作確認しましょう。

元に戻したい場合

動作確認をした結果、動かない、もしくは数日後に異変に気付いて元に戻したくなったときは簡単に元に戻せます。ブランチを作成して保存しているので、checkoutするだけです。

git checkout 20230801backup

で動いていたときの状態に戻ります。簡単ですね。

もしブランチ名を忘れていたらgit branchでブランチ名を表示しましょう。

アップデートのトラブル

Stable Diffusion Web UIのアップデートに関して遭遇したトラブルをまとめておきます。

KeyError: ‘Stable Diffusion XL’

KeyError: 'Stable Diffusion XL'

Stable Diffusion XLのアップデートを取り込んだときに発生するエラーです。

https://github.com/Stability-AI/generative-modelsがStable Diffusion XLに対応してないことが原因です。なので最新版にアップデートしたら解決しました。

cd stable-diffusion-webui/repositories/generative-models
git pull

現在は解消されています。Stable Diffusion Web UIをアップデートするだけで解消します。

Stable Diffusion XLについて興味のある人は以下の解説が参考になります。

コメント