WSLで動かす AUTOMATIC1111 stable-diffusion-webui
はじめに
以前から使っているWSLを利用したStable Diffusion環境を流用してAUTOMATIC1111 stable-diffusion-webuiを検証しようとしたところ次のような問題があったので、WSL環境をDドライブに移行した上で、新規にWSL環境を用意することにしました。
- 既存のStable Diffusion環境はconda使っていたのでvenvを利用するAUTOMATIC1111と組み合わせが悪い
- これまでデフォルトのCドライブにWSLのディスクイメージを格納していたが学習モデルが増えてきたのでディスクの空き容量が不足している
前提条件
CPU | Ryzen9 3950x |
GPU | GeForce RTX 3090 |
Host OS | Windows 10 Pro (22H2) |
Guest OS | Ubuntu 22.04 LTS |
WSLは既に利用出来る状態を想定しています。
Dドライブへの移行
Microsoft Storeから "Ubuntu22.04 LTS" をインストールする
Power Shellを開き、Dドライブに移行させる
PS > wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 1
* docker-desktop Stopped 2
* docker-desktop-data Stopped 2
* Ubuntu-22.04 Running 2
一旦バックアップ
PS > wsl --shutdown
PS > cd d:\
PS > mkdir wsl
PS > cd wsl
PS > mkdir backup
PS > wsl --export Ubuntu-22.04 D:\wsl\backup\ubuntu2204_1.tar
エクスポートが進行中です。これには数分かかる場合があります。
この操作を正しく終了しました。
CドライブにインストールされていたWSL環境を取り除く
PS > wsl --unregister Ubuntu-22.04
Dドライブで再登録
PS > mkdir Ubuntu2204
PS > wsl --import Ubuntu-2204 D:\wsl\Ubuntu2204 D:\wsl\backup\ubuntu2204_1.tar
インポート中です。この処理には数分かかることがあります。
この操作を正しく終了しました。
インポートするとWindows Terminalのプロファイルが初期化されてしまうので、コマンドラインの項目を次のように変更して、rootでログインしないようにしておきます。
C:\WINDOWS\system32\wsl.exe -d Ubuntu-22.04 -u <User Name>
パッケージの更新と追加
Windows TerminalからUbuntu22.04に接続
$ sudo apt update
$ sudo apt upgrade -y
python関係の追加パッケージをインストール
$ sudo apt install python3 -y
$ sudo apt install python3-dev python3-venv -y
$ sudo apt install python-is-python3
$ sudo apt install libgl1 -y
ここまでで一度バックアップしておきたいのでPower Shellの方に戻ってExportします。
PS > wsl --export Ubuntu-22.04 D:\wsl\backup\ubuntu2204._2tar
WSL環境からGPUを利用出来るようにする
最新のCUDA 12.xをインストールするとxformersがビルドできないという情報があったので、11.x をインストールしています。
Webブラウザで使用する組み合わせを選択して、表示されるBase Installerの項目をコピペする
再びWindows TerminalでUbuntu22.04に接続する
CUDAのインストール
$ cd ~
$ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
$ sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
$ sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
$ sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
$ sudo apt-get -y install cuda
cuDNNのインストール
Windows側でhttps://developer.nvidia.com/rdp/cudnn-archive から
cuDNN v8.6.0 (October 3rd, 2022), for CUDA 11.x のLocal Installer for Ubuntu22.04 x86_64 (Deb) をダウンロードした上でWSL環境(\wsl$\Ubuntu-22.04\home<User Name>)の中にコピーする
Windows TerminalでUbuntu22.04に接続する
$ cd ~
$ sudo dpkg -i cudnn-local-repo-ubuntu2204-8.6.0.163_1.0-1_amd64.deb
$ sudo cp /var/cudnn-local-repo-ubuntu2204-8.6.0.163/cudnn-local-FAED14DD-keyring.gpg /usr/share/keyrings/
$ sudo apt -y update
$ sudo apt install libcudnn8
$ sudo apt install libcudnn8-dev
.bashrcに環境変数を追記する
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/lib/wsl/lib:/usr/local/cuda/lib64:/usr/lib/wsl/lib:"
GPUの確認
$ nvidia-smi -L
GPU 0: NVIDIA GeForce RTX 3090 (UUID: GPU-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
$ nvidia-smi -q|head -6|tail -2
Driver Version : 526.98
CUDA Version : 12.0
11.8を指定したのに12.0になっているけど、nvccのバージョンが11.8になってればいいらしい
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
stable-diffusion-webuiの準備
$ cd ~
$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
$ cd ~/stable-diffusion-webui/
学習モデルのダウンロード
学習モデルはあちこちに点在しているので集めるのが大変
huggingface_hubの利用について別途検討する予定
github上では大きなファイルはGit LFSになっているので、LFSのアイコンの方のURLをコピペする
config用のYAMLファイルの置き場所はこっちにまとまっていたが、ファイル名を学習モデルのファイル名と合わせる必要がある
$ cd ~/stable-diffusion-webui/models/Stable-diffusion
$ wget https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.ckpt -O v2-1_768-ema-pruned.ckpt
$ wget https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/v2-inference-v.yaml -O v2-1_768-ema-pruned.yaml
$ wget https://huggingface.co/stabilityai/stable-diffusion-2-depth/resolve/main/512-depth-ema.ckpt -O 512-depth-ema.ckpt
$ wget https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/v2-midas-inference.yaml -O 512-depth-ema.yaml
$ wget https://huggingface.co/stabilityai/stable-diffusion-2-inpainting/resolve/main/512-inpainting-ema.ckpt -O 512-inpainting-ema.ckpt
$ wget https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/v2-inpainting-inference.yaml -O 512-inpainting-ema.yaml
$ wget https://huggingface.co/stabilityai/stable-diffusion-x4-upscaler/resolve/main/x4-upscaler-ema.ckpt -O x4-upscaler-ema.ckpt
$ wget https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/x4-upscaling.yaml -O x4-upscaler-ema.yaml
ようやくstable-diffusion-webuiを起動する
$ cd ~/stable-diffusion-webui
$ ./webui.sh
初回は対応したWeightのダウンロードなどもあり、起動するまで時間がかかります。
Running on local URL: http://127.0.0.1:7860 と表示されたらWebブラウザでアクセスしてみる
追加設定
xformersの追加設定
$ cd ~/stable-diffusion-webui
$ source ./venv/bin/activate
$ cd repositories
$ git clone https://github.com/facebookresearch/xformers.git
$ cd xformers
$ git submodule update --init --recursive
$ pip install -r requirements.txt
$ pip install -e .
xformersのインストールもかなり待たされます。
tritonの追加設定
$ pip install triton
~/stable-diffusion-webui にあるwebui-user.shをテキストエディターで開き、コメントアウトされているCOMMANDLINE_ARGSの行を下記のように書き換える
export COMMANDLINE_ARGS="--xformers"
再度stable-diffusion-webuiを起動する
$ cd ~/stable-diffusion-webui
$ ./webui.sh
Running on local URL: http://127.0.0.1:7860 と表示されたらWebブラウザでアクセスしてみる
12/26の時点ではdepthmapの不具合が出てるのでとりあえず応急処置
参考資料
Discussion