Cloudflare Workers AI で SDXL 使ってみた
tl;dr
- GPU 用意しなくていいのは嬉しい
- 別に生成は速くない (15秒くらい)
- 使えるパラメーターが少ない (現状 プロンプトとステップ数だけ)
- 使えるモデルも少ない (現状 SDXL base 1.0 のみ)
デモ: https://edge-sdxl.p1atdev.workers.dev/imagine
はじめに
Cloudflare Workers AI という機能が少し前からパブリックベータで公開されていました。
今までは Llama2 と Whisper くらいしかなかった記憶があったのですが、いつのまにか SDXL が追加されていたので使ってみました。
使う
ほぼドキュメント通りですが、今回は Hono を使いました。
プロジェクト作成
pnpm create hono my-app
cd my-app
pnpm i
wrangler.toml
追記
name = "my-app"
compatibility_date = "2023-01-01"
# これ
[ai]
binding = "AI"
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
も修正
{
"scripts": {
"dev": "wrangler dev src/index.tsx --remote", // --remote を追加する
"deploy": "wrangler deploy --minify src/index.tsx"
},
... 略
}
そしたら
pnpm dev
で、http://localhost:8787
で起動するのでアクセスすると、15秒くらい待たされたあとに馬に乗った宇宙飛行士の画像が表示されます。
これだけです。
生成時のパラメータの補足
const inputs = {
prompt: "an astronaut riding a horse",
// num_steps: 20,
};
で生成パラメータを指定していますが、現状(2023/12/14)指定できるのは prompt
と num_steps
のみです。num_steps
は最大 20
までの整数を指定できます。[1]
ネガティブプロンプトはおろか、画像のサイズすら指定できないので 1024x1024 の正方形で生成されます。
また、シードも固定なので同じプロンプトだと同じ画像が生成されます。
おまけ
これだと全く同じ画像を生成するために時間と GPU を消費して環境に悪いので、まったく同じプロンプトの場合は KV にキャッシュするようにしてみました。同じプロンプトでの二回目以降の画像表示はちょっと速いです。
ここから遊べます。
レポジトリはこちら。
感想
今後のアップデートに期待。(特に任意のHuggingFaceのモデルが使えるようになったり、指定できるパラメータが増えたり、 LCM とかで高速画像生成できるようになったりしたら楽しそう)
追記 (2023/12/15)
HuggingFaceと組んでるっぽいので、将来的にいろんなモデルが使えるようになりそう。
Discussion