dreambooth with xformers on windowsで苦労したやつ
所感
なぜ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]
環境構築手順
- automatic1111をClone
(base) > git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
(base) > cd stable-diffusion-webui
- python3.10環境を用意
xfomersの動作に3.10が必要。
下記作業はうちのbase環境が3.10では無いためなので、人によっては不要。
name: temp
channels:
- defaults
dependencies:
- python=3.10
- pip=22.3.1
(base) > conda env create -f temp_emviroment.yaml
- lauch.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")
- とりあえず一回実行
一回回して、venv環境の構築と一通りのパッケージを入れさせる。
(base) > conda activate temp
(temp) > .\webui.bat --xformers
- 起動できたら、通常の手順でdreambooth extensionを入れる
- 一旦落とす
...
ctrl+c
- 手動で各種パッケージを整理
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
- 環境変数の追加
dreamboothをなんどもインストールしない。永続化はコンパネから。
(base) set DREAMBOOTH_SKIP_INSTALL=False
- lauch.pyを編集
なんどもインストールしない。
if __name__ == "__main__":
- prepare_enviroment()
+ #prepare_enviroment()
start()
- 改めて起動
(base) > .\venv\Scripts\Activate.ps1
(venv) > .\webui.bat --xformers
- 多分動く
学習時の注意
Advansdペイン内のAuto-Adjust(WIP)を必ず押すこと。4090だとそのまま動いたが、A6000だとすぐ cuDNN error: CUDNN_STATUS_INTERNAL_ERRORを吐く。A6000の方がRAM多いのに…解せぬ…
追記
何かの拍子にcuDNN error: CUDNN_STATUS_INTERNAL_ERRORが止まらなくなった。どうも以下が悪さしている模様。
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は読めですね。すいません。
Discussion