高火力 DOK+Jupyter NotebookでStable Diffusion WebUIをngrokで接続する

## はじめに
Stable Diffusion WebUI(AUTOMATIC1111)を高火力 DOKのJupyter Notebook上で起動し、ngrokを使って接続できるようにするメモです。

今回は高火力 DOKを使用します。
高火力 DOKは、さくらインターネットが提供するコンテナ型GPUサービスです。
https://www.sakura.ad.jp/koukaryoku-dok/

## 前提
- 高火力 DOKのアカウントを持っている
    - [サービスを使い始めるには](https://manual.sakura.ad.jp/cloud/koukaryoku-container/getting-started.html#id11)
- ngrokのアカウントを持っている(無料プラン可)
  - https://ngrok.com/


## ngrokのトークンを取得
ngrokを利用するには、トークンが必要です。以下の手順で取得します。

https://dashboard.ngrok.com/ にアクセスし、サイドバーのYour Authtokenを選択します。
中央にあるYour Authtokenをメモしておきましょう。
![ngrok token.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/e1e53444-5485-62bb-c520-71a3fa8fab18.png)

## 高火力DOK
### Jupyter Notebookの起動

[外部からの接続方法](https://manual.sakura.ad.jp/cloud/koukaryoku-container/listening-port.html)を参考にJupyter Notebookを起動し外部から接続できるようにします。

高火力 DOKのダッシュボードにアクセスし、
サイドバーから「タスク」を選択したのち「新規作成」を選択します。
![dok tasks.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/0066efea-cb4f-6aa0-81fc-45c683fa081e.png)

タスク作成画面では、以下の情報を入力します。
| 項目 | 設定 |
|:-----------|:------------|
| イメージ    | quay.io/jupyter/pytorch-notebook:cuda12-python-3.11|
| HTTPポート | 8888        |
| HTTPパス   | /          |
| 環境変数   | JUPYTER_TOKEN:任意の文字列|

![dok new task.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/4b4883dc-f8bf-b72d-ae20-497e00efd775.png)

作成ボタンを押し、Jupyter Notebookが起動するまで待ちます。

タスク詳細画面の「HTTP URI」をコピーして、ブラウザーのアドレスバーに
`(コピーしたHTTP URI)/?token=(JUPYTER_TOKENで指定した文字列)` を入力してください。

![dok uri.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/3fa6d801-de40-3c78-0779-4fa3c4f8e6cb.png)

Jupyter NotebookにアクセスできたらNotebookの`Python 3(ipykernel)`を選択します
![dok notebook.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/2f592554-3fde-a050-15f7-8c47b8cb4f3f.png)

### Stable Diffusion WebUIの起動
以下コードを順番に実行します。
- stable-diffusion-webuiをgitからDL
```
!git clone --depth 1 https://github.com/AUTOMATIC1111/stable-diffusion-webui
```

- ディレクトリの移動と成果物保存場所の変更
```
%cd stable-diffusion-webui
!ln -vs /opt/artifact ./outputs
```

![スクリーンショット 2025-02-06 22.52.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/520abfce-ff1e-a819-63dd-d0fabd3d05f3.png)

- stable-diffusion-webuiを起動
```
!COMMANDLINE_ARGS="--ngrok (ngrokで取得したトークン) --ngrok-region jp" REQS_FILE="requirements_versions.txt" python launch.py
```
起動すると
`ngrok connected to localhost:7860! URL: https://xxxx.ngrok-free.app`
と表示されるので、URLをクリックします。
![dok ngrok.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/ea0dc875-7a85-fd10-cf5e-cd3f4477c253.png)

URLに飛んだら「Visit site」をクリックします。
![dok visit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/8697c8ef-e1fe-c43d-3df0-78cf70bfb18b.png)

Stable Diffusion WebUIが開きます Yatta!!!
![dok web ui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/6af6a35c-3c41-d936-b3c5-c4595f28624d.png)

### 終わるとき
:::note warn
停止を忘れると従量課金されていくので忘れずに停止しましょう
:::
高火力 DOKのダッシュボードにアクセスし、
サイドバーから「タスク」を選択したのち、今回使用したタスクを選択します。
![dok task select.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/fc88942b-8275-d929-9f7b-ae2a14a8e2cc.png)
タスク詳細画面から「中断」を選択します。
![dok kill.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/36c21d9b-b3f3-a27d-a2c8-5c663a7be24b.png)

### 成果物について
生成した画像などの成果物は高火力 DOKのダッシュボードからダウンロードすることもできます。(期限付き)
![dok artifact.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/8433e97d-68a1-9268-cbc5-a4ccf4c15c38.png)

## まとめ
この記事では、高火力 DOK上でJupyter Notebookとngrokを利用し、Stable Diffusion WebUIを起動する手順を説明しました。

ここまで読んでいただきありがとうございました

## 参考文献
[高火力 DOK ドキュメント](https://manual.sakura.ad.jp/cloud/manual-koukaryoku-container.html)