🙄

WSLで動かす AUTOMATIC1111 stable-diffusion-webui

2022/12/27に公開

はじめに

以前から使っている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を利用出来るようにする

https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_local

最新の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をコピペする

https://github.com/Stability-AI/stablediffusion/tree/main/configs/stable-diffusion
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の不具合が出てるのでとりあえず応急処置

https://github.com/Extraltodeus/depthmap2mask/issues/35#issuecomment-1365112615


参考資料

https://seesaawiki.jp/nai_ch/d/1111_WSL2

Discussion