Stable Diffusion WebUIの実行環境をGPUSOROBANに構築するまで

## はじめに
今更ながら生成AIでの画像出力を試してみたい！と思い立っては見たものの、環境構築で苦労したのでその記録。
（注）それなりにlinuxを触ったことがある人を対象としていますのでご了承ください。また、依存関係等が壊れる可能性もあるので理解の上お読みください。

この記事のポイントは以下の2点。
- GPUクラウドサービス"GPUSOROBAN"上にStable Diffusion WebUIをインストール
- OSが非常に古いUbuntu 18.04しか選択できず、特にPython3.10.6のインストール・実行で沼った

## GPUSOROBAN上に仮想環境を構築
公式ページにある以下の説明に従って手順11まで進める。
https://soroban.highreso.jp/article/article-019
なぜかOSがUbuntu 18.04のみ、インストールパッケージも最小限のものしか選べず仕方なくこれを選んで進めることに。これがすべての沼の始まり...（OSがUbuntu 22.04を選べればこんなに苦労はしなかったと思います。）

＜一点のみ注意＞
手順11"アクセスサーバー用秘密鍵の設置"で.sshのフォルダを作るときのパスを
```
Windowsの場合
[C:\Users\sample_user.ssh]
```
と書いてあるが正しくは、
```
Windowsの場合
[C:\Users\sample_user\.ssh]
```

## GPUSOROBAN上の仮想環境へアクセス
ここで問題発生。手順12に記載のVSCode上のsshはUbuntu 18.04への接続には対応していないことが発覚。このため、cmdプロンプトでsshを使ってアクセスすることにした。
（VSCodeはインストール不要と思われるが、VSCodeとRemote SSHのインストールまでは私は実施した。cmdプロンプトでのssh接続におけるこの影響は未確認）

cmdプロンプトで接続する方法は公式ページの記事に記載のある通り、以下の記載の手順8に従って実施。
https://soroban.highreso.jp/article/article-001

これで仮想環境へはログインできた。

## GPUSOROBAN上の仮想環境にpython3.10.6をインストール
デフォルトで入っているpythonは3.6.9でStable Diffusion WebUIの推奨のversionとは違う。そこで、python3.10.6を入れたいのだがaptではインストールできず、リポジトリを追加してもなんだかうまくいかない。ということでソースをダウンロードしてきてmakeでコンパイル・インストールすることにした。
この前後で、aptでインストール・アンインストールをいろいろやったのでどれが本当に必要な手順か不明確であること、ご容赦お願いします。

まずは公式の手順15の記載に従って、以下を実施。
```
sudo apt update
sudo apt install -y  wget git python3 python3-venv libglib2.0-0
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
```
これだけだとpython3のバージョンは3.6と古いものになる。
そこで3.10.6を手動で入れるが、あらかじめlzmaというパッケージを入れた上でコンパイルをしないと、Stable Diffusion WebUIを起動時に
```
ModuleNotFoundError: No module named '_lzma'
```
というような表示が出て止まってしまう。

結果、おそらく下記手順でpython3.10.6をコンパイル・インストールすれば大丈夫だったと思われる。
```
sudo apt-get install -y xz-utils #これはいらないかも。
sudo apt-get install lzma
sudo apt-get install liblzma-dev
sudo apt-get install libbz2-dev

sudo apt update && sudo apt upgrade
sudo apt install wget build-essential libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev
wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz
tar xzf Python-3.10.6.tgz
cd Python-3.10.6
./configure --enable-optimizations
make altinstall #これだと途中でpermissionがないと怒られる
sudo make altinstall #仕方ないので怖いけどsuで入れる
```
最後suでインストールしたことに対するwarningが出るが、正常終了していればOK。

上の手順でパッケージが見つからない場合、以下の手順でリポジトリの追加が必要かも（いろいろやっている中でこのリポジトリを追加した状態で作業をしていた）。
```
sudo apt update && sudo apt upgrade -y
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa
```

参考にしたサイトは以下。
https://zoomadmin.com/HowToInstall/UbuntuPackage/xz-utils
https://stackoverflow.com/questions/59690698/modulenotfounderror-no-module-named-lzma-when-building-python-using-pyenv-on
https://alitech.io/blog/how-to-install-python-3-10-ubuntu/

## Stable Diffusion WebUI関連の設定
公式ページの手順15に従って、stable-diffusion-webuiのディレクトリ以下で各種設定を行う。
```
cd stable-diffusion-webui
nano webui-user.sh
```

以下を追記。2つ目はなくてもいい。
```
python_cmd="python3.10"
export COMMANDLINE_ARGS="--autolaunch --xformers"
export TORCH_COMMAND="pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118 xformers==0.0.22.post7"
```

## Stable Diffusion WebUIの実行
あとは公式ページの手順に従って、
```
chmod 755 webui-user.sh
bash webui-user.sh
bash webui.sh
```
これでWebUIサーバ(?)が起動した感じのcmdプロンプトの画面になる。
ローカルPCのブラウザで
```
http://127.0.0.1:7860/
```
と入力するとStable Diffusion WebUIが立ち上がるはず！！！

## Stable Diffusion WebUIで画像生成
呪文はとりあえずcat wearing sunglassesを使ってみた。
初めてサーバー上で生成した画像はこちら。この時はxformersは使っていない。
この数時間前に人生初生成AIでの画像出力をノートPCで実施したが、このときは生成に10分ぐらいかかった。ところが今回は数秒......GPUクラウドサービスすげー

![00000-1580457543.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/369152/b96b0c21-5d84-ff29-7f9e-36981a8cc1c6.png)

_____fin