🎆

dreambooth with xformers on windowsで苦労したやつ

2022/11/25に公開

所感

なぜautomatic1111とdreambooth-extentionでtorchのcudaバージョンが違うのだ…
それぞれ実行するたびに再インストールしてくれるので、環境壊しまくってくれる。
以下はその辺りをどうにかした記録。

前提

  • NVIDIA RTX A6000 (Production Branch 526.67)
  • Windows 10 Pro Workstation 21H2
  • Anaconda 22.9.0
  • CUDA 11.6.2
  • cuDNN 8.4.1.50
  • automatic1111 [828438b]

環境構築手順

  1. automatic1111をClone
(base) > git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
(base) > cd stable-diffusion-webui
  1. python3.10環境を用意

xfomersの動作に3.10が必要。
下記作業はうちのbase環境が3.10では無いためなので、人によっては不要。

temp_emviroment.yaml
name: temp
channels:
  - defaults
dependencies:
  - python=3.10
  - pip=22.3.1
(base) > conda env create -f temp_emviroment.yaml
  1. lauch.pyを編集
launch.py
-    torch_command = os.environ.get('TORCH_COMMAND', "pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113")
+    torch_command = os.environ.get('TORCH_COMMAND', "pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116")
  1. とりあえず一回実行

一回回して、venv環境の構築と一通りのパッケージを入れさせる。

(base) > conda activate temp
(temp) > .\webui.bat --xformers
  1. 起動できたら、通常の手順でdreambooth extensionを入れる

https://wikiwiki.jp/sd_toshiaki/Dream Booth

  1. 一旦落とす
...
ctrl+c
  1. 手動で各種パッケージを整理

automatic1111とdreambooth-extentionがtorchやtorchvisionのバージョンを取り合っておかしくなったら、手動で入れ直して固定する。

(venv) > pip install --force-reinstall -r .\extensions\sd_dreambooth_extension\requirements.txt

(venv) > pip install torch==1.13.0+cu116 torchvision==0.14.0+cu116 --force-reinstall --extra-index-url https://download.pytorch.org/whl/cu116

(venv) > pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl
  1. 環境変数の追加

dreamboothをなんどもインストールしない。永続化はコンパネから。

(base) set DREAMBOOTH_SKIP_INSTALL=False
  1. lauch.pyを編集

なんどもインストールしない。

launch.py
 if __name__ == "__main__":
-    prepare_enviroment()
+    #prepare_enviroment()
     start()
  1. 改めて起動
(base) > .\venv\Scripts\Activate.ps1
(venv) > .\webui.bat --xformers
  1. 多分動く

学習時の注意

Advansdペイン内のAuto-Adjust(WIP)を必ず押すこと。4090だとそのまま動いたが、A6000だとすぐ cuDNN error: CUDNN_STATUS_INTERNAL_ERRORを吐く。A6000の方がRAM多いのに…解せぬ…

追記

何かの拍子にcuDNN error: CUDNN_STATUS_INTERNAL_ERRORが止まらなくなった。どうも以下が悪さしている模様。

train_dreambooth.py
49 - torch.backends.cudnn.benchmark = True
49 + # torch.backends.cudnn.benchmark = True

torch.backends.cudnn.benchmarkはちゃんと動けばtorchの動作が早くなるはずだが、うまくいっていない感。タイミング的には訓練じゃなくてClass Image作ろうとしてるところで落ちてるっぽい。おそらく前述のAuto-Adjust(WIP)押さないと落ちる問題も同根だったのでは。
取り急ぎサクッとコメントアウトして様子見。

追記2

sd_dreambooth_extensionのrepo見てたら、DreamBooth側のtorchとrequirements.txtを優先せえと書いてあった。Readmeは読めですね。すいません。
https://github.com/d8ahazard/sd_dreambooth_extension/blob/main/webui-user-dreambooth.bat

Discussion