Stable DiffusionをWindowsのDocker Desktopで比較的簡単にはじめる手順をまとめました。ほぼ、自分の覚書です。
確認した環境は、Windows 10 Pro、21H2、build 19044.2846+16GB RAM+NVIDIA GeForce RTX 2060 SUPER+WSL2(Ubuntu)+Docker Desktop 4.18.0(104112) です。
どうして Stable Diffusion のために Docker Desktop を使うのか?
楽してセットアップしたいからです。AUTOMATIC1111/stable-diffusion-webui というウェブ用 UI は既にありますが、動かすためには環境構築等いくつかの手順が必要です。ですが、この面倒な作業を省略してできる Stable Diffusion WebUI Docker (AbdBarho/stable-diffusion-webui-docker) があります。
Windows かつ Docker Desktop が入っていれば、 docker compose
コマンドで環境構築と実行が簡単にできます。ライブラリや各種依存関係の事前準備は一切不要です。
なお、コンテナだから何か困ったコトはないの?という疑問があるかもしれません。私も使い始めるまでは不安がありましたが、今のところは特に困っていません。生成される画像やモデルや VAE 等のデータは Windows マシン上と共有(bind マウント)していますので、エクスプローラまたは Docker Desktop 上の対象コンテナ「Files」でドラッグするだけでファイルをやりとりできます。せいぜい困ったのは、extension を無効化するときにバックアップを取っておらず、半日かけて学習させたデータ50GBくらいを一瞬で吹っ飛ばしたくらいです。
事前準備
WSL2 の有効化と Docker Desktop のインストールです。
はじめる前の注意点
初回実行時、Stable Diffusion 1.5 のモデル等 12GB をダウンロードします。このダウンロードが終わらないと、Web UI が利用できません。回線状況によっては、初回起動まで、とても時間がかかる可能性があります。
コード類のダウンロード
まずはじめに、Stable Diffusion WebUI Docker のコード類を https://github.com/AbdBarho/stable-diffusion-webui-docker からダウンロードします。
ZIPでダウンロードする場合、「Code」→「Download ZIP」をクリックするとファイル「stable-diffusion-webui-docker-master.zip」がダウンロードされますので、適当に使いやすい場所に中身を展開します。展開すると、 stable-diffusion-webui-docker-master
というフォルダがありますので、コマンドライン等を開き、この中で docker compose
コマンドを動かします。
あるいは、Git for Windows 等の Git が使える環境であれば、次のようにしてダウンロードするのが手っ取り早いです。
git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git
この場合、フォルダ名は stable-diffusion-webui-docker
です。 cd stable-diffusion-webui-docker
などで移動しておきます。
Docker に慣れている方向けの補足情報
※とりあえず始める場合は、読み飛ばして大丈夫です。
デフォルトではタイムゾーンが UTC です。ログに出てくる時刻や output/txt2img 以下に生成されるディレクトリの日付を日本時刻に合わせるためには、 auto
サービスの環境変数に TZ=Asia/Tokyo
を追加します。具体的には、次のような記述を environment:
に追記します。
auto: &automatic
<<: *base_service
profiles: ["auto"]
build: ./services/AUTOMATIC1111
image: sd-auto:51
environment:
- CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api
- TZ=Asia/Tokyo
初回起動時の作業
あとは Wiki のドキュメント通りの作業です。コードが展開されたフォルダ内で、以下のコマンドを実行します。
docker compose --profile download up --build
コマンド実行後、 webui-docker-download-1
というコンテナのログが画面に出ます。暫くは、次の様にダウンロードが走りますので、完了するまで待ちます。
webui-docker-download-1 | [DL:256KiB][#4561e1 1.4GiB/3.9GiB(36%)][#42c377 1.4GiB/3.9GiB(37%)]
正常に終了すると、次の様に exited with code 0
と表示されて、元のプロンプトに戻ります。
...(省略)
webui-docker-download-1 | https://github.com/xinntao/Real-ESRGAN/blob/master/LICENSE
webui-docker-download-1 | https://github.com/xinntao/ESRGAN/blob/master/LICENSE
webui-docker-download-1 | https://github.com/cszn/SCUNet/blob/main/LICENSE
webui-docker-download-1 exited with code 0
一方、もし次の様に 0 以外のコードが出てきた場合は、ダウンロード処理に失敗しています。
webui-docker-download-1 | 42c377|OK | 426KiB/s|/data/StableDiffusion/sd-v1-5-inpainting.ckpt
webui-docker-download-1 |
webui-docker-download-1 | Status Legend:
webui-docker-download-1 | (OK):download completed.(ERR):error occurred.
webui-docker-download-1 |
webui-docker-download-1 | aria2 will resume download if the transfer is restarted.
webui-docker-download-1 | If there are any errors, then see the log file. See '-l' option in help/m
an page for details.
webui-docker-download-1 exited with code 24
こうなった場合は、先ほどのコマンドをもう一度実行して、正常終了になるかどうかを確認します。
正常に終わったら、次は Web UI を起動するコマンドを実行します。※以下 AUTOMATIC1111 の UI かつ GPU 仕様の場合
docker compose --profile auto up --build
コマンドを実行して、初回実行時はモデル等を読み込むため数分ほど時間がかかりる場合があります。以下のような表示になって、固まっているかのように見えるかもしれませんが、大丈夫です。
webui-docker-auto-1 | LatentDiffusion: Running in eps-prediction mode
webui-docker-auto-1 | DiffusionWrapper has 859.52 M params.
しばらく待つとログが流れ、次のような URL が出ます。
webui-docker-auto-1 | Running on local URL: http://0.0.0.0:7860
これで Web UI の起動準備が調いました。ブラウザから http://127.0.0.1:7860
を開くと WebUI が見えます。
開いたら、画面左上で適当なモデルを選び、テキスト欄に何か文字を書き、「Generate」ボタンをクリックすると、画像生成が始まります。
クリックすると、ボタンが反転します。処理が終わるまで待ちます。
この時、操作しているターミナル上でも画像生成のログが出ますし、Docker Desktop でコンテナのログを見ても、同様の表示を確認できます。
100%になると、画像の生成が終わり、画面上でも確認できます。
作成した画像は、自動的に docker compose コマンドを実行したディレクトリ直下の「output/txt2img/日付」のフォルダ内に保存されています。
なお、起動した Web UI を停止するには docker compose
コマンドを実行したままになっているターミナル上で Ctrl+C を入力すると止められます。
Gracefully stopping... (press Ctrl+C again to force)
Aborting on container exit...
[+] Running 1/1
? Container webui-docker-auto-1 Stopped 11.4s
canceled
正常終了すると、再びコマンドが実行できるようになります。
再起動後など、再度 WebUI を使うには docker compose
コマンドを実行し直します。
docker compose --profile auto up --build
ちなみに、動作中のハードウェア状況をみるには、タスクマネージャを使って GPU の状況を見ると分かりやすいです。
GPU がコンテナ内から見えているかどうか確認したい場合は、 docker exec
や Docker Desktop の 「Terminal」からコマンド nvidia-smi
を実行して、情報が出てくるかどうかでも確認できます。
root@e37fcc5a5810:/stable-diffusion-webui# nvidia-smi
Mon Apr 17 07:42:27 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.41.03 Driver Version: 531.41 CUDA Version: 12.1 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 2060 S... On | 00000000:01:00.0 On | N/A |
| 42% 40C P8 6W / 175W| 2558MiB / 8192MiB | 2% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 149 C /python3.10 N/A |
+---------------------------------------------------------------------------------------+
モデルやVAEの追加
はじめから入っていないモデルをダウンロードしたら、「stable-diffusion-webui-docker\data\StableDiffusion」に「.safetensors」など拡張子を持つファイルを置いておきます。
VAEの場合は「stable-diffusion-webui-docker\data\VAE」に「.skpt」ファイルを置きます。
Docker Desktop であれば、webui-docker-auto-1 コンテナの「Files」上で中を見たり操作できますので、Docker Desktop にドラッグすることもできます。
以下は Docker Desktop の画面です。Note に「MOUNT」(マウント)とあり、Windows ホスト側とフォルダ内の情報をコンテナと共有しているのが分かります。
さて、ファイルを置いたあとは、Web UI のフッタに「Reload UI」のリンクがありますので、ここをクリックします。
クリックすると読み込み中の表示になり、ブラウザの接続が切れます。ブラウザを再読み込みすると、自動的にモデルやVAEファイルが読み込まれています。
なお、モデルを削除するには、「data\StableDiffusion\」から対象モデルのファイルを削除するだけです。
Enjoy!
参考情報
- Usage · AbdBarho/stable-diffusion-webui-docker Wiki · GitHub