Qaynam のアイコン
Qaynamqaynam.dev

RSS

← Projects

2025 · Transformers.js · Svelte · Cloudflare Workers

Transformer Gemma 3

Transformers.js で Gemma 3 をブラウザの中で動かしてみたチャットアプリ。

サイトを開く ↗ソースコード ↗

Google の Gemma 3 に、270M という極端に小さいモデル (gemma3:270m、298MB) が出た。ここまで軽いなら、サーバー無しでブラウザーの中だけで動くのでは?と思って遊んでみたもの。

リポジトリ

仕組み

Ollama は Go で書かれたサーバーなので、そのまま wasm にはできない。代わりに Hugging Face の Transformers.js を使う。中身は ONNX Runtime で、WebGPU があればそれで、無ければ WASM (CPU) で動く。
モデルは onnx-community/gemma-3-270m-it-ONNX。ブラウザーが直接ダウンロードして Cache API に置くので、2 回目からはすぐ動く。

作ったもの

UI は Svelte 5。バンドラーも dev サーバーも Bun だけで済ませた (bun-plugin-svelte)。モデルは Web Worker の中で動かして、UI を止めないようにしている。
返事は速い。ストリーミングは面倒だったので、結果が揃ってから一度に出す。

分かったこと

「300MB」のはずが、実際に落ちてくるのは 1GB ほどある。Wi-Fi で試すこと
メモリーを使い切るとタブごと固まる。リロードすれば直る
Svelte と一緒にバンドルすると、Transformers.js の初期化が落ちることがあった
自作の UI ライブラリー KoyUI を使って構築しようとしたら、プロダクションビルドで import.meta.env.MODE を参照して落ちていた。define で文字列に置き換えて回避

使用技術

Transformers.js (ONNX Runtime、WebGPU)
Svelte 5
Bun
Cloudflare Workers