純正のStable Diffusionをコマンド実行するのは実用的に厳しいです。
なので、最も人気のあるStable Diffusion web UIをWSLとUbuntuの環境に構築したいと思います。
[]環境構築後にCUDA ToolkitやcuDNNを更新する方法です。
本記事のバージョンが合わない場合、以下の記事も参考にしてください。
Stable Diffusionで利用するNVIDIA関連のツールを更新する方法です。CUDA ToolkitやcuDNN等、新しい機能を利用するためには更新が必要だったりします。何となく環境が古くなってきたので関連する部分を更新しました。対応するバージョンの確認CUDA ToolkitとcuDNNは正しくバージョンを合わせないと動きません。NVIDIAの公式に対応表があるので、ここから噛み合うバージョンを探します。https://docs.nvidia....
[]Stable Diffusion web UIを更新する方法です。
既に環境を構築済みの人は参考にしてください。
Stable Diffusion web UIをアップデートする方法です。何となく、ちゃんとまとめました。無理に最新版にする必要もないのですが、新機能が増えたりするので好みで更新してください。[20240821]更新でErrorが発生した場合の対処方法を追加しました。◆ Stable Diffusion web UIのインストール方法について◆ 学習モデルのダウンロード方法と追加方法について◆ CUDA ToolkitやcuDNNを更新する方法について...
構築環境の紹介
僕のPC環境です。必須じゃない項目は簡略化して記述します。
- Core i7 + 32GB
- GeForce RTX 3090
- Windows 11
- WSL2 Ubuntu 22.04.1 LTS
- Stable Diffusion 2.1
(Ubuntu側) 事前作業
最初にUbuntuを更新します。僕はトラブルを避けるためにストアからインストールした状態を元に構築してます。
sudo apt update
sudo apt upgrade -y
また、あっても困らないのでgit-lfsも入れておきます。
sudo apt-get install git-lfs
(Windows側) WSL再起動
WSLは再起動が容易で便利です。ここでは無用なトラブルを避けるために結構な頻度で再起動させます。
これは実際には不要かもしれませんが、待ち時間も少ないので、とりあえずで実行することを推奨します。
作業はWindows側で行います。Windows側のTerminal(コマンドプロンプト等)から次のコマンドでWSLを再起動しましょう。
wsl.exe --shutdown
NVIDIA関連の導入
(Windows側) NVIDIAドライバのインストール
と言いたいところですが、NVIDIA製GPUを搭載して通常利用してるPCであれば普通はドライバが入ってます。
NVIDIA GeForce Experienceを利用するのが1番楽ですが、ドライバだけ欲しい人は公式サイトで探してください。
https://www.nvidia.co.jp/Download/index.aspx?lang=jp
(Ubuntu側) NVIDIAドライバ確認
最初の注意点としてUbuntu側にNVIDIAドライバは不要です。寧ろ導入しないほうが良いです。
Windows側にドライバが入っている場合、次のコマンドでUbuntu側からもGPUを認識できます。
nvidia-smi
こんな感じの表が出力されたらGPUは問題なく認識できてます。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 527.92.01 Driver Version: 528.02 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 On | N/A |
| 43% 32C P8 33W / 350W | 1799MiB / 24576MiB | 21% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 23 G /Xwayland N/A |
+-----------------------------------------------------------------------------+
(Ubuntu側) CUDA Toolkitのインストール
次にCUDA Toolkitをインストールしますが、ここで注意点があります。
この記事を作成した時点の最新版はCUDA Toolkit 12.0となるのですが、後にインストールするcuDNNが12.0に対応してません。
そのため過去版を使います。なお、nvidia-smiでCUDA Version: 12.0と出てますが、NVIDIAドライバは最新で大丈夫です。
過去版はここから探せます。
https://developer.nvidia.com/cuda-toolkit-archive
今回は過去版で1番新しいCUDA Toolkit 11.8を使います。
https://developer.nvidia.com/cuda-11-8-0-download-archive
ただし、入手と言ってもファイルをダウンロードする形式ではなく、自身の利用する環境を選択すると、インストールに必要なコマンドを教えてくれます。
今回は上から順番に以下を選択します。注意点は対象のUbuntuがWSLであることを忘れないようにしましょう。
Linux -> x86_64 -> WSL-Ubuntu -> 2.0 -> deb (local)
そうすると、こんな感じのコマンドが表示されるので順番に実行します。
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
注意4番目のコマンドを実行するとTo install the key, run this command:って感じに、次に実行するコマンドを指示されます。
指示されたコマンドと5番目のコマンドを見ると分かるのですが、cuda-*-keyringって感じに*でパスが記述されてます。
恐らくフルパス版でしょう。とりあえず、ここは指示に従って表示されたコマンドを実行します。
インストールが完了したらPATHを設定します。PATHにはバージョン番号が入るので僕と違う人は注意してください。
export CUDA_PATH=/usr/local/cuda-11.8
echo 'export CUDA_PATH=/usr/local/cuda-11.8' >> ${HOME}/.bashrc
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:${LD_LIBRARY_PATH}
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:${LD_LIBRARY_PATH}' >> ${HOME}/.bashrc
export PATH=/usr/local/cuda-11.8/bin:${PATH}
echo 'export PATH=/usr/local/cuda-11.8/bin:${PATH}' >> ${HOME}/.bashrc
ここでシェルを再起動します。
exec "$SHELL"
最後に次のコマンドでインストールしたCUDA Toolkitのバージョンを確認します。
nvcc -V
こんな感じの表示が出ればインストールは問題ありません。
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
(Windows側) WSL再起動
ここでWSLを再起動します。
wsl.exe --shutdown
cuDNNのインストール
(Windows側) cuDNNのダウンロード
cuDNNはUbuntuから直接的な入手が出来ないためWindows経由で入手します。
なお、このファイルのダウンロードにはNVIDIAアカウントが必要になります。
それでは次のリンクからcuDNNを入手しましょう。
https://developer.nvidia.com/rdp/cudnn-download
よくある同意文言(I Agree To the Terms of the cuDNN Software License Agreement)にチェックします。
そうすると選択肢が出現するので、先程インストールしたCUDA Toolkitのバージョンに合うcuDNNを入手します。
ここでは、この時点での最新版であるv8.7.0を利用します。
Download cuDNN v8.7.0 (November 28th, 2022), for CUDA 11.x
これを選ぶと、さらに選択肢が出現します。ここから自分の環境に合うファイルを選びましょう。
Ubuntuのバージョンも僕と同じなら、実際にダウンロードするのは以下のファイルです。
Local Installer for Ubuntu22.04 x86_64 (Deb)
ファイルを入手できたら、このファイルをLinux側に転送します。
転送と言っても、WSLにはLinux側のディレクトリをWindows側のエクスプローラ経由で参照できる機能があります。
エクスプローラ左側に表示されるフォルダツリーからLinuxって部分を辿るか、以下のようにパスを指定します。
\\wsl.localhost\Ubuntu-22.04\home\(ユーザー名)
(Ubuntu側) cuDNNのインストール
ここからはインストール作業となるので、Ubuntuで作業します。
それでは先程ファイルをコピーしたディレクトリに移動しましょう。
移動したらインストール用のコマンドを実行します。
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.7.0.84_1.0-1_amd64.deb
そうするとTo install the key, run this command:って感じに次のコマンドを指示されます。
僕の場合は次のコマンドでした。
sudo cp /var/cudnn-local-repo-ubuntu2204-8.7.0.84/cudnn-local-BF23AD8A-keyring.gpg /usr/share/keyrings/
続いて次のコマンドを実行します。
sudo apt update
sudo apt -y install libcudnn8 libcudnn8-dev libcudnn8-samples
これでインストールは完了です。cuDNNの動作確認は手間なのでスルーして先に進みます。
(Ubuntu側) CUDA関連のError対策
このままだと画像生成時に以下のエラーが出るため先に解決しておきます。
could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directoryM Sampler:
以下が解決用のコマンドです。これを実行しましょう。
sudo ln -s /usr/lib/wsl/lib/libcuda.so.1 /usr/local/cuda/lib64/libcuda.so
(Windows側) WSL再起動
ここでWSLを再起動します。
wsl.exe --shutdown
(Ubuntu側) Python3のインストール
次にPython3をインストールします。
sudo apt install wget git python3 python3-venv -y
Stable Diffusion web UI関連の導入
(Ubuntu側) Stable Diffusion web UI(本体)のインストール
次のコマンドを実行して本体部分のインストールと起動を行います。それなりの時間が掛かるので地道に待ちましょう。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
cd stable-diffusion-webui
./webui.sh
また、この時点では学習モデルを配置してないためにエラーで起動失敗しますが、ここでは気にせず先に進んでください。
No checkpoints found. When searching for checkpoints, looked at:
- file /home/user/stable-diffusion-webui/model.ckpt
- directory /home/user/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.
(Ubuntu側) Stable Diffusion web UI(学習モデル)の入手
利用する学習モデルを配置します。ここでは2.0版と2.1版(2個)を両方とも追加しておきます。
cd ~/stable-diffusion-webui
wget https://huggingface.co/stabilityai/stable-diffusion-2/resolve/main/768-v-ema.ckpt -O ./models/Stable-diffusion/768-v-ema.ckpt
wget https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/v2-inference-v.yaml -O ./models/Stable-diffusion/768-v-ema.yaml
cd ~/stable-diffusion-webui
wget https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.safetensors -O ./models/Stable-diffusion/v2-1_768-ema-pruned.safetensors
wget https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-nonema-pruned.safetensors -O ./models/Stable-diffusion/v2-1_768-nonema-pruned.safetensors
(Ubuntu側) xformers(Option)の利用設定
昔はBuildも必要でしたが今は不要です。利用するには起動オプションを指定するかdefault引数を変更します。
ここではdefault引数の変更を推奨しますが、起動オプションでいいなら次の方法で毎回起動してください。
./webui.sh --xformers
default引数を変更する場合はwebui.shと同階層にあるwebui-user.shを修正します。
変更の対象になるのは次の部分です。検索とかで見つけてください。
#export COMMANDLINE_ARGS=""
これを次のように修正します。
export COMMANDLINE_ARGS="--xformers"
(Ubuntu側) 動作確認
(Ubuntu側) Stable Diffusion web UIの起動方法
次のコマンドで起動します。起動したらUbuntu側はコマンド実行中のまま放置します。
cd ~/stable-diffusion-webui
./webui.sh
そうするとWindows側のブラウザで次のURLにアクセスできます。
ポート番号が異なる場合は自身の実行結果を確認してください。
http://127.0.0.1:7860
後はUIになってるので自由に操作して遊びましょう。
(Ubuntu側) Stable Diffusion web UIの停止方法
Ubuntu側は単にコマンド実行中になってるだけなので、Ctrl+Zを入力すれば停止します。
あとがき
Stable Diffusionのインストール部分は殆ど全自動です。
さらに拡張機能も優れていてUIも使いやすい。もしかして開発者は神ですか。
この記事は参考になりましたか?
コメント