Labmda Cloudを利用してstable-diffusion-3.5-largeを動かす

## 目的

[stable-diffusion-3.5-large](https://huggingface.co/stabilityai/stable-diffusion-3.5-large)を動かそうと思います。  
このモデルのサイズは16.5GBあり、動かせるGPUを購入しようとコストが嵩んでしまい少し試してみたいというレベルでは手が出しにくいです。
また、Google Colabの無料版でもVRAMを溢れてしまいました。


そこで、[Lambda Cloud](https://lambdalabs.com/)を利用して、低コストで動かしたいと思います。

## Hugging Faceの準備

stable-diffusion-3.5-largeは[Stability Community License](https://stability.ai/community-license-agreement)で公開されています。
このライセンスは、 年間収益が100万ドル（または現地通貨換算）未満の個人または組織に対して、その収益源にかかわらず、コア・モデルの研究、非商用、および商用利用を許可しています。

今回`diffusers`ライブラリを利用してモデルを読み込みますが、そのためには事前にHugging Faceでアカウントを作成して、ライセンスに同意、TOKENを発行する必要があります。

### ライセンスに同意

アカウントを作成、ログインして[stable-diffusion-3.5-large](https://huggingface.co/stabilityai/stable-diffusion-3.5-large)を訪れると下記の画像のような入力フォームが現れます。
必要事項を入力して同意してください。

![スクリーンショット 2025-03-08 16.16.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/6f43979e-e487-4e09-ab24-615ef51ac414.png)


### token発行

`duffusers`でHugging Faceにログインするためtokenを発行しておきます。

![スクリーンショット 2025-03-08 16.49.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/e9015e85-77c6-437f-91dc-5db8d5a8ad3d.png)

1. ユーザーのアイコン画像をクリック
2. AccessTokensをクリック
![スクリーンショット 2025-03-08 16.48.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/789e6b4c-43c4-4469-a4ae-2aaaa725fa85.png)
3. +Create New Tokenをクリック
![スクリーンショット 2025-03-08 16.48.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/4fa1ef51-20ba-4148-9375-d24ee321a7c6.png)
4. Token TypeをReadとする
![スクリーンショット 2025-03-08 16.31.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/d64e1db3-08fb-4b4b-90ca-c9f0e3b9741f.png)
5. Token Nameを任意の名前に設定
6. Create Tokenをクリック
7. 表示されたTokenを確認

後からTokenを再度表示することはできないのでわからなくならないように、メモをしておいてください。

## Lambda Cloud インスタンス作成

Lambda Cloudのアカウントを作成しておきます。

1. Launch instanceをクリック

![開始.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/b1d5a695-0ad2-45e3-802e-9f57e9f2600c.png)
2. Instance Typeを選択 -> 十分なVRAMサイズとコストを鑑みて選択。タイミングによって選べないインスタンスタイプも多いので注意
![インスタンス選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/8407797a-d790-4e11-870e-3005cb8a517f.png)
3. Regionを選択 -> 任意に選択
![リージョン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/a58710bc-29b6-4732-a240-6a264dd13bad.png)
4. Filesystemをアタッチするか選択 -> 今回は必要ないので、Don't attach a filesystemを選択
![ファイルシステム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/f2f06949-5c29-4db8-a09a-6822c2724fd3.png)
5. SSHを利用して接続する場合は、事前に公開鍵を設定しておき選択(今回は利用しない)
![ssh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/a24d6408-d52f-4344-9c62-72a74f05d751.png)
6. Licenceに同意
![ライセンス同意.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/187febd3-ed0c-4842-baf6-575c902c2659.png)

## Jupyterに接続

Launchを実行後数分間は`Booting`と表示されているので、`Running`になるまで待機します。
任意でサーバー名を設定しておくとよい。

![booting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/41b3b630-7b78-4c78-9ebd-fc0747f92a28.png)

`Running`になったら、CLOUD IDEの`Launch`をクリックしてください。

![Running.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/9c5cbc79-1f8a-4799-af6f-8f071fe91025.png)

Jupyter Notebookに接続ができます。

![Jupyter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/13de9db2-6da3-4c62-9483-643496c91f3c.png)

## モデルの実行

ノートブックで以下のコードを順次実行していきます。

```python:必要なライブラリをインストール
!pip install -U diffusers
!pip install torch transformers huggingface_hub ipywidgets accelerate sentencepiece
```

```python:Hugging Faceにログイン
from huggingface_hub import login
login(token="【先ほどメモしておいたHugging FaceのTOKENを設定】")
```

```python:モデルの読み込み
import torch
from diffusers import StableDiffusion3Pipeline

pipe = StableDiffusion3Pipeline.from_pretrained("stabilityai/stable-diffusion-3.5-large", torch_dtype=torch.float16)
pipe = pipe.to("cuda")
```

```python:画像の生成
image = pipe(
    "A capybara holding a sign that reads Hello World",
    num_inference_steps=28,
    guidance_scale=3.5,
).images[0]
image.show()
image.save("capybara.png")
```

## 実行結果

生成された画像
![実行結果3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/649ed58b-bff1-4a48-89d1-c1f794ebebc4.png)

`%%time`をセルの１行目に設定すると実行時間を計測できます。
14秒ほどで画像が生成できました。
![実行結果1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/590f3df9-4b42-41da-9f2a-7ced9639c51c.png)
![実行結果2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/2ed4ebbc-bedf-4d16-a984-c1627f81fe4d.png)

## Lambda CloudのInstanceを削除

1. 削除するインスタンスの右端をクリック
![削除1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/5107df98-bd8c-413a-860b-cb78eb869eb4.png)
2. Terminateをクリック
3. `erase data on instance`を入力してTerminate instancesをクリック
![削除2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/a5c76b65-b46a-485a-a09a-6925669b79d0.png)
4. `Terminating`が終了して、instanceの表示がなくなることを確認![削除4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/29f6bacd-47d3-4155-a96c-255380fc4336.png)

## 料金確認

Usageタブを開くと時期とインスタンス毎にコストを確認することができます。
今回は試行錯誤したので40分ほど約110円かかりましたが、実行するだけでしたら15分ぐらい50円でLaunchからTerminateができると思います。

![コスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/b6bbac86-33b8-4c64-8511-2d6be375c731.png)