最終更新:ID:kQtxtDiVQA 2023年02月20日(月) 21:13:05履歴
- local_WSL2
- 手順が簡単になった
- kohya sd-scripts対応
2023/02/19現在でPython3.10の最新である Python3.10.10にアップデートする
まず以下コマンドを実行
Pythonのビルドに必要な依存ファイルをインストールする
Pythonのソースコードを取得し展開
Pythonをビルド(そこそこ時間がかかる)
ここまでやると、以下コマンドを打つと「Python 3.10.10」とバージョンが返ってくる
まず以下コマンドを実行
sudo apt update sudo apt upgrade -y初回の sudo 実行時にユーザーのパスワードを聞かれるので入力する
Pythonのビルドに必要な依存ファイルをインストールする
sudo apt install -y build-essential libbz2-dev libdb-dev \ libreadline-dev libffi-dev libgdbm-dev liblzma-dev \ libncursesw5-dev libsqlite3-dev libssl-dev \ zlib1g-dev uuid-dev tk-dev
Pythonのソースコードを取得し展開
wget https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tar.xz tar xJf Python-3.10.10.tar.xz
Pythonをビルド(そこそこ時間がかかる)
cd Python-3.10.10 ./configure make sudo make install cd ~
ここまでやると、以下コマンドを打つと「Python 3.10.10」とバージョンが返ってくる
python3 --version
CUDA 11.x の最新版である11.8をインストールする
※ CUDA 11.x台をインストールすること! 2022/12/10現在、最新である12.xをインストールするとxformersがビルドできない
https://developer.nvidia.com/cuda-11-8-0-download-... の 「Download Installer for Linux WSL-Ubuntu 2.0 x86_64」- 「Base Installer」 に書いてあるコマンドを実行する
※ CUDA 11.x台をインストールすること! 2022/12/10現在、最新である12.xをインストールするとxformersがビルドできない
https://developer.nvidia.com/cuda-11-8-0-download-... の 「Download Installer for Linux WSL-Ubuntu 2.0 x86_64」- 「Base Installer」 に書いてあるコマンドを実行する
Windows側で https://developer.nvidia.com/rdp/cudnn-archive から cuDNN v8.6.0 (October 3rd, 2022), for CUDA 11.x の Local Installer for Ubuntu22.04 x86_64 (Deb) をダウンロードし、\\wsl$\Ubuntu-22.04\home\<Ubuntuのユーザー名> に置く
※DLするにはNVIDIAの開発者アカウントが必要
その後Ubuntu側で/home/<Ubuntuのユーザー名>に移動し、以下コマンド実行
その後/home/<Ubuntuのユーザー名> にある 「.bashrc」「.profile」に以下を書き加える
/home/<Ubuntuのユーザー名>/.bash_profile (無い場合は新規作成)に以下を書き加える
※DLするにはNVIDIAの開発者アカウントが必要
その後Ubuntu側で/home/<Ubuntuのユーザー名>に移動し、以下コマンド実行
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.6.0.163_1.0-1_amd64.deb sudo cp /var/cudnn-local-repo-ubuntu2204-8.6.0.163/cudnn-local-FAED14DD-keyring.gpg /usr/share/keyrings/ sudo apt -y update sudo apt install libcudnn8 sudo apt install libcudnn8-dev
その後/home/<Ubuntuのユーザー名> にある 「.bashrc」「.profile」に以下を書き加える
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH
/home/<Ubuntuのユーザー名>/.bash_profile (無い場合は新規作成)に以下を書き加える
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH if [[ -f ~/.bashrc ]] ; then . ~/.bashrc fi
まず以下コマンドを実行
次に以下コマンドを実行する
この時点ではまだckptファイルを置いていないため最後のコマンド実行後にエラーが起こるはず
sudo apt update sudo apt upgrade -y
次に以下コマンドを実行する
sudo apt install wget git python3 python3-venv -y sudo apt install libgl1 -y bash <(wget -qO- https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh)※ WSL2の場合 https://github.com/AUTOMATIC1111/stable-diffusion-... に書いてあるコマンドを実行するだけでは足らないため2行目のコマンドを足している
この時点ではまだckptファイルを置いていないため最後のコマンド実行後にエラーが起こるはず
No checkpoints found. When searching for checkpoints, looked at: - file /home/xxx/stable-diffusion-webui/model.ckpt - directory /home/xxx/stable-diffusion-webui/models/Stable-diffusion Can't run without a checkpoint. Find and place a .ckpt file into any of those locations. The program will exit.
/home/<Ubuntuのユーザー名>/stable-diffusion-webui にある webui-user.sh を開き、以下の行のコメントアウトを外してパラメータを追記する
その後 /home/<Ubuntuのユーザー名>/stable-diffusion-webui にある ./webui.sh を実行
# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention" export COMMANDLINE_ARGS="--xformers"
その後 /home/<Ubuntuのユーザー名>/stable-diffusion-webui にある ./webui.sh を実行
cd /home/<Ubuntuのユーザー名>/stable-diffusion-webui bash webui.shWindows側で http://127.0.0.1:7860 にアクセスできます。
/home/<Ubuntuのユーザー名> にある .profileに以下を書き加える
※wslから起動したbashはWindowsのbash.exeを呼び出しているが、これは起動時の環境ファイルを読み込まない
その為、-lオプションで.profileを読み込んで起動するようにする
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATHWindows側で以下のバッチファイルを作成する
wsl cd /home/<Ubuntuのユーザー名>/stable-diffusion-webui; bash -l webui.sh pauseバッチファイルを実行すればUbuntuでwebui.shを叩いてくれます
※wslから起動したbashはWindowsのbash.exeを呼び出しているが、これは起動時の環境ファイルを読み込まない
その為、-lオプションで.profileを読み込んで起動するようにする
Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory生成時にこのエラーが出る場合、環境変数が設定されてません。以下を確認して下さい
- /home/<Ubuntuのユーザー名> にある .bashrc、.profileに以下が記述されているか
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH
- 記述されている場合、wslの誤作動の可能性があります。(稀に .bashrcを何故か読み込まない現象が出る)
/home/<Ubuntuのユーザー名>/.bash_profile (無い場合は新規作成)
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH if [[ -f ~/.bashrc ]] ; then . ~/.bashrc fiバッチファイルを動かせば生成できるようになっているはずです
1111本体にマージされました。
wsl-open をインストール
sudo apt-get install -yqq npm sudo npm install -g wsl-open
Linux単体では陥らないようなWSL2固有のもろもろのメモ
- Q:ファイル消してもディスクの容量減らない
- A:「wsl2 ディスクサイズ 減らす」とかでググれ、中のファイルを消してもディストリ格納してる仮想ディスクは勝手には縮まない。仮想ディスクファイルの格納場所もググれ。ちょこちょこ書くには内容が長すぎる
- Q:WSL2側がメモリを食いすぎるorWSL2にメモリを使わせたい
- A:全部のWSL2に適用したいなら「C:\Users\{ユーザー名}\.wslconfig」、指定のディストロだけメモリ量指定したいならディストリの中で「/etc/wsl.conf」に以下の内容をかけ
[wsl2] memory=(お前が指定したいメモリサイズ)GB
- Q:WSL2のメモリ足りないからWSL2に多めに指定したらWindows側のメモリを使ってない時まで取られる
- A:定期的に「sudo sh -c "echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a"」でもやるスクリプトでも書いとけ。毎分cronでおとすんならこう
crontab -eとかで起動して * * * * * sh -c "echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a"
- Q:そもそもcronもsystemd.timerタイマーも起動してないンゴ…
- 上で書いたメモリと同じように「.wslconfig」か「wsl.conf」でこう書いてsystemd起動しとけ。ベータらしいから副作用とかあっても知らん
[boot] systemd=true
- Q:ネットワークドライブが見えないンゴ…
- A:一時的なら「mount -t drvfs {デバイス名} {マウントポイント}」、毎回起動したい(NASに画像出力するなど)場合は/etc/fstabに下記のように書いとけ
\\{NASのIPとか}\{残りのパスとか} /mnt/{マウントに使う他と被らない任意の名前} drvfs defaults 0 0
このページへのコメント
環境
windows11
wsl2
Almalinux
GTX1060
a1111 commit 22bcc7b + xformers
torchは1系のデフォルト
エラー
Could not load library libcudnn_cnn_infer.so.8. Error: libnvrtc.so: cannot open shared object file: No such file or directory
対処方法
ssd変えて新しくwin11にしたけどNVIDIAドライバ入れ忘れてたから入れた
そのあとalma上に/usr/lib/wsl/libがあること確認してから
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATHしてwebui.shで起動して動いた
Windows側にバッチは作ってない
起動はモデル読み込みしても2-30秒でとても早い
やってみたけど性能は
Ubuntu22.04ネイティブ > Windows11 > WSL2のUbuntu22.04だったんだが...
おま環かもしれないけどちょいちょい名前解決ができなくなりgit pullとか拡張機能の更新が不可能になることがあったのででググって見つけた解決法を記す
/etc/resolv.conf
の中身を
[network]
generateResolvConf = false
nameserver 8.8.8.8
に書き換え
nameserverのアドレスは任意に変えていい
直感的にはWSLで早くなるというのは考えにくいんだけど……
WSL2は要は仮想マシンでしょう?
あとpythonのビルドは--enable-optimizationしたほうがいいよ。
Windowsで全部のミドルウェアを完璧に動作出来るようコンパイル出来るなら理論上はWindowsのほうが速いんだろうけど、
それが出来ないから仮想化のコストよりLinuxのミドルウェアの効率の高さが上回るんでないの
batが no such file or directoryで起動しないなーと思ったら複数のubuntuを入れてるせいで、デフォルトのdistributionを変更する必要があった