ブラウザ内でAIを動かす

更新: 2026-08-29
WebGPUONNXWebLLM

推論をサーバではなく見ている人の端末で走らせる構成を、2つのプロダクトで使っている。

プロダクト用途使ったもの
サムネジェネレーター画像生成ONNX Runtime Web + SD-Turbo
Valscope文章の生成・要約@mlc-ai/web-llm

どちらも共通する動機がある。サーバで推論すると、使われるほど金がかかる。 個人で運用するかぎり、そこが青天井になる構成は選べない。

何がサーバから消えるか

SERVER INFERENCEブラウザ推論サーバ入力結果使われるほど課金入力がサーバを通るIN-BROWSER推論はここブラウザ配信サーバモデルを配るだけ初回だけ従量課金が発生しない入力が外へ出ない
推論の置き場所を変えると、課金と入力の扱いが同時に変わる。

APIキーの管理も要らなくなる。鍵が無いので漏れない。

代わりに背負うもの

動く環境を選ぶ。 WebGPU が要る。対応していないブラウザでは何も動かないので、 機能を出す前に必ず判定して、使えないときの表示を用意する。

初回が重い。 サムネジェネレーターは初回に約1GBのモデルを取得して IndexedDB に置く。 2回目以降は即起動するが、最初の1回で離脱される。 ボタンを押すまで取得を始めない作りにして、押した人にだけ待ってもらう形にした。

端末の性能で結果が変わる。 同じ操作でも待ち時間が数倍違う。 「何秒で終わります」と書けない。進捗を出すことしかできない。

モデルの置き場所

モデルはリポジトリに入れない。サムネジェネレーターは HuggingFace から取得し、 IndexedDB にキャッシュしている。

配信サーバ側の役割はモデルを配ることだけになる。 サムネジェネレーターを Cloudflare Pages に置いているのはこのためで、 アプリ本体は静的ファイルしかない。

どちらを使うか

ONNX Runtime WebWebLLM
向くもの画像生成・分類など、変換したONNXがあるもの言語モデル
モデルの用意自分でONNXに変換するか、変換済みを探す対応モデルの一覧から選ぶ
手数前処理・後処理を自分で書くチャット形式のAPIが用意されている

言語モデルを動かすなら WebLLM のほうが手数が少ない。 それ以外は ONNX Runtime Web を使うことになる。

関連

WIKI一覧へ