Windows11+WLS2+Ubuntu22.04+StableDiffisuionの作業メモ

失敗しても成功してもやったこととりあえず書いてく。
後でまとめれたらまとめたい。

2024.07.06 動いてとりあえず描画できた。wsl-openコマンドについて追加した。

## 環境

* Ryzen7 7700
* NVIDIA RTX4070 SUPER (12GB)
* 64GRAM
* SSD 1T

## WSL2インストールとUbuntuインストール

### 有効化

https://learn.microsoft.com/ja-jp/windows/wsl/install

↑が公式のドキュメントだけど、「Windowsの機能の有効化または無効化」をWindowsの設定から開いて「Linux用Windowsサブシステム」にチェックを入れて再起動すればおっけー

### Ubuntuインストール

StoreからUbuntu探してインストールした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54593/e0fd2a34-9dc2-2b96-85a8-7f53a75e2fb5.png)

ターミナルで起動、name/passwdを入れたら、以下のコマンドで一応バージョン確認

```bash
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy
```

### いったん閉じてwsl2に割り当てられてるCPU数などを変更する

```powershell
code "$Env:userprofile\.wslconfig"
```

以下のように記載。
メモリは64積んでるので、ひとまず50使えるようにして、プロセッサは物理？論理？わからないけど、とりあえず最大の16。スワップは嫌いなので0。

```text
[wsl2]
memory=50GB
processors=16
swap=0
```

以下参考

https://qiita.com/segfo/items/a258ef62a4b2fd85fbea

とりあえずUbuntuもっかい入って、以下のコマンドでCPU数とメモリを確認

```bash
$ lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         48 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  16
  On-line CPU(s) list:   0-15
～

$ top | grep "MiB Mem"
MiB Mem :  50194.3 total,  49368.9 free,    612.3 used,    213.1 buff/cache
```

16CPUsにMemもトータルが50194なので、おけー。


### 失敗したときに消す

普通にアプリからUbuntuをアンインストールしても、Windows11だとLinuxってディレクトリに消したはずのUbuntuのファイル群が残っちゃうので、以下のコマンドで削除。
これできれいになった。

```powershell
wsl --list
wsl --unregister Ubuntu
```

## StableDiffusionを頑張って入れてみよう

```bash
$ python3 -V
Python 3.10.12

$ nvidia-smi
Tue Jul  2 23:11:16 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.37.02              Driver Version: 546.65       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 4070 ...    On  | 00000000:01:00.0  On |                  N/A |
|  0%   40C    P8              14W / 220W |    943MiB / 12282MiB |      5%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

```

### NvidiaCudaToolkitのインストール

https://developer.nvidia.com/cuda-downloads

ここから、Linux -> x86_64 -> wsl_ubuntu -> 2.0 -> dev(local) ※最後のはnetworkでもlocalでも何でもOK
でインストール用コマンドをゲットできるので実行

```bash
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/12.5.1/local_installers/cuda-repo-wsl-ubuntu-12-5-local_12.5.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-5-local_12.5.1-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-5-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-5
```

最後まで流れて

```bash
～
Running hooks in /etc/ca-certificates/update.d...

done.
done.
Setting up at-spi2-core (2.44.0-3) ...
```

ってなったので、nvccのバージョンを確認.

```bash
$ nvcc -V
Command 'nvcc' not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit
```

？！

今入れたのってnvidiaのcuda toolkit…
あ、パスが必要なのね

https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions

※バージョンがインストールしたやつと違うかもだから注意。今回入れたのは12.5なので、変更してコマンド発行

```bash
$ export PATH=/usr/local/cuda-12.5/bin${PATH:+:${PATH}}
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Jun__6_02:18:23_PDT_2024
Cuda compilation tools, release 12.5, V12.5.82
Build cuda_12.5.r12.5/compiler.34385749_0
```

ってことで、bash_profileに以下の内容を記載（なければ新規作成）

```bash
nebukin@NebuAI:~$ cat ~/.bash_profile
# StableDiffusion用の設定(GPU関連)
export PATH=/usr/local/cuda-12.5/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.5/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


# load bashrc
if [[ -f ~/.bashrc ]] ; then
  . ~/.bashrc
fi
```

※bashrc読み込み忘れないように注意

### Stable Diffusion WebUIをインストール

参考

https://hitori-sekai.com/python/stable-diffusion-web-ui/#toc10


```bash
$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
$ cd stable-diffusion-webui/
~/stable-diffusion-webui$ ls
CHANGELOG.md  README.md    environment-wsl2.yaml  javascript     modules                requirements.txt           script.js  textual_inversion_templates  webui.bat
CITATION.cff  _typos.toml  extensions             launch.py      package.json           requirements_npu.txt       scripts    webui-macos-env.sh           webui.py
CODEOWNERS    configs      extensions-builtin     localizations  pyproject.toml         requirements_versions.txt  style.css  webui-user.bat               webui.sh
LICENSE.txt   embeddings   html                   models         requirements-test.txt  screenshot.png             test       webui-user.sh

$ cp -ap webui-user.sh webui-user.sh.org
$ vi webui-user.sh
```

xformersを使用するようにwebui-user.shを編集する

```bash
# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
#export COMMANDLINE_ARGS=""
export COMMANDLINE_ARGS="--xformers"
```

### 参考サイトの通りに適当なモデルを入れて起動してみる

```bash
$ cd ~/stable-diffusion-webui/models/Stable-diffusion/
$ wget https://huggingface.co/stabilityai/stable-diffusion-2-1-base/resolve/main/v2-1_512-ema-pruned.safetensors

v2-1_512-ema-pruned.safetensors                100%[====================================================================================================>]   4.86G  70.7MB/s    in 76s

2024-07-03 00:01:45 (65.2 MB/s) - ‘v2-1_512-ema-pruned.safetensors’ saved [5214604494/5214604494]

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

結果

```bash
################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye), Fedora 34+ and openSUSE Leap 15.4 or newer.
################################################################

################################################################
Running on nebukin user
################################################################

################################################################
Repo already cloned, using it as install directory
################################################################

################################################################
Create and activate python venv
################################################################
The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt install python3.10-venv

You may need to use sudo with that command.  After installing the python3-venv
package, recreate your virtual environment.

Failing command: /home/nebukin/stable-diffusion-webui/venv/bin/python3


################################################################
ERROR: Cannot activate python venv, aborting...
################################################################
```

Pythonの設定ミスっぽい。venvやってないじゃん。ってことで、心を入れなおして、upgradeからやっちゃおう。

```bash
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install wget git python3 python3-pip python3-venv
$ cd ~/stable-diffusion-webui  # webui.shがあるディレクトリに移動
$ python3 -m venv sd-env  # 仮想環境を作成
$ source sd-env/bin/activate  # 仮想環境をアクティブ化
$ python --version
3.10.xx
$ pip install -r requirements.txt
$ ./webui.sh
```

now installing...

```bash
$ ./webui.sh

################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye), Fedora 34+ and openSUSE Leap 15.4 or newer.
################################################################

################################################################
Running on nebukin user
################################################################

################################################################
Repo already cloned, using it as install directory
################################################################

################################################################
python venv already activate or run without venv: /home/nebukin/stable-diffusion-webui/sd-env
################################################################

################################################################
Launching launch.py...
################################################################
glibc version is 2.35
Cannot locate TCMalloc. Do you have tcmalloc or google-perftool installed on your system? (improves CPU memory usage)
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]
Version: v1.9.4
～
Launching Web UI with arguments: --xformers
WARNING:xformers:WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. xFormers was built for:
    PyTorch 2.1.2+cu121 with CUDA 1201 (you have 2.3.1+cu121)
    Python  3.10.13 (you have 3.10.12)
  Please reinstall xformers (see https://github.com/facebookresearch/xformers#installing-xformers)
  Memory-efficient attention, SwiGLU, sparse and more won't be available.
  Set XFORMERS_MORE_DETAILS=1 for more details

```

<details><summary>この行クリックして開くと失敗したやらなくていい作業が書いてある（一応ログとして残しておく）</summary>

xformersがcannot loadだ…

```bash
いったん全部消して
$ pip uninstall torch torchvision torchaudio xformers

PyTorch 2.3.1と対応するtorchvision、torchaudioをインストールします。
$ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

とりあえず最新のxformersを入れてみる
$ pip install xformers

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
torchvision 0.18.1 requires torch==2.3.1, but you have torch 2.3.0 which is incompatible.
torchaudio 2.3.1 requires torch==2.3.1, but you have torch 2.3.0 which is incompatible.
```

むむむ…


```bash
いったん削除、pythonのバージョンがちょっと足りないかも？
$ deactivate sd-env
$ rm -rf sd-env/

3.11を入れる
$ sudo apt install python3.11 python3.11-venv python3.11-dev

venv環境作成
$ python3.11 -m venv sd-env
$ source sd-env/bin/activate
$ python --version
Python 3.11.0rc1

pip最新化
$ python -m pip install --upgrade pip
Requirement already satisfied: pip in ./sd-env/lib/python3.11/site-packages (22.0.2)
Collecting pip
  Using cached pip-24.1.1-py3-none-any.whl (1.8 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 22.0.2
    Uninstalling pip-22.0.2:
      Successfully uninstalled pip-22.0.2
Successfully installed pip-24.1.1

requirementsを入れなおす
$ pip install -r requirements.txt

起動
$ ./webui.sh
～
Launching Web UI with arguments: --xformers
./webui.sh: line 297:  6655 Segmentation fault      "${python_cmd}" -u "${LAUNCH_SCRIPT}" "$@"
```

セグメンテーションフォルト…

何度やってもセグメンテーションフォルトになるので、Pythonのバージョン問題ぽいから元々入ってる3.10.12の最初のやつで環境作りなおす


```bash
$ deactivate sd-env
$ rm -rf sd-env
$ cd ~/stable-diffusion-webui  # webui.shがあるディレクトリに移動
$ python3 -m venv sd-env  # 仮想環境を作成
$ source sd-env/bin/activate  # 仮想環境をアクティブ化
$ python --version
3.10.xx
$ pip install -r requirements.txt
```

</details>

```text
　　　　　　　∧_∧
　　∧__∧ （´<_｀ )　流石だよな俺ら。
　 （ ´_ゝ`）/　　⌒i　
＿(__ つ/￣￣￣/i |＿
　　＼/＿＿＿/ ヽ⊃
```

<br/>

メモリ対策のやつも入れてみるかMallocなんちゃらとかいうやつ

```bash
$ sudo apt install --no-install-recommends google-perftools
```

webUIは起動するが、ずっつモデルのところがクルクルしたまま
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54593/ca697e72-fb5c-f810-120b-acc073a34d82.png)

xformersじゃないやつで起動させよう
webui-user.shを以下に変更

```bash
#export COMMANDLINE_ARGS="--xformers"
export COMMANDLINE_ARGS="--medvram-sdxl --no-half-vae --opt-sdp-attention"

# install command for torch
#export TORCH_COMMAND="pip install torch==1.12.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113"
export TORCH_COMMAND="pip install torch==2.1.2+cu121 --extra-index-url https://download.pytorch.org/whl/cu121"
```

で、PC自体再起動！！！！！！

そのあとUbuntuたちあげて

 ```bash
 pythonのアクティベートして
 $ cd stable-diffusion-webui/
 $ source sd-env/bin/activate
 $ ./webui.sh
 ```

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54593/ca33e250-218a-27c5-3749-c117401a0bf1.png)

ひとまず動いた…
あとは、モデルを探したりすればいいのか。

モデルの設定方法とかは別途またやろう…
何したら動いたのかも、まとめよう…いつか…

pytho3.11で作るの試す前にxformersじゃないほうの設定入れて、PC再起動したらその時点で動いたかもしれない。
誰かに試してもらいたいが、ううむ。

## wsl-openをインストール

wsl2上で動かしてるため、ディレクトリ開くコマンドが動かない。
よって以下のシェルをインストール

```bash
sudo wget -O /usr/local/bin/wsl-open https://raw.githubusercontent.com/4U6U57/wsl-open/master/wsl-open.sh
sudo chmod +x /usr/local/bin/wsl-open
sudo ln -s /usr/local/bin/wsl-open /usr/bin/wsl-open
```

これで精製した画像がエクスぽローラーで開ける！