Stable Diffusion web UI + WSL + Ubuntuの環境を構築する

[Stable Diffusion] Stable Diffusion web UI + WSL + Ubuntuの環境を構築する

※ 当サイトは広告を含みます。

純正のStable Diffusionをコマンド実行するのは実用的に厳しいです。
なので、最も人気のあるStable Diffusion web UIをWSLとUbuntuの環境に構築したいと思います。

[]環境構築後にCUDA ToolkitやcuDNNを更新する方法です。
本記事のバージョンが合わない場合、以下の記事も参考にしてください。

[]Stable Diffusion web UIを更新する方法です。
既に環境を構築済みの人は参考にしてください。

構築環境の紹介

僕の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)
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になってるので自由に操作して遊びましょう。

Stable Diffusion web UIの動作確認

(Ubuntu側) Stable Diffusion web UIの停止方法

Ubuntu側は単にコマンド実行中になってるだけなので、Ctrl+Zを入力すれば停止します。

あとがき

Stable Diffusionのインストール部分は殆ど全自動です。
さらに拡張機能も優れていてUIも使いやすい。もしかして開発者は神ですか。

この記事は参考になりましたか?

関連記事

コメント

この記事へのコメントはありません。