DockerでStableDiffusionが立ち上がらない!原因と対処法

ブログタイトル画像:DockerでStableDiffusionが立ち上がらない!原因と対処法 環境構築
スポンサーリンク

こんにちは、ice_soiです!
フリーランスエンジニアをしています。

以前WSL環境にDocker上で動くStableDiffusionを構築しました。
WSL2とDockerでStableDiffusionの環境構築をしてみた

久しぶりに起動してみようと思ったら、エラーが出て起動できませんでした・・・
今回は備忘もかねてStableDiffusionが使えるように対処した内容をまとめていこうと思います!

エラーの内容

WSLを起動してDockerを立ち上げようとしたら下記のエラーが発生しました。
DockerでStableDiffusionを起動したときのエラーの画像

エラーメッセージ的にはPythonのエラーのようでcudaGetDeviceCountというメソッドでエラーが起きているようです。GPUとかドライバ関連のエラーなのかなと思いました。

エラーの原因と対処

調べてみるとNVIDIA Driver 555.xxを使っていると発生するエラーのようです。
nvidia-container-toolkitをアップデートするとなおるっぽいです。
https://github.com/NVIDIA/nvidia-container-toolkit/issues/520

ちなみに現在のバージョンを見てみたら1.13.5で古いバージョンでした。グラフィックボードのドライバの画像

nvidia-container-toolkitを更新すればよいので、下記の記事を参考にアップデートをしてみました!
https://qiita.com/namahoge/items/06d1c486aaa41894cece
下記の内容を実行しました!

$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit

Docker起動時のエラーの画像

無事1.13.5 → 1.17.0にバージョンアップできました!
更新したグラフィックボードのドライバの画像

バージョンアップできたのでもう一度Dockerを起動してみました。が・・・。
Docker起動時のエラー画像

あれ、別のエラー・・・・。
なぜかさっきとは違うエラーが出て起動できませんでした・・・。

エラーの再調査と対処

また調べてみるとWebUIが使用しているhttpxのバージョン不整合でダメ見たいです・・・
手動で動作するバージョンに下げてあげるとなおるっぽいです。
https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/13840
/services/AUTOMATIC1111配下のDockerfileに下記を追記してバージョンを下げるとよさそうです。

RUN --mount=type=cache,target=/root/.cache/pip \
   pip install httpx==0.24.1

下記の記事を参考にhttpxのバージョンを下げてみました。
https://qiita.com/bigmon/items/1a6f220df98941c81f94
httpxのバージョン指定をDockerfileに追加した画像

バージョン指定できたのでDockerを起動してみたところ・・・
今度は動きました!!
StableDiffusionのWebUIが起動した画像
試しに画像生成してみましたが無事生成できました!
StableDiffusionで画像を生成した画像

バージョンアップ対応

StableDiffusionが起動するようになったのでついでにバージョンアップもしたいと思います!
WebUIでSDXLも使うことができるようですが、バージョンを上げる必要があるようです。
ちなみに現状のバージョンは1.3です。WebUIの下の方に現在のバージョンがあります。WebUIのバージョンを示した画像

バージョンアップはpullすればよいみたいですが、Dockerfileを書き換えているのでコンフリクトしてしまいました・・・
手順は下記記事を参考にしました!
https://qiita.com/k-kariya/items/c94a7065ff36b8c567ff

ブランチ切ってマージしてもよいですが、Dockerfileだけなのでpullした後に再度修正しました。
そしてまたDockerを起動すると・・・
SDXLのDocker起動時のエラーの画像

エラーが発生しました・・・。

調べてみるとPythonのライブラリのtyping_extensionsを最新化するとよさそうでした。
https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/16383
Dockerfileに下記の内容を追加するとよさそうです。

pip install -U typing_extensions

そこでDockerfileには下記のように追加しました。
Dockerfileの修正箇所を示した画像

修正が終わったので再度Dockerを起動してみます。バージョンアップしたStableDiffusionのWebUiの画像無事起動できました!
バージョンも1.9.4に上がっています!

試しに画像を生成してみましたが、特に不具合なく生成されました!
バージョンアップしたWebUIで画像生成した画像これでバージョンアップも完了です!

まとめ

今回はStableDiffusionが起動しない対応からバージョンアップまでやってみました!
エラーを解消できて環境を最新化することができたので個人的には満足しました!
SDXLを使えるようになったので、これからいろいろ生成してみようと思います。
今回の記事が何かの参考になれば幸いです!

最後までお読みいただきありがとうございました。

スポンサーリンク