【クラウド初心者】AWSを用いてStreamDiffusionをM2 Macbook Airで動かそうとした話

## 【目標】AWSを用いてStreamDiffusionをM2 Macbook Airで動かす
（AWSどころかクラウドサービス触ったことないのでビビりながらやってます...）

### AWSの登録
1. [AWS](https://aws.amazon.com/jp/)に登録する。英語表記の住所の書き方→https://kimini.jp
2. リージョンをとりあえず大阪に変更。[^1]
    - g4dn.xlargeのスポットインスタンス料金（Linux/UNIX）が東京よりも安かった。[^2][^3]
    - ちなみにスポットインスタンスとは余剰計算資源を安価で使用できるサービス。[^4][^5]

[^1]: https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html より
[^2]: https://aws.amazon.com/jp/ec2/spot/pricing/ より
[^3]: https://aws.amazon.com/jp/ec2/spot/instance-advisor/ より
[^4]: https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-spot-instances.html より
[^5]: https://qiita.com/tonishy/items/fc226da30f6dbb845077 より

<details><summary>大阪と東京のスポットインスタンス料金差</summary>

**大阪料金**
![](https://storage.googleapis.com/zenn-user-upload/0eb577b2a418-20240104.png)
**東京料金**
![](https://storage.googleapis.com/zenn-user-upload/198a840299ff-20240104.png)

</details>

3. 初めましての場合はSpot Instance クォータを引き上げる必要があるようだ。
    - 寝て待つ。
    - 起きたらダメですと返事が来た。とりあえず使用理由を返信して再検討を期待する。寝て待つ。
    - 5日経っても音沙汰がなかったので、チャットで催促したら引き上げてくれた。

<details><summary>Spot Instance クォータの引き上げ前後</summary>

**申請前**
![](https://storage.googleapis.com/zenn-user-upload/4cbca31f1d78-20240104.png)
**申請後**
![](https://storage.googleapis.com/zenn-user-upload/dde6126cbd75-20240111.png)

</details>

### AWSのインスタンスを立ち上げから接続まで
1. VPCの作成
https://dev.classmethod.jp/articles/vpc-beginner-2023/
2. セキュリティグループの作成
https://kacfg.com/ec2-amazon-linux/
3. インスタンスの立ち上げ
4. SSHでインスタンスに接続

<details><summary>サンプルコード</summary>

![](https://storage.googleapis.com/zenn-user-upload/6804027b720d-20240121.png)

</details>

<details><summary>インスタンスの立ち上げ</summary>

![](https://storage.googleapis.com/zenn-user-upload/959fc6fa4d0b-20240121.png)
![](https://storage.googleapis.com/zenn-user-upload/17c4d21b62f0-20240121.png)
![](https://storage.googleapis.com/zenn-user-upload/7dce1504a685-20240121.png)
![](https://storage.googleapis.com/zenn-user-upload/835dfa1e18c7-20240121.png)

</details>

<details><summary>SSHでインスタンスに接続</summary>

![](https://storage.googleapis.com/zenn-user-upload/066e66780a23-20240121.png)

</details>

**↓↓↓  接続後  ↓↓↓**
![](https://storage.googleapis.com/zenn-user-upload/28fb38ff61b2-20240121.png)

### StreamDiffusionの下準備

  1. お約束
```
sudo apt update
sudp apt upgrade
```
変な画面が出るけど、わからないのでEnterキーをビターン！
<details><summary>変な画面</summary>

![](https://storage.googleapis.com/zenn-user-upload/65745d78df24-20240121.png)

</details>

  2. CUDA 12.1のインストール

<details><summary>GPU, CPUアーキテクチャおよびOSの事前確認</summary>

```
lspci | grep -i nvidia
uname -m
cat /etc/issue
```

</details>

↓NVIDIAの公式から、自分の環境に合ったCUDA 12.1をインストールする↓
https://developer.nvidia.com/cuda-12-1-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local

<details><summary>インストール後の確認</summary>

```
nvidia-smi
```

</details>

  3. python3.10系のインストール

```
sudo apt install -y python3.10 python3.10-venv
```

<details><summary>インストール後の確認</summary>

```
python3 -V
```

</details>

  4. 新しいnodejs, npmのインストール

```
sudo apt install -y nodejs npm
sudo npm install n -g
sudo n lts
sudo reboot
```

<details><summary>インストール後の確認</summary>

```
node -v
```

</details>

  5. pnpmのインストール
```
sudo npm install -g pnpm
```

### [StreamDiffusion](https://github.com/cumulo-autumn/StreamDiffusion/tree/main)のインストール

```
git clone https://github.com/cumulo-autumn/StreamDiffusion.git
cd StreamDiffusion/
python3 -m venv .venv
source .venv/bin/activate
pip3 install torch==2.1.0 torchvision==0.16.0 xformers --index-url https://download.pytorch.org/whl/cu121
pip install git+https://github.com/cumulo-autumn/StreamDiffusion.git@main#egg=streamdiffusion[tensorrt]
python3 -m streamdiffusion.tools.install-tensorrt
```

**満を持して[real-txt2imgのデモ](https://github.com/cumulo-autumn/StreamDiffusion/tree/main/demo/realtime-txt2img)を動かしてみる**
```
pip install -r requirements.txt
cd frontend
pnpm i
pnpm run build
cd ..
python3 main.py
```
**お、動くか？？？**
![](https://storage.googleapis.com/zenn-user-upload/9a8aa6faeb4e-20240121.png)

**ふーん（憤怒）**
ストレージ30Gじゃ足りなかったか...
![](https://storage.googleapis.com/zenn-user-upload/e545a29262fb-20240121.png)

## 【失敗編】M2 Macbook AirにStreamDiffusionをローカルで入れようとした

### とりあえず[公式のREADME.md](https://github.com/cumulo-autumn/StreamDiffusion)を読んで、Installationをやっていく

1. StreamDiffusionをGitHubからcloneする
```zsh
git clone https://github.com/cumulo-autumn/StreamDiffusion.git
```
2. pyenvをインストールする
```zsh
brew install pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
```
3. pyenvからpython3.10.13をインストールする
```zsh
pyenv install 3.10.13
```
4. StreamDiffusionのディレクトリに移動し、python3.10をデフォルトにする
```zsh
cd StreamDiffusion
pyenv local 3.10.13
```
5. 仮想環境を作成する
```zsh
python -m venv .venv
source .venv/bin/activate
```
6. CUDA 11.8/12.1対応のPyTorchをインストールする　→　NVIDIAのGPUが搭載されていないので終わり

それはそうだった。。。