スポンサーリンク

WSL2 Ubuntu 22.04 LTS に Stable Diffusion WebUI v1.7.0 & SDXL 1.0 をインストールする

person_in_the_jungle
記事内に広告が含まれています。
スポンサーリンク

はじめに

これまで、各種の生成 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 を開くボタンを押すと、以下のエラーが表示されます。

Open images output 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 のこちらのプーラー以外は使う気になりません。

キーの隙間、結構汚れますよね。外せる機種であれば一度外して掃除してみては如何でしょうか。

コメント

タイトルとURLをコピーしました