Stable DiffusionをDocker Desktopで簡単に使い始める方法

Stable DiffusionをDocker Desktopで簡単に使い始める方法

Stable DiffusionをDocker Desktopで簡単に使い始める方法

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!

参考情報

コメントを残す

メールアドレスが公開されることはありません。