Closed10

Stable Diffusion APIを開発する調査メモ

silverbirdersilverbirder

要件

Stable Diffusionは、画像生成するため、GPU が必要

With its 860M UNet and 123M text encoder, the model is relatively lightweight and runs on a GPU with at least 10GB VRAM

https://github.com/CompVis/stable-diffusion

API化するシステム設計案

Stable DiffusionをAPI化するためのシステム設計案は、次のものです。
Docker化は、stable-diffusion-docker が良さそうです。

  1. Google Colaboratory で API を提供
  2. Stable Diffusion を VMインスタンス(GCE with GPU)で 起動させ、APIを提供
  3. Stable Diffusion を Docker化し、Cloud Run for Anthos(GPU based k8s)で 起動させ、APIを提供
  4. Stable Diffusion を Docker化し、Cloud Batchで実行させる。API (なんでも) → Cloud Workflow → Cloud Batch で連動させる
  5. stability.ai APIを使う

※ 筆者は、GCPを普段よく使います。

結論から言うと、コスト面から 5番を選びます。元々は、4番を構想していたのですが、コストや起動時間が長くて断念しました。

silverbirdersilverbirder

Google Colaboratory で API を提供

Google Colaboratoryは、無料でGPU を使うことができます。
そのため、Stable Diffusion を動かすことができます。具体的な例は、こちら です。

Google Colaboratory 自体は、調べた内容をノートのようにまとめておくような用途で、私は使っていました。それとは別に、WebアプリやAPIとして使うことができます。

ただし、制約として、Google Colaboratory の 最大使用時間が12時間 になります。
愚直な回避として、例えば、(何でも良いですけど) Virtual Desktop でGoogle Colaboratory をブラウザから開いておいて、定期的に Google Colaboratory を開くブラウザ操作を組めば、やれないことは、ないかなと思います。

そこまでして、やりたいか?と思いますし、本来のGoogle Colaboratoryの使い方とは違うような気がしてきて、うーんってなります。

silverbirdersilverbirder

GCP と GPU

GCPで GPU を使うには、GCE で GPU を選ぶようです。

https://cloud.google.com/compute/docs/gpus?hl=ja

そのため、次のような選択肢があります。

  1. GCE で直接使う
  2. GCE テンプレート で GPU を定義して、GCEテンプレートを使うサービス を使う
  3. Cloud Run For Anthos で GCE インスタンス (GPU) を使う
silverbirdersilverbirder

Stable Diffusion を VMインスタンス(GCE with GPU)で 起動させ、APIを提供

雑にGPUを使ったGCEインスタンスを毎日起動していたとして、費用を調べてみます。

https://cloud.google.com/products/calculator#id=da70f51f-06ba-4193-b591-2bdf23e814d0

Total Estimated Cost: USD 2,039.05 per 1 month

ざっと月に2千ドルぐらいかかります。もちろん、最適化してコスト削減できると思いますが、GPU ってのが高価 なので、月数ドルとかには落とせないかなと思います。

https://ascii.jp/elem/000/004/103/4103337/amp/

こちらの記事で、GCPでStable Diffusionを動かしていると書かれていて、お金かけているのかな〜とエスパーしてしまいます。

silverbirdersilverbirder

Stable Diffusion を Docker化し、Cloud Run for Anthos(GPU based k8s)で 起動させ、APIを提供

GKE を使う時点で、お手軽さがないので、諦めます...。

silverbirdersilverbirder

Stable Diffusion を Docker化し、Cloud Batchで実行させる。API (なんでも) → Cloud Workflow → Cloud Batch で連動させる

一番、最初に考えていた設計です。

Stable Diffusion で画像処理するのはAPIサービスとは別に分けたいと思っていました。
そのため、Cloud Batch というバッチ処理ができるサービスでStable Diffusionを動かしたいです。
Cloud Batch を起動させるトリガーは、今の所 Cloud API しかありません。Cloud APIと手軽に連携できるサービスは、Cloud Workflow があります。Cloud Workflowは、PubSubで連携できます。

システム設計としては、

API (Cloud RunとかCloud Functionとかなんでも)
↓
PubSub
↓
Cloud Workflows
↓
Cloud Batch 

の流れで繋げれます。

試してみた

cloud batch を submit するためのテンプレートファイルを、次のもの(stable-diffusion-template.json)にします。

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "container": {
              "imageUri": "gcr.io/<GCP_PROJECT>/<Stable Diffusion Docker Image>",
              "commands": ["<Prompt>"]
            }
          }
        ]
      },
      "taskCount": 1,
      "parallelism": 1
    }
  ],
  "allocationPolicy": {
    "instances": [
      {
        "instanceTemplate": "<GCE TEMPLATE NAME WITH GPU>" 
      }
    ]
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}
$ gcloud beta batch jobs submit <job_name> \
  --location us-central1 \
  --config stable-diffusion-template.json

で、submitすると、、、30分以上実行されませんでした ...

Dockerイメージサイズが、11Gだったのが、よくなかったのかな ...。諦めました。

silverbirdersilverbirder

stability.ai APIを使う

beta.dreamstudio.ai というサイトで、Stable Diffusion を使っています。このサイトでは、課金制でAPIも提供されています。

内部のソースコードを見ると、gRPCで通信しているようです。protoファイルと、エンドポイントが分かるので、javascriptのsdkも書けそうです。(誰か作って)

気になる課金ですが、£10 で 1kの生成ができるようです。

If you are interested in using the API at scale, we provide the ability to buy generations at bigger volumes. For more information, refer to our Developer Documentation  

- £10
  - 1k generations
- £100
  - 10k generations
- £500
  - 50k generations
- £1000
  - 100k generations

https://beta.dreamstudio.ai/membership

£10は、日本円で 1,621.36 円 ぐらいのようです (執筆時点で)。1kの生成とは、単純な生成回数ではなく、パラメータを色々いじって、生成のポイント数値が増減します。https://beta.dreamstudio.ai/membership を見ると分かると思います。(たぶん)

どれぐらい使うかにも寄るんですが、£10 を月一回購入するぐらいで十分なら、SDKを使うで良さそうです。

このスクラップは2022/08/30にクローズされました