EC2にstable-diffusion-webuiをインストール

AWS EC2 に [stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui)をインストール方法です。

## AMIの選択

CUDAの実行にNVIDIAのドライバーのインストールなどが必要です。素のAmazonLinux2を使うとセットアップが非常に面倒くさいので、ドライバーインストール済みのAMIを使います。

「Deep Learning AMI GPU PyTorch 1.13.1 (Amazon Linux 2) 20230201」 を選択します。

## インスタンス

動作確認では g5.2xlarge を使ってます。GPUが搭載されたインスタンスを選択してください。
GPUが搭載されたインスタンスは非常に料金が高いので料金をよく確認して選択してください。

なお、安いインスタンスで環境を作ってから後で良いGPUを積んだインスタンスタイプに変更した方が経済的です。

## 起動後の確認

`nvidia-smi` コマンドを実行してGPUを確認する。

```bash
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.65.01    Driver Version: 515.65.01    CUDA Version: 11.7     |
|-------------------------------+----------------------+----------------------+
| 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 A10G         On   | 00000000:00:1E.0 Off |                    0 |
|  0%   35C    P0    62W / 300W |   3505MiB / 23028MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      5897      C   python3                          3503MiB |
+-----------------------------------------------------------------------------+
```

## python3.8のインストール

デフォルトではPython3.7がインストールされているが、stable-diffusion-webuiにはPython3.7では動かない依存があるため、Python3.8をインストールする。

```bash
sudo yum remove python3
sudo amazon-linux-extras enable python3.8
sudo yum install python38
cd /usr/bin/
sudo ln -s python3.8 python3
```

## zlib1.2.9のインストール (非常に危険な作業です)

zlib1.2.9が要求されるのでインストールする。
失敗するとサーバーがまるごと壊れて復旧不可能になる ___超危険___ な作業です。壊れたら困る環境では実施しないでください。

```bash
curl -L -O https://sourceforge.net/projects/libpng/files/zlib/1.2.9/zlib-1.2.9.tar.gz/download
tar zxf download
cd zlib-1.2.9/
./configure
make
sudo mv libz.so.1.2.9 /lib64/
cd /lib64/
sudo ln -s -f libz.so.1.2.9 libz.so.1
```

## stable-diffusion-webuiのインストール

stable-diffusion-webuiのインストールと実行

```bash
bash <(wget -qO- https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh)
```

下記のようなエラーが出た場合は、モデルデータをダウンロードして `models/Stable-diffusion` ディレクトリに保存する。
```
No checkpoints found. When searching for checkpoints, looked at:
```

StableDiffusion1.5のモデルデータのダウンロード。完了後に webui.sh を再度実行する。

```bash
cd /home/$(whoami)/stable-diffusion-webui/models/Stable-diffusion
wget -L https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned.safetensors
```

外部から接続する場合は、下記の環境変数を指定してから webui.sh を実行します。ただし、0.0.0.0にバインドされるので、7860ポートを外部に公開していると誰でもアクセスできしまうので注意が必要です。

```bash
export COMMANDLINE_ARGS="--listen"
```

## Apple Silliconと比べた速度

Apple M1 MaxのMacBook Proではtxt2imgで20stepの時に10秒くらいかかるのが、g5.2xlargeでは2秒強くらいで完了します。さすが早いです。