前回のDockerコンテナからNVIDIA
のGPU認識を行ったので、続いてはいよいよ本丸のDocker
コンテナでのStable Diffusion Web UI(以下Stable Diffusion)
を実行して、ローカルPCのブラウザから生成を行ってみます。結構メジャーになっていることもあるので、これは自分のためのメモになります。
【参考】
実はUbuntu
を使用したDocker
コンテナでStable Diffusion
を動作させたことがありました。その時の様子は以下で簡単にまとめています。ただ、このときに試験機としてしようしていたのは一般的なノートPCでGPU
を搭載したものではありませんでした。
実際にはdocker compose
を使用してイメージを作成して実行し、ローカルPCをのブラウザからアクセスしStable Diffusion
を使用する形式をとります。
DockerコンテナでStableDiffusionのセットアップを行う
基本的には以下のリポジトリを使用することで、設定、構築、実行が可能です。
(注意)以下の作業ではDockerサービス(Desktop含む)
が起動している必要があります。
基本的には非常に簡単で、Github
のドキュメントをみれば概ねわかるかと思いますが、念のため。
まずは、リポジトリを取得します。
今回の作業はWindowsにDocker
とGit
をインストールしている前提で行っていきます。
またコマンドラインに関してはPowerShell
を使用しています。
今回は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のスペックは以下のような感じです。
- Core i5(9300H 4コア8スレッド)
- メモリ 16GB
- GPU NVIDIA GeForce GTX 1650 with Max-Q
この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
さんの試用モニターに当選したので、この設定の経験を活かしてどこまでやれるかも検証してみたいと思っています。