広告

当サイトは広告が表示されます。

Stable Diffusion web UI + WSL + Ubuntu で環境構築

ブログの引っ越し

当ブログはtakemi.blogに移行しました。
より見やすいStable Diffusion web UI + WSL + Ubuntuの環境を構築するをご利用ください。

作成日時

2023/01/30

概要

コマンドで実行する通常のStable Diffusionを使っていましたが、色々と使い勝手が悪いので、一番人気のあるStable Diffusion web UIに環境を変更しました。

最初は共存させようと思ったけど色々考えるのが面倒くなり、前環境を捨てて作り直しました。気軽にこれが出来るのがWSLのメリットですね。

筆者の環境

筆者の環境は以下です。

  • Core i7 + 32GB
  • GeForce RTX 3090
  • Windows 11
  • WSL2 Ubuntu 22.04.1 LTS
  • Stable Diffusion web UI (2023/01/29時点のCommit)

[Ubuntu] 前準備

まずはUbuntuを更新しておきましょう。

インストール済みのUbuntuは削除しているので、私の環境はストアからインストールした初期状態です。

sudo apt update
sudo apt upgrade -y

あって困るものでは無いのでgit-lfsも入れておきます。

sudo apt-get install git-lfs

[Windows] NVIDIAドライバのインストール

と言いたいところですが、NVIDIA製GPUを搭載して通常利用しているPCであれば普通はドライバが入っています。

筆者のようにNVIDIA GeForce Experienceを利用すると楽ですが、ドライバだけ欲しい人は公式サイトで必要なの探してください。

[Ubuntu] NVIDIAドライバ確認

注意点としてUbuntu側にNVIDIAドライバは不要です。 先程のWindows側ドライバが入っている場合、以下のコマンドでUbuntu側からもGPUを認識できます。

nvidia-smi

これを実行すると、こんな感じの表が出ます。

この途中にNVIDIA GeForce....みたいな表示があれば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

今回は過去版で一番新しい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番目のコマンドsudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.debを実行するとTo install the key, run this command:って感じに、次のコマンドを実行せよと指示されます。

指示されたコマンドと次の5番目のコマンドを良く見ると分かるのですが、cuda-*-keyringって感じに*でパスが記述されており、これのフルパス版だと思います。

とりあえず、指示に従ってフルパス版のコマンドを実行しておきましょう。(Linux良く分からん。きっとワイルドカード的なやつだな)

インストールが完了したらPATHを設定します。PATHにはバージョン番号が入るので筆者と違う人は注意してください。

心配な人はlsとかでインストールした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

こんな感じの表示が出ればOK

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再起動

一度Ubuntuから出てWindows側からWSLを再起動

wsl.exe --shutdown

[Windows][Ubuntu] cuDNNのインストール

cuDNNはUbuntuから直接入手が出来ないのでWindows経由(正確には公式Web経由)で入手します。

なお、このファイルの取得にはアカウント登録が必要です。この辺の話は本題とは無関係なのでカットします。

それでは次のリンクから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って部分を辿るか、以下のようにパスを指定します。

これはLinux側をuserってユーザー名で作っている場合にログイン時に指定されるディレクトリです。

\\wsl.localhost\Ubuntu-22.04\home\user

で、ファイルをコピーしたらUbuntu側からインストールするので、ここからは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の動作確認とかしたほうが良いのですが、調べたら色々めんどかったのでOK前提でスルーしました。

[Ubuntu] CUDA関連のError対策

このままだと画像生成時に以下の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再起動

一度Ubuntuから出てWindows側からWSLを再起動

wsl.exe --shutdown

[Ubuntu] Python3のインストール

次にPython3をインストールします。

sudo apt install wget git python3 python3-venv -y

[Ubuntu] Stable Diffusion web UI (本体)

次に本体部分のインストールです。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
cd stable-diffusion-webui
./webui.sh

ここで一部のファイルがダウンロードされるため、コマンドの終了まで時間が掛かります。

また、この時点では学習モデルの配置をしていないため、以下のErrorで起動は失敗します。

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.1版だとErrorが出て解決できなかったので2.0版を使います。

※ 将来的には別のModelを使う予定なので気が向いたら調査します。

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

[2023/04/18 追記]
2.1版のモデルを追加する方法です。モデルが2種類あったので両方載せておきます。

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
cd ~/stable-diffusion-webui
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][Windows] Stable Diffusion web UI (実行)

Ubuntuで以下のコマンドを実行します。

cd ~/stable-diffusion-webui
./webui.sh

そうするとWindows側のブラウザで以下のURLにアクセスできます。

http://127.0.0.1:7860

分かりやすいUIなので、フィーリングでも操作できると思います。

WebUI

[Ubuntu] Stable Diffusion web UI (停止方法)

Ubuntu側は単にコマンド実行中になっているのでCtrl+Cで止めれます。

[Ubuntu] xformers (Option)

今は自動でインストールされるらしい。故にBuildとか面倒な手間は不要。

起動時に毎回指定で良ければ以下で有効にできます。

./webui.sh --xformers

それが面倒な場合は同階層にあるwebui-user.shの以下の部分を変更します。

[変更前]

#export COMMANDLINE_ARGS=""

[変更後]

export COMMANDLINE_ARGS="--xformers"

おわりに

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

Next Post Previous Post