WindowsでDockerを使ってStable Diffusionを始めよう!手順完全ガイド

前回のDockerコンテナからNVIDIAGPU認識を行ったので、続いてはいよいよ本丸のDockerコンテナでのStable Diffusion Web UI(以下Stable Diffusion)を実行して、ローカルPCのブラウザから生成を行ってみます。結構メジャーになっていることもあるので、これは自分のためのメモになります。

【参考】

uepon.hatenadiary.com

実はUbuntuを使用したDockerコンテナでStable Diffusionを動作させたことがありました。その時の様子は以下で簡単にまとめています。ただ、このときに試験機としてしようしていたのは一般的なノートPCでGPUを搭載したものではありませんでした。

info.nikkeibp.co.jp

実際にはdocker composeを使用してイメージを作成して実行し、ローカルPCをのブラウザからアクセスしStable Diffusionを使用する形式をとります。

DockerコンテナでStableDiffusionのセットアップを行う

基本的には以下のリポジトリを使用することで、設定、構築、実行が可能です。

(注意)以下の作業ではDockerサービス(Desktop含む)が起動している必要があります。

github.com

基本的には非常に簡単で、Githubのドキュメントをみれば概ねわかるかと思いますが、念のため。 まずは、リポジトリを取得します。

今回の作業はWindowsDockerGitをインストールしている前提で行っていきます。 またコマンドラインに関してはPowerShellを使用しています。

【参考】 uepon.hatenadiary.com

今回はCドライブのルートにSDというフォルダを作成し、その下にリポジトリのクローンを配置します。 下の図のような構成になります。

では必要なフォルダを作成し、さらにgitコマンドを使用してリポジトリのクローンを行います。(ここでしかgitコマンドを使用しないので、Zip形式でリポジトリをダウンロードしても問題はありません)

PS > cd \
PS C:\ > mkdir SD
PS C:\ >  cd SD
PS C:\SD > git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git

続いてクローンで作成されたフォルダにに移動し、docker composeコマンドを実行します。 このコマンドは必要なものをダウンロードする役割なので、通信環境にもよりますが結構かかるので、開始したら別の作業をおすすめします。成功するとコマンドログの最後にexited with code 0が表示されます。

もし、違うexitコードが表示された場合には、失敗となりますが、再度同じコマンドを実行することで続きから開始できるので試してみてください。

PS C:\SD > cd stable-diffusion-webui-docker
PS C:\SD\stable-diffusion-webui-docker > docker compose --profile download up --build

コマンドが無事に実行を完了したら、続いては設定および、起動を行うコマンドを実行します。 以下のコマンドの[ui]の部分は実行するUI設定とGPUの使用をしているする部分になります。たとえば、GPUを使用して、Stable Diffusion web UI AUTOMATIC1111(以下AUTOMATIC1111)を使用するにはautoを設定し、CPUのみである場合にはauto-cpuを設定するという具合になります。指定毎にコンテナが作成されるので、使い分けることも可能です。

【参考】 github.com

【実行例】

PS > docker compose --profile [ui] up --build
# where [ui] is one of: invoke | auto | auto-cpu | comfy | comfy-cpu

今回はAutomatic1111をUIとして使用するので以下の様に実行します。

PS C:\SD\stable-diffusion-webui-docker > docker compose --profile auto up --build

こちらも初回の実行は時間がかかりますので、別の作業を行ったほうがいいでしょう。 設定、実行が完了すると以下のような表示が行われ、ローカルPCのブラウザからアクセスするためのURLが表示されます。

ここまでできたら以下どちらかにブラウザからアクセスを行います。

http://0.0.0.0:7860 または http://localhost:7860/

すると、AUTOMATIC1111のUIが表示されます。

あとは、これを使用してプロンプトを使用して画像の生成をしていくことになります。

また、2回目以降に関しては初回と同様のコマンドで実行できますが、フォルダ移動を忘れずに

PS C:\SD\stable-diffusion-webui-docker > docker compose --profile auto up --build

また、初回のコマンド実行でDockerコンテナは生成できているので、Docker Desktopから直接コンテナ起動しても大丈夫です。下の図中のではauto-1のコンテナがそれに該当します、実行すれば大丈夫です。

設定に関する追記

ちょっと使ってみると自分の使用しているノートPCのスペックは以下のような感じです。

このPCではでStableDiffusionを動作させると、CPUに関しては30%程度の使用に収まりますが、そのほかに関してはリソースが100%近くまでせまります。GPUは100%になるのは予想できていたのですが、メモリが16GBではかなりやばい状況になってしまいます。また、モデルなどを使用するとパラメータによっては生成エラーが発生することもあるので、結構厳しい実行環境とも言えます。

【実行時のタスクマネージャーの様子】

そこで起動オプションを少し触ってみます。設定はC:\SD\stable-diffusion-webui-docker\docker-compose.ymlこのファイルを修正することになります。autoの項目の- CLI_ARGS--precision full --no-halfを追加します。また、最後の行に- TZ=Asia/Tokyoを追加しました。この設定は環境変数の追加で、追加することでログ時刻のタイムゾーンを日本時間にすることができるので、わかりやすくみることができます。

【C:\SD\stable-diffusion-webui-docker\docker-compose.yml の修正後抜粋】

  auto: &automatic
    <<: *base_service
    profiles: ["auto"]
    build: ./services/AUTOMATIC1111
    image: sd-auto:68
    environment:
      - CLI_ARGS=--allow-code --medvram --xformers --precision full --no-half --enable-insecure-extension-access --api
      - TZ=Asia/Tokyo

この設定にを行うことで結構処理が軽くなった気がします。ちなみに512*768くらいの解像度で3分弱の処理スピードでした。ただ、メインメモリに関しては改善していないので、ブラウザのタブを少し減らすような工夫をしたほうがいいのかなと感じました。

おわりに

Dockerを使用してStableDiffusionの実行ができるようになりました。PCのスペックがあまりにも心もとないので動作できるとはいえ、油断しているとすぐにコンテナがダウンしてしまうのは困ったところです。とはいえ、やってみるとこの手の作業が召喚と呼ばれるのもなんとなくわかりました。

実は年度末にDELLさんの試用モニターに当選したので、この設定の経験を活かしてどこまでやれるかも検証してみたいと思っています。

/* -----codeの行番号----- */