GPU のドライバ更新で libcuda.so が実体に変わる
Windows11 の WSL2 Ubuntu 22.04 LTS で Stable Diffusion WebUI を動作させています。動作させる手順につきましては、以下の過去記事を参照ください。
一つ目の記事にも書きましたが
インストールが終了し webui.sh を起動して Stable Diffusion WebUI の画面からプロンプトを入力し、画像を生成する段階で libcuda.so を読み込めないエラーが発生しました。
https://hiro20180901.com/2023/02/23/windows11-wsl2-stable-diffusion-webui-with-cuda-11-7/
/usr/lib/wsl/lib 以下に存在する libcuda.so が実体の場合に、Stable Diffusion WebUI はエラーを表示して画像を生成できません。一度 Symbolic link に変更しても、Windows 側の GPU のドライバー更新のタイミングで実体に戻ってしまいます。
libcuda.so を Symbolic link に変更するスクリプト
毎回 libcuda.so を確認して symbolic link に変更するのは面倒なので簡単なスクリプトを作りました。libcuda.so が symbolic link かどうかを判定して、実体であれば修正します。mv や ln、ldconfig には root 権限が必要なので sudo で実行しています。
$ LANG=C ls -l ./cuda.sh
-rwxr-xr-x 1 hiro hiro 319 Mar 5 12:08 ./cuda.sh
$ cat ./cuda.sh
#/bin/bash
cd /usr/lib/wsl/lib
# Symbolic link を確認
if [ ! -L libcuda.so ]; then
echo "libcuda.so is required Symbolic link"
sudo mv libcuda.so.1 libcuda.so.1.orig
sudo mv libcuda.so libcuda.so.orig
sudo ln -s libcuda.so.1.1 libcuda.so.1
sudo ln -s libcuda.so.1 libcuda.so
sudo /usr/sbin/ldconfig
fi
symbolic link であれば何もしないで終了します。Stable Diffusion WebUI を実行する前に一度実行すれば OK です。
まとめ
Stable Diffusion WebUI を Windows11 WSL Ubuntu 22.04 LTS で使用する際に、libcuda が実体の場合に画像を生成できません。毎回 symbolic link に手作業で変更するのは面倒なので、簡単なスクリプトで対応できるようにしました。
Linux というか bash というか、スクリプト文化に慣れていると、こういう改善は直ぐに実現できます。参考になれば幸いです。
今回のアイキャッチ画像
再々の 'a photo of an astronaut riding a horse on mars' です。Stable Diffusion WebUI で生成しました。同じプロンプトでも微妙に異なる構図で生成されるのが「ガチャ」と呼ばれる所以でしょうか。
コメント
[…] […]