こんにちは、ice_soiです!
フリーランスエンジニアをしています。
以前WSL環境にDocker上で動くStableDiffusionを構築しました。
WSL2とDockerでStableDiffusionの環境構築をしてみた
久しぶりに起動してみようと思ったら、エラーが出て起動できませんでした・・・
今回は備忘もかねてStableDiffusionが使えるように対処した内容をまとめていこうと思います!
エラーの内容
WSLを起動してDockerを立ち上げようとしたら下記のエラーが発生しました。

エラーメッセージ的には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

無事1.13.5 → 1.17.0にバージョンアップできました!

バージョンアップできたのでもう一度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

バージョン指定できたのでDockerを起動してみたところ・・・
今度は動きました!!

試しに画像生成してみましたが無事生成できました!

バージョンアップ対応
StableDiffusionが起動するようになったのでついでにバージョンアップもしたいと思います!
WebUIでSDXLも使うことができるようですが、バージョンを上げる必要があるようです。
ちなみに現状のバージョンは1.3です。WebUIの下の方に現在のバージョンがあります。
バージョンアップはpullすればよいみたいですが、Dockerfileを書き換えているのでコンフリクトしてしまいました・・・
手順は下記記事を参考にしました!
https://qiita.com/k-kariya/items/c94a7065ff36b8c567ff
ブランチ切ってマージしてもよいですが、Dockerfileだけなのでpullした後に再度修正しました。
そしてまたDockerを起動すると・・・

エラーが発生しました・・・。
調べてみるとPythonのライブラリのtyping_extensionsを最新化するとよさそうでした。
https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/16383
Dockerfileに下記の内容を追加するとよさそうです。
pip install -U typing_extensions
そこでDockerfileには下記のように追加しました。

修正が終わったので再度Dockerを起動してみます。
無事起動できました!
バージョンも1.9.4に上がっています!
試しに画像を生成してみましたが、特に不具合なく生成されました!
これでバージョンアップも完了です!
まとめ
今回はStableDiffusionが起動しない対応からバージョンアップまでやってみました!
エラーを解消できて環境を最新化することができたので個人的には満足しました!
SDXLを使えるようになったので、これからいろいろ生成してみようと思います。
今回の記事が何かの参考になれば幸いです!
最後までお読みいただきありがとうございました。


