🤭

Runpod でなるべく安価に Stable Diffusion Web UI 実行環境を作る

に公開

何ができるか

ちょい強い GPU を使った Stable Diffusion Web UI 環境を比較的安価に作れる



※Billing は 2,3 時間ぐらいずつ使った参考値

Stable Diffusion WebUI については作成上限などの観点から自前で用意するメリットが多くあります。しかし自前で実行環境を用意するとなると、5万~10万ぐらいの GPU を用意する必要があり、かなりコスト面でハードルが高いです。
そこで、使いたい時だけサーバー建てて Stable Diffusion WebUI 実行できるようにして、
極力低コストで使いたいとみなさん思ってることでしょう。

そこで、私が今回目を付けたのが Runpod というクラウドサービスです ❗

選定理由は、おおよそ使い方簡単そう+AWS や GCP に比べて安価そう、という点です。
最安を狙うなら vast.io が良さそうですが、個人的にはダッシュボードとかが Runpod の方が分かりやすかったのと、Stable Diffusion WebUI 用のテンプレートの有無などから Runpod に軍配が上がりました 💪 🚩

※(追記) vast.ai の方は "stable" で検索してヒットしなかったのでないかと思ってましたが "SD WebUI Forge" というように略称でありました。ただそれを差し引いても UI の分かりやすさは明らかに Runpod の方が良いです。

開始利用まで

※アカウント作成や支払い設定等のくだりは省略します。Github アカウントや Google アカウントを所持していればすんなり済むと思います。

  • テンプレート選択
  • pod のスペック選択
  • インスタンスタイプ選択
  • デプロイ(待つだけ)
  • 建てたpod に使いたいモデルを転送(option...実質必須?)

テンプレート選択

Runpod では基本的に CPU/GPUスペックやストレージのみ選択して実行環境を建てることができますが Runpod 側で用意されているテンプレートを用いることで特定の用途の実行環境を手軽に用意することができます 😋

トップページのサイドメニュー の 「Explorer」を選択して、Stable Diffusion WebUI 用のテンプレートが Official カテゴリーにあるので今回はこれを選択しましょう。

何やら注意文っぽいのが出てきますが、

  • encrypted volume だとちゃんと動かないよ
  • Stable diffusion を簡単に動かせるように用意したけど Runpod は Stable Diffusion の専門家ではないから詳しいことは自分で調べてね
  • 起動するまで待たないと 502 の画面出すようにしてあるよ
  • カスタムしたかったら relauncher.py いじってね
  • 自分で選んだ model 使いたかったら runpodctl でモデル送るか Google Drive とかに置いて pod内からダウンロードしてね

みたいな感じらしいです。まぁ一番重要なのは model の扱いの部分ですかね🤔?
(最初読み違えて encrypted volume で pod 作っちゃいましたが特に不便なく動かせました)

pod のスペック選択

↑の画面で右上の Deploy ボタンを押すとスペック選ぶ画面になります。
(ここで、支払設定を済ませていない場合は設定するよう促されると思います)

ちなみにここで言う Pod というのはいわゆるリモートサーバーと思ってもらえれば良いと思います。
ssh で接続したり停止・再起動したりできます。

また、スペック選択後下の方にスクロールするとインスタンスタイプを選択するメニューがあります。極力安くしたかったら 「Spot」を選択するのが良いですが、リソース不足で pod 建てられないことがあります(AWSの Spot Instance と似た感じ)

スペックに関しては当然ながら高いほど良いので、いったん下から試していって自分の使い方で許容範囲なスペックを探すことになるんじゃないかと思いますが、筆者の経験上は RTX4000 Ada 以上を選んでおけば Stable Diffusion WebUI 利用にはおおよそ耐えうるのではと思います。
※ここは選ぶ model とか生成する画像の解像度なんかに依存すると思うので何とも言えませんが

また、Stable Diffusion WebUI 利用であれば十中八九使わないので 「Start Jupyter Notebook」 はチェック外しちゃいましょう。多分起動するまでの時間が少しでも早くなる...はず🤔

Deploy (結構かかるので待ちましょう)

Deploy 後はサイドメニューの「Pods」から起動している pod 一覧や接続設定などが確認できるようになります。

ここで、 Connect をクリックするし、 HTTP Service -> :3001 が Ready になっていると、
そのパネルをクリックすると Stable Diffusion WebUI の画面を開くことができます 🎊🎉

※(model 設定済の画面なので上の方の model 選択部分は少し初期画面と違います)

使いたい model を pod に転送

テンプレート選択時の説明にあったように、Stable Diffusion WebUI のデフォルト model 以外を使いたい場合は自分で model を転送・または pod 内でダウンロードする必要があります。
model のダウンロードや設定に関しては色々記事あるのでそれを参考にしてください。

🔴 基本的な注意点としては、model x VAE の相性が悪いと正常に動かない場合があるという点です

で、model 配置の方法のうち runpodctl 利用では少し詰まる部分があったので解説書いておきます。

(おまけ) runpodctl で pod とファイルのやりとり

公式の推奨する runpodclt による方法では、若干詰まる部分があったので残しておきます。

平たく言うと、「シェル 2窓して送信・受信同時にコマンド実行しないといけない」です。
正確には

  1. 送信側で runpodctl send {file_path} を実行
  2. しばらくすると runpodctl receive {one-time-code} が出力される
  3. 送信側のコマンドはそのままにして、シェルを別窓で開き pod に ssh接続
  4. pod 側で 2. のコマンドを実行
  5. ダウンロード完了したら配置したい場所にファイルを移動
  6. 送信側のシェルはここまで完了したら Ctrl+C で抜けれる

です。最初は runpodctl send コマンド実行のオプションに pod の指定などが無いので戸惑ったのですが、上記手順のように送信側)(画像で言うと左側)のコマンドは実行したままにして受信側(画像で言うと右側)のコマンドを実行するタイプのようでした。(エラー文なんかを見ると内部では croc というのを使ってそうです。

この仕様、この記事見るまでは全然気づかなかった...orz
https://www.answeroverflow.com/m/1343640566562427004
あと公式の解説動画ちゃんと見てたら気づけたかもです 😇
https://youtu.be/QN1vdGhjcRc?si=CBqjm_M59R0ekodn&t=2585

Discussion