Stable DiffusionをWSL2で動かしてみる

何度か挑戦しては失敗しているStable DiffusionとWSL2の組み合わせ。鬼門じゃ~
今回はStable Diffusion WebUI Dockerで試してみました。
参考にしたのはこのページ。

note.com


実行環境は以下の通り。

項目 スペック
PC ASUS ROG Zephyrus M16
CPU Core i7-11800H, memory:16GB
GPU Nvidia RTX3070 Laptop, memory:8GB
OS Windows 11 Home 21H2

Ubuntu 20.04 LTS

参考ページの指示に従って、gitとDockerの環境を整えてから下記コマンドを実行。

$ git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git
$ cd stable-diffusion-webui-docker
$ docker compose --profile download up --build
$ docker compose --profile auto up --build

すると・・・

[+] Running 1/1
 ⠿ Container webui-docker-auto-1  Created                                                                                                                                            0.1s
Attaching to webui-docker-auto-1
webui-docker-auto-1  | + /docker/mount.sh
webui-docker-auto-1  | Mounted .cache
webui-docker-auto-1  | Mounted LDSR
webui-docker-auto-1  | Mounted GFPGAN
webui-docker-auto-1  | Mounted RealESRGAN
webui-docker-auto-1  | Mounted ScuNET
webui-docker-auto-1  | Mounted .cache
webui-docker-auto-1  | Mounted StableDiffusion
webui-docker-auto-1  | Mounted embeddings
webui-docker-auto-1  | Mounted ESRGAN
webui-docker-auto-1  | Mounted SwinIR
webui-docker-auto-1  | Mounted BSRGAN
webui-docker-auto-1  | Mounted Codeformer
webui-docker-auto-1  | + python3 -u ../../webui.py --listen --port 7860 --hide-ui-dir-config --ckpt-dir /stable-diffusion-webui/models/Stable-diffusion --allow-code --medvram
webui-docker-auto-1  | LatentDiffusion: Running in eps-prediction mode
webui-docker-auto-1  | DiffusionWrapper has 859.52 M params.
webui-docker-auto-1  | making attention of type 'vanilla' with 512 in_channels
webui-docker-auto-1  | Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
webui-docker-auto-1  | making attention of type 'vanilla' with 512 in_channels
Downloading: 100%|██████████| 939k/939k [00:01<00:00, 901kB/s]
Downloading: 100%|██████████| 512k/512k [00:00<00:00, 565kB/s]
Downloading: 100%|██████████| 389/389 [00:00<00:00, 342kB/s]
Downloading: 100%|██████████| 905/905 [00:00<00:00, 743kB/s]
Downloading: 100%|██████████| 4.41k/4.41k [00:00<00:00, 4.27MB/s]
Downloading: 100%|██████████| 1.59G/1.59G [01:42<00:00, 16.7MB/s]
webui-docker-auto-1 exited with code 137

 3行目のdocker compose実行中にエラーコード137で落ちました(泣)。
原因を探ってみると、どうやらWSL2のメモリ不足のようです。
参考にしたのはこのページ

zenn.dev

 初期設定のままだと搭載メモリ(16GB)の半分の8GB が WSL2 に割り当てられるようですが、足りなかったようです。ユーザフォルダ(c:\User\ユーザ名)の直下に「.wslconfig」という名称のテキストファイルを作成して、メモリ割り当て量を12GBに増量しました。

[wsl2]
memory=12GB


これで動かしてみると、

中略
webui-docker-download-1  | Status Legend:
webui-docker-download-1  | (OK):download completed.
webui-docker-download-1  | Checking SHAs...
webui-docker-download-1  | /data/LDSR/project.yaml: OK
webui-docker-download-1  | /data/RealESRGAN/RealESRGAN_x4plus_anime_6B.pth: OK
webui-docker-download-1  | /data/RealESRGAN/RealESRGAN_x4plus.pth: OK
webui-docker-download-1  | /data/GFPGAN/GFPGANv1.4.pth: OK
webui-docker-download-1  | /data/LDSR/model.ckpt: OK
webui-docker-download-1  | /data/StableDiffusion/model.ckpt: OK
webui-docker-download-1 exited with code 0
ここまでが3行目の結果
webui-docker-auto-1  | LatentDiffusion: Running in eps-prediction mode
webui-docker-auto-1  | DiffusionWrapper has 859.52 M params.
webui-docker-auto-1  | making attention of type 'vanilla' with 512 in_channels
webui-docker-auto-1  | Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
webui-docker-auto-1  | making attention of type 'vanilla' with 512 in_channels
webui-docker-auto-1  | Loading weights [7460a6fa] from /stable-diffusion-webui/models/Stable-diffusion/model.ckpt
webui-docker-auto-1  | Global Step: 470000
webui-docker-auto-1  | Model loaded.
webui-docker-auto-1  | Loaded a total of 0 textual inversion embeddings.
webui-docker-auto-1  | Running on local URL:  http://0.0.0.0:7860
webui-docker-auto-1  |
webui-docker-auto-1  | To create a public link, set `share=True` in `launch()`.


動きました!!

ブラウザで「http://localhost:7860/」を開けば、Stable Diffusion WebUIが表示されます。 私の場合「http://0.0.0.0:7860」ではアクセスできませんでした。


これで、Dockerを使えばWSL2でstable diffusionが動くようになりました。
次はDocker無しでも動かせるようになりたいものです。

では、また