はじめに
これまで、各種の生成 AI は WSL2 Ubuntu 23.10 の上で環境を構築し使用してきました。常々、「ちゃんと構築するなら 22.04 LTSだよなぁ」と考えていました。
まとまった時間が取れましたので、WSL2 Ubuntu 22.04 LTS の上で各種の生成 AI の環境を作り直す事にしました。ゼロから環境構築する際の参考になれば幸いです。
前回は、NVIDIA cuDNN 8 をインストールする方法について説明しました。
前々回は、CUDA 11.7 のアンインストールと CUDA 11.8 & 12.1 のインストールの方法について説明しました。
今回は、前々回、前回のインストールした環境をベースに、Stable Diffusion WebUI v1.7.0 と SDXL 1.0 モデルを使用する環境構築について説明します。
前提となる環境
前提となる環境は、Windows11 WSL2 Ubuntu 22.04 LTS です。python のバージョンは若干古く 3.10.12 になります。GPU は nVidia RTX3060 12GB で Driver は Ver.546.33 です。WSL2 の場合は、Windows 側にインストールした GPU ドライバーのバージョンとなり、WSL2 用のコマンド・ライブラリも同時にインストールされます。
これに CUDA 11-8 & 12.1 と cuDNN をインストールしています。cuDNN は CUDA 11-8 用です。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
$ python3 -V
Python 3.10.12
$ nvidia-smi
Sat Jan 6 20:35:57 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.29.01 Driver Version: 546.33 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 3060 On | 00000000:08:00.0 On | N/A |
| 30% 38C P8 13W / 170W | 666MiB / 12288MiB | 3% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
$ /usr/local/cuda-11.8/bin/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
$ /usr/local/cuda-12.1/bin/nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0
$ dpkg -l | grep libcudnn8 | tr -s ' '
ii libcudnn8 8.9.7.29-1+cuda11.8 amd64 cuDNN runtime libraries
ii libcudnn8-dev 8.9.7.29-1+cuda11.8 amd64 cuDNN development libraries and headers
生成 AI は ~/GenerationAI 以下に directory を作成してインストールする事にします。
$ mkdir ~/GenerationAI && cd ~/GenerationAI
この環境をベースとして、各種の生成 AI をインストールします。
Stable Diffusion WebUI v1.7.0 のインストール
Stable Diffusion WebUI のインストールは、これまで幾度か記事にしています。末尾にまとめて記載します。個々の記事で取り組んだ内容が分散していましたが、この記事で網羅できていると思います。
この記事ではゼロからインストールする場合について記載します。
Stable Diffusion WebUI 用のディレクトリの作成
この後、~/GenerationAI 以下に各種の生成 AI をインストールしていきますので、Stable Diffusion 用にディレクトリを作成します。
$ mkdir SDXL && cd SDXL
必要な package のインストール
Ubuntu 22.04 LTS で Stable Diffusion WebUI に必要な package は 5つです。
github に記載されているものは、
- wget
- git
- python3
- python3-venv
の4つです。Ubuntu の場合は apt で install します。
$ sudo apt install wget git python3 python3-venv
Stable Diffusion WebUI v1.6.0 以降では、TCMalloc がインストールされていない場合に以下のメッセージが表示されます。
Cannot locate TCMalloc (improves CPU memory usage)
こちらを参考に TCMalloc をインストールします。
$ sudo apt install --no-install-recommends google-perftools
以上より、WSL2 Ubuntu 22.04 LTS で追加でインストールする package は合計5つになります。
github より clone
github より Stable Diffusion WebUI のリポジトリを clone します。2024年1月現在では、v1.7.0 が clone 出来ます。
$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
$ cd stable-diffusion-webui
webui-user.sh の編集
webui-user.sh の2か所について、コメントを外して編集します。
$ cat webui-user.sh | grep -v ^# | uniq
export COMMANDLINE_ARGS="--medvram-sdxl --no-half-vae --opt-sdp-attention"
export TORCH_COMMAND="pip install torch==2.1.2+cu121 --extra-index-url https://download.pytorch.org/whl/cu121"
COMMANDLINE_ARGS に3つのオプションを追加します。
- --medvram-sdxl : VRAM 使用量の削減、メインメモリへ転送 (12GB 以下の GPU では必須)
- --no-half-vae : 画像品質向上
- --opt-spd-attention : PyTorch 2.0 以降で使用できる生成高速化オプション
--opt-spd-attention と --opt-sdp-no-mem-attention はどちらかを指定すれば良いようです。
--xformers と --opt-spd-attention のどちらを使うかはお好みで。私は --opt-spd-attention を使用しています。
PyTorch は、今回は PyTorch 2.1.2 + CUDA 12.1 を使用しますので、TORCH_COMMAND を有効にして、インストール用のオプションを追加します。
SDXL 1.0 学習済みモデルのダウンロード
学習済みモデルが無い場合には、インストール段階で v1-5-pruned-emaonly.safetensors が自動的にダウンロードされます。今回は、既に構成している Stable Diffusion WebUI の環境から SDXL 1.0 の学習済みモデルをコピーしました。
新たに SDXL 1.0 の学習済みモデルをダウンロードするには、以下の方法でダウンロードできます。
base と refiner、VAE の3種類をダウンロードして、適切なディレクトリに置きます。
webui.sh の実行
ここまで設定したら、webui.sh を実行します。初回は各種 package のインストールが行われますので時間を要します。少し長いですが、初回実行時のログを載せておきます。
- models のコピーを忘れていたので、'v1-5-pruned-emaonly.safetensors' がダウンロードされてしまいました。事前に models 以下に入れておけばダウンロードされません。
- PyTorch は 2.1.2+cu121 がインストールされています。
正常にインストールが終了し、WSL2 に入れていた chrome が起動しました。
################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye), Fedora 34+ and openSUSE Leap 15.4 or newer.
################################################################
################################################################
Running on hiro user
################################################################
################################################################
Repo already cloned, using it as install directory
################################################################
################################################################
Create and activate python venv
################################################################
################################################################
Launching launch.py...
################################################################
Using TCMalloc: libtcmalloc_minimal.so.4
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]
Version: v1.7.0
Commit hash: cf2772fab0af5573da775e7437e6acdca424f26e
Installing torch and torchvision
Looking in indexes: https://pypi.org/simple, https://download.pytorch.org/whl/cu121
Collecting torch==2.1.2+cu121
Downloading https://download.pytorch.org/whl/cu121/torch-2.1.2%2Bcu121-cp310-cp310-linux_x86_64.whl (2200.7 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 GB 3.6 MB/s eta 0:00:00
Collecting fsspec
Using cached fsspec-2023.12.2-py3-none-any.whl (168 kB)
Collecting triton==2.1.0
Downloading https://download.pytorch.org/whl/triton-2.1.0-0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (89.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.2/89.2 MB 48.8 MB/s eta 0:00:00
Collecting networkx
Using cached networkx-3.2.1-py3-none-any.whl (1.6 MB)
Collecting filelock
Using cached filelock-3.13.1-py3-none-any.whl (11 kB)
Collecting typing-extensions
Using cached typing_extensions-4.9.0-py3-none-any.whl (32 kB)
Collecting jinja2
Using cached https://download.pytorch.org/whl/Jinja2-3.1.2-py3-none-any.whl (133 kB)
Collecting sympy
Using cached https://download.pytorch.org/whl/sympy-1.12-py3-none-any.whl (5.7 MB)
Collecting MarkupSafe>=2.0
Using cached https://download.pytorch.org/whl/MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)
Collecting mpmath>=0.19
Using cached https://download.pytorch.org/whl/mpmath-1.3.0-py3-none-any.whl (536 kB)
Installing collected packages: mpmath, typing-extensions, sympy, networkx, MarkupSafe, fsspec, filelock, triton, jinja2, torch
Successfully installed MarkupSafe-2.1.3 filelock-3.13.1 fsspec-2023.12.2 jinja2-3.1.2 mpmath-1.3.0 networkx-3.2.1 sympy-1.12 torch-2.1.2+cu121 triton-2.1.0 typing-extensions-4.9.0
Installing clip
Installing open_clip
Cloning Stable Diffusion into /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/stable-diffusion-stability-ai...
Cloning into '/home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/stable-diffusion-stability-ai'...
Cloning Stable Diffusion XL into /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/generative-models...
Cloning into '/home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/generative-models'...
Cloning K-diffusion into /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/k-diffusion...
Cloning into '/home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/k-diffusion'...
Cloning CodeFormer into /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/CodeFormer...
Cloning into '/home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/CodeFormer'...
Cloning BLIP into /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/BLIP...
Cloning into '/home/hiro/Generation_AI/SDXL/stable-diffusion-webui/repositories/BLIP'...
Installing requirements for CodeFormer
Installing requirements
Launching Web UI with arguments: --medvram-sdxl --no-half-vae --opt-sdp-attention --opt-sdp-no-mem-attention
no module 'xformers'. Processing without...
no module 'xformers'. Processing without...
No module 'xformers'. Proceeding without it.
Style database not found: /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/styles.csv
Downloading: "https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors" to /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
Calculating sha256 for /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors: Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
Startup time: 165.9s (prepare environment: 115.6s, import torch: 1.8s, import gradio: 0.7s, setup paths: 0.6s, initialize shared: 0.5s, other imports: 0.4s, list SD models: 44.7s, load scripts: 0.4s, create ui: 0.3s, gradio launch: 0.8s).
6ce0161689b3853acaa03779ec93eafe75a02f4ced659bee03f50797806fa2fa
Loading weights [6ce0161689] from /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
Creating model from config: /home/hiro/Generation_AI/SDXL/stable-diffusion-webui/configs/v1-inference.yaml
Applying attention optimization: sdp-no-mem... done.
Model loaded in 6.4s (calculate hash: 3.8s, load weights from disk: 0.3s, create model: 0.3s, apply weights to model: 1.5s, load textual inversion embeddings: 0.2s, calculate empty prompt: 0.2s).
Stable Diffusion WebUI v1.7.0 の設定
そのままでは少々使いづらいので、設定を変更します。
- 自動でウェブブラウザが起動するのを止める
- VAE を選択できるようにする
- 拡張機能の導入
自動でウェブブラウザが起動するのを止める
Stable Diffusion WebUI v1.6.0 から、起動時にウェブブラウザを自動で起動するようになりました。WSL2 に環境を構築している場合には不要ですので、設定で OFF にします。
- 「設定 (Settings)」の「システム設定 (System settings)」を選択
- 「Automatically open webui in browser on startup」を「Disable」に変更
- 「設定を適用 (Apply settings)」、「UI の再読み込み (Reload UI)」
画面イメージ付きで以下で説明していますので参照下さい。
VAE を選択できるようにする
SDXL で提供されている VAE を選択できるように、設定を変更します。
- 上部のタブの「設定 (Settings)」
- 左側メニューの「ユーザーインターフェース (User interface)」
- 上部にある「クイック設定 (Quicksettings list)」の欄をクリック
- 「sd_vae」を選択
- 「設定を適用 (Apply settings)」、「UI の再読み込み (Reload UI)」
の順に作業します。画面イメージ付きで以下で説明していますので参照下さい。
拡張機能の導入
Stable Diffusion WebUI の拡張機能は、私は以下の3種類を使用しています。
- Config-Presets 拡張機能
- stable-diffusion-webui-localization-ja_JP
- sd-webui-bilingual-localization
拡張機能の導入方法については以下のページにまとめています。
Stable Diffusion WebUI v1.7.0 のトラブル対処、他
これまで経験しているトラブルへの対処方法と、Stable Diffusion WebUI を再インストールせずに PyTorch のみをアップデートする方法です。
- libcuda.so 実体化に伴うトラブル
- 'Open images output directory' が機能しないトラブル
- Stable Diffusion WebUI のアップデート
- PyTorch のみバージョンアップする方法
libcuda.so 実体化に伴うトラブルへの対処
libcuda.so は Windows11 側の GPU Driver から提供されています。タイミングは分かりませんが、結構な頻度で libcuda.so が Symbolic link ではなく実体化されている事があります。
そのタイミングで Stable Diffusion WebUI はエラーを表示して画像が生成できなくなります。
これを防止する為に以下の script を作成しました。
#/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
この script を ~/cuda.sh として保存します。
$ chmod +x ~/cuda.sh
$ ~/cuda.sh
libcuda.so is required Symbolic link
[sudo] password for hiro:
Symbolic link の場合は何もせず、実体化している場合には Synbolic link を張り直します。Symbolic link の張り直しには su の権限が必要ですので、sudo を使用しています。パスワードを要求されたら入力します。
Stable Diffusion WebUI を使用する前に実行しておけば、要らぬトラブルを防止できます。
'Open images output directory' が機能しない場合の対処
Stable Diffusion WebUI で生成した画像の directory を開くボタンを押すと、以下のエラーが表示されます。
FileNotFoundError: [Errno 2] No such file or directory: 'wsl-open'
wsl-open は npm (Node.js) で提供されています。
Ubuntu 全体で使用できるようにする場合には apt で npm を入れて、global option 付きで wsl-open をインストールします。ただし、Ubuntu 22.04 LTS の Node.js は v12.22.9、npm は v8.5.1 と古めなのでお勧めしません。
$ sudo apt install -y npm
$ sudo npm install -g wsl-open
使用している user のみで使えればよい場合には、local に nvm を入れて Node.js の環境を作り、wsl-open をインストールします。こちらの方法では最新の Node.js を使用する事が出来ます。
下記はコマンドを列記しますので、詳細はリンク先を参照してください。
# ~/ に戻って作業する
$ cd
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
$ nvm --version
0.39.7
$ nvm ls-remote | grep 'Latest LTS'
v4.9.1 (Latest LTS: Argon)
v6.17.1 (Latest LTS: Boron)
v8.17.0 (Latest LTS: Carbon)
v10.24.1 (Latest LTS: Dubnium)
v12.22.12 (Latest LTS: Erbium)
v14.21.3 (Latest LTS: Fermium)
v16.20.2 (Latest LTS: Gallium)
v18.19.0 (Latest LTS: Hydrogen)
v20.10.0 (Latest LTS: Iron)
$ nvm install 18.19.0
$ node --version
v18.19.0
$ npm --version
10.2.3
$ mkdir ~/wsl-open && cd ~/wsl-open
$ npm init -y
$ npm install wsl-open
$ cd ~/.local/bin
$ ln -s ~/wsl-open/node_modules/wsl-open/wsl-open.sh ./wsl-open
Stable Diffusion WebUI のアップデート方法
この記事の手順通りに github から clone した場合には、
$ cd ~/GenerationAI/SDXL/stable-diffusion-webui
$ git pull
と、git clone したディレクトリで git pull を実行すればアップデートできます。
PyTorch のみバージョンアップする方法
既にインストール済みの環境で PyTorch をアップデートしたい場合には、TORCH_COMMAND にインストール用のコマンドを追加し、webui.sh に --reinstall-torch オプションを追加して起動すると、PyTorch がアップデートできます。
$ cat webui-user.sh | grep '^export TORCH_COMMAND'
export TORCH_COMMAND="pip install torch==2.1.2+cu121 --extra-index-url https://download.pytorch.org/whl/cu121"
$ ./webui.sh --reinstall-torch
CUDA のバージョンアップも実施したい場合には、以下の記事を参照下さい。
過去の取り組み
Stable Diffusion WebUI について過去に取り組んだ内容です。前段までに記載した内容は、古い情報は除外し、2024年1月時点で有効な内容について記載しています。
まとめ
WSL2 Ubuntu 22.04 LTS に CUDA 11.8 & 12.1、cuDNN 8 for CUDA 11.8 をインストールした環境に、Stable Diffusion WebUI v1.7.0 & SDXL 1.0 をインストールする手順についてまとめました。
- Ubuntu 22.04 LTS に PyTorch 2.1.2 + CUDA 12.1 でインストールし、SDXL 1.0 のモデルで画像が正常に生成される事を確認しました。
- ゼロからインストールする際に、事前に行っておいた方が良い事、事後に設定しておいた方が使いやすい事、起こりやすいトラブルへの対処方法についてまとめました。
Stable Diffusion WebUI は、個人的には Windows11 よりも WSL2 Ubuntu で動作させる方が簡単だと思います。CUDA のバージョンに対応する PyTorch のインストール方法が引っ掛かりやすいポイントですが、この記事を参考にして頂けたら回避できると思います。
今回のアイキャッチ画像
ジャングルの中を歩く人を SDXL で生成しました。油絵風や水彩画風だと思うような画像が生成されなかったので、今回は写実風の画像です。
私の Amazon アソシエイトのリンクで2番目に多く購入して頂いているのは、FILCO のキートッププーラーです。メカニカルキーボードを購入すると、簡易的なキートッププーラーが付属していますが、FILCO のこちらのプーラー以外は使う気になりません。
キーの隙間、結構汚れますよね。外せる機種であれば一度外して掃除してみては如何でしょうか。
コメント