🏇

Cloudflare Workers AI で SDXL 使ってみた

2023/12/14に公開

tl;dr

  • GPU 用意しなくていいのは嬉しい
  • 別に生成は速くない (15秒くらい)
  • 使えるパラメーターが少ない (現状 プロンプトとステップ数だけ)
  • 使えるモデルも少ない (現状 SDXL base 1.0 のみ)

デモ: https://edge-sdxl.p1atdev.workers.dev/imagine

はじめに

Cloudflare Workers AI という機能が少し前からパブリックベータで公開されていました。

https://developers.cloudflare.com/workers-ai/

今までは Llama2 と Whisper くらいしかなかった記憶があったのですが、いつのまにか SDXL が追加されていたので使ってみました。

使う

ほぼドキュメント通りですが、今回は Hono を使いました。

プロジェクト作成

pnpm create hono my-app
cd my-app
pnpm i

wrangler.toml 追記

wrangler.toml
name = "my-app"
compatibility_date = "2023-01-01"

# これ
[ai]
binding = "AI"

src/index.ts を編集

src/index.ts
import { Ai } from "@cloudflare/ai";
import { Hono } from "hono";

type Bindings = {
	AI: object;
};

// https://developers.cloudflare.com/workers-ai/models/text-to-image/#available-embedding-models
const SDXL_MODEL_NAME = "@cf/stabilityai/stable-diffusion-xl-base-1.0";

const app = new Hono<{ Bindings: Bindings }>();

app.get("/", async (c) => {
    const ai = new Ai(c.env.AI);

    const inputs = {
        prompt: "an astronaut riding a horse",
        // num_steps: 20,
    };

    const image: Uint8Array = await ai.run(SDXL_MODEL_NAME, inputs);

    return c.newResponse(image, {
        headers: {
            "content-type": "image/png",
        },
    });
})

export default app

package.json も修正

package.json
{
  "scripts": {
    "dev": "wrangler dev src/index.tsx --remote", // --remote を追加する
    "deploy": "wrangler deploy --minify src/index.tsx"
  },
  ... 略
}

そしたら

pnpm dev

で、http://localhost:8787 で起動するのでアクセスすると、15秒くらい待たされたあとに馬に乗った宇宙飛行士の画像が表示されます。

An astronaut riding a horse

これだけです。

生成時のパラメータの補足

    const inputs = {
        prompt: "an astronaut riding a horse",
        // num_steps: 20,
    };

で生成パラメータを指定していますが、現状(2023/12/14)指定できるのは promptnum_steps のみです。num_steps は最大 20 までの整数を指定できます。[1]

ネガティブプロンプトはおろか、画像のサイズすら指定できないので 1024x1024 の正方形で生成されます。

また、シードも固定なので同じプロンプトだと同じ画像が生成されます。

おまけ

これだと全く同じ画像を生成するために時間と GPU を消費して環境に悪いので、まったく同じプロンプトの場合は KV にキャッシュするようにしてみました。同じプロンプトでの二回目以降の画像表示はちょっと速いです。

ここから遊べます。

https://edge-sdxl.p1atdev.workers.dev/imagine

レポジトリはこちら。

https://github.com/p1atdev/edge-sdxl

感想

今後のアップデートに期待。(特に任意のHuggingFaceのモデルが使えるようになったり、指定できるパラメータが増えたり、 LCM とかで高速画像生成できるようになったりしたら楽しそう)

追記 (2023/12/15)

HuggingFaceと組んでるっぽいので、将来的にいろんなモデルが使えるようになりそう。

https://blog.cloudflare.com/ja-jp/workers-ai-ja-jp/

脚注
  1. 詳細: https://developers.cloudflare.com/workers-ai/models/text-to-image/#input ↩︎

GitHubで編集を提案

Discussion