Amazon SageMaker Studio LabでStable Diffusion Web UI環境を構築する

# はじめに
画像生成AIであるStable Diffusion web UIをローカルではなく機械学習サービスを用いて使う際の環境構築手順のメモです。

今回はAmazon SageMaker Studio Labを使用します。
google colabはstable diffisonの場合制限がかかってしまうため、無料である程度不便なく使用できるSageMakerを採用しました。

:::note info
**Amazon SageMaker Studio Labとは**
無料の機械学習 (ML) 開発環境であり、コンピューティング、ストレージ (最大 15 GB)、セキュリティをすべて無料で提供してくれます
GPUなら1日4時間使用可能です
[参考](https://aws.amazon.com/jp/sagemaker/studio-lab/)
:::


# Amazon SageMaker Studio Labアカウントの作成

[ここ](https://studiolab.sagemaker.aws/requestAccount)からアカウント作成の申請をします。

:::note warn
申請から数日後にアカウント作成のメールが届きます。
届いたリンクからアカウントを作成します。
:::

# ngrokアカウントの作成
SageMaker上で起動したStable Diffusion Web UIにアクセスするため、ngrokを用います。

:::note
**ngrokとは**
インターネット上でローカルのサーバーやアプリケーションに一時的な公開URLを提供するツール。
:::

[ここ](https://ngrok.com/)からngrokアカウントを作成

### トークンの取得
ngrokを使用するためにトークンが必要なので取得します。
サイドバーのAuthTokensから作成します。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900278/22d5b121-27a3-e7b4-3b83-e890eac0ced3.png>

:::note alert
tokenは漏れないように注意！
:::


# Stable Diffusion Web UI環境構築
### SageMaker Studio Labにログイン
作成したアカウントでログインします。

### SageMaker Studio Labを起動
GPUを選択して`Start runtime`を押下。
起動に成功すると`Open project`が押せるようになります。

![SageMaker_launch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900278/290b463f-3520-b6de-cf50-9b39b384727e.png)

:::note warn
**起動に失敗することがある**
起動できるユーザー数？か分かりませんが一定の制限があるようです。

なんどもリトライすればいずれ起動します。
経験上5~20試行すればだいたい起動できます。

たまにログインできなくなることがありますが、少し待てばなおります。
**根気よく待ちましょう**
![error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900278/fb5505f1-2ca6-114a-79d1-07d8b1710e36.png)

:::


### Stable Diffusion Web UIのインストール
プロジェクトを開くと、Jupyter Labが起動します。
起動したら新規NoteBookを起動（dafult:Python）
![スクリーンショット 2024-10-02 20.21.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900278/b69e811c-f6b5-186a-5aec-364186ba9746.png)

インストールをしていきます。以下のコードを順に実行
上部の▶️ボタンで実行

- ルートフォルダに移動
```
%cd ..
```
`/home/studio-lab-user`に移動するはず

- stable diffusionをgitからclone
```
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
```

- ライブラリインストール(更新)
    - ディレクトリは`stable-diffusion-webui`
```
%pip install -r requirements.txt
```

- opencv-python-headlessのインストール（2024/10/7追記）
    - これを入れないと起動失敗する場合がある
    - このエラーが起きるようです
        ```
        ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
        ```
```
%pip install opencv-python-headless
```

- webUIを起動

```
%cd stable-diffusion-webui

!COMMANDLINE_ARGS="--ngrok ここにngrokのトークンを入力 --ngrok-region jp --xformers --no-half-vae" REQS_FILE="requirements.txt" python launch.py --enable-insecure-extension-access
```
起動に成功すると`https://xxxx-x-xxx-xxx-xxx.ngrok-free.app`というリンクが出力されるのでリンクを踏みます。
そうするとwebUIが開きます！🎉

![スクリーンショット 2024-10-02 20.31.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900278/b561b469-d2a7-19ed-82ca-54753fce2cb7.png)

**コマンドライン引数について**  
`--xformers`：VRAM使用量を抑えつつ、生成速度も上げる
`--no-half-vae`：VRAM使用量は増えるが黒画像発生率を低減

### 終了するとき
- Jupyter Labの停止◾️ボタンでスクリプトを停止
- SageMakerでstop runtimeを押下

:::note warn
runtimeを止め忘れると残り時間が消費されてしまうので忘れずに停止しましょう
:::

### webUIのアップデート
```
%cd stable-diffusion-webui
!git pull

# ライブラリの再インストール
%pip install -r requirements.txt
```


# おまけ
このままでも生成はできますが、モデルやLoraなどを導入することでより多彩な画像を生成できます。

civitaiやhuggingfaceなどで色々ダウンロードできます。

指定のフォルダにD&Dでも追加できますが、コマンドライン上でダウンロードもできます。

例：Anything v5
```
# anything -v5
!wget https://civitai.com/api/download/models/30163 -O ./models/Stable-diffusion/anything-v5-Prt-RE.safetensors
```