ブラウザでローカルLLMを動かせるか? WebGPUとTransformers.jsによる実行速度の検証

4 min read
Table of Contents

「ローカルLLMを動かすサーバがないなら、クライアントで動かせばいいじゃん」
そんな声が聞こえてきそうな時代になりました。
本記事では、巷で話題の「ブラウザでローカルLLMを動かす」という技術について、実際に検証してみた結果をお伝えします。

なぜブラウザでローカルLLMを動かしたいのか?

これまで、ローカルLLMを動かすには、それなりの性能を持つPC(GPU搭載マシンなど)が必要でした。
準備するのにも何百万もかかり、それを商用利用と考えると、かなりの設備費がかかります。(AWSで運用する場合、月数十万円かかることもあります。)

だったら、クライアントのPCで動かせばいいじゃん、という発想です。
PCのブラウザからローカルLLMを動かせれば、手軽に実現できるというわけです。

ブラウザでローカルLLMを動かすための条件

実際に動作させるためには、いくつかの大きな壁があります。

1. WebGPUへの対応

現在、ほとんどのLLMランタイムは WebGPU を利用しています。
WebAssembly (WASM) を使う方法もありますが、制約が多く、パフォーマンス面でも課題があります。

技術特徴
WebGPU高速な並列演算が可能。現在の主流。
WebAssembly (WASM)サポートブラウザは広いが、速度が遅く、メモリ制限がある。

2. クライアントのスペック

「クライアントで動かせばいい」と言っても、クライアントのスペックが低ければ十分な動作は期待できません。

以下の図のように、最低限の推奨スペックが必要になります。


Created by Claude

ライブラリとモデル

ブラウザでのLLM実行を支える、主要なプレイヤーを紹介します。

ライブラリ(LLMランタイム)

代表的なライブラリとして、以下のものが挙げられます。

  • WebLLM: WebGPUを最大限に活用するライブラリ。
  • Transformers.js: Hugging Faceが提供する、ブラウザでモデルを動かすための標準的な選択肢。
  • Chrome Built-in AI: Chromeブラウザ自体に組み込まれたAI(Gemini Nanoなど)。
  • ONNX Runtime Web: 高速な推論エンジン。

対応モデル

モデル側も、これらのライブラリで動作するように変換されている必要があります。


実際にやってみた:検証環境

今回は、強力なハードウェアを用いて、どの程度動作するのかを試しました。

  • マシン: Apple M4 Pro
  • メモリ: 48GB

検証したモデル

以下のモデルを、異なるランタイムで試行しました。

  • Qwen3-4B (MLC / ONNX)
  • Qwen3-0.6B (MLC / ONNX)

使用したLLMランタイムは以下の通りです。

  • WebLLM
  • Transformers.js

サイト

検証用のサイトを作成しました。

Local LLM Playground
momijinn.github.io

コードは以下です。

GitHub - Momijinn/test-web-local-llm
github.com
image

検証結果

前提条件

  • ローカルLLMの読み込みは初回のみとし、キャッシュなしの状態で計測。
  • Qwen3-4Bについては、キャッシュを利用した場合のモデル読み込み時間も計測。
  • 「thinkingモード」をONにして計測。

Qwen3-4B の検証

モデルの読み込み

LLM ランタイム読み込み時間RAM増加量
WebLLM (WebGPU) キャッシュなし50.53s+354MB
WebLLM (WebGPU) キャッシュあり2.76s+547MB
Transformers.js (WebGPU) キャッシュなし78.65s+2757MB
Transformers.js (WebGPU) キャッシュあり4.28s+35MB
Transformers.js (WASM)--

※ Transformers.js (WASM) は、モデルサイズ(2702MB)がWASMの制限(2000MB)を超えるため、読み込みができませんでした。

WebLLM (WebGPU) キャッシュなし
モデルの読み込み
WebLLM (WebGPU) キャッシュあり
モデルの読み込み
Transformers.js (WebGPU) キャッシュなし
モデルの読み込み
Transformers.js (WebGPU) キャッシュあり
モデルの読み込み

「こんにちは」を返すまでのレスポンス(thinkingモードON)

LLM ランタイム合計時間TTFT速度
WebLLM (WebGPU)1.01s481ms35.6 tok/s
Transformers.js (WebGPU)1.53s798ms8.2 tok/s
WebLLM (WebGPU)
レスポンス
Transformers.js (WebGPU)
レスポンス

Qwen3-0.6B の検証

モデルの読み込み

LLM ランタイム読み込み時間RAM増加量
WebLLM (WebGPU)11.91s+310MB
Transformers.js (WebGPU)20.70s+225MB
Transformers.js (WASM)15.16s+596MB
WebLLM (WebGPU)
モデルの読み込み
Transformers.js (WebGPU)
モデルの読み込み
Transformers.js (WASM)
モデルの読み込み

「こんにちは」を返すまでのレスポンス(thinkingモードON)

LLM ランタイム合計時間TTFT速度
WebLLM (WebGPU)0.34s194ms100.9 tok/s
Transformers.js (WebGPU)0.43s301ms23.7 tok/s
Transformers.js (WASM)6.20s1221ms0.6 tok/s
WebLLM (WebGPU)
レスポンス
Transformers.js (WebGPU)
レスポンス
Transformers.js (WASM)
レスポンス

結論:ブラウザでのローカルLLMは「アリ」か「ナシ」か?

個人的な結論としては、「現時点では、まだナシ」 です。

理由は以下の3点です。

  1. ハードウェアの制約
    「ローカルLLMを動かせる環境」を持っているユーザーは、まだ限られています。
    今回の結果は、Apple M4 Proという非常に高性能なマシンでの検証によるものです。
  2. モデルの配布とメモリ問題
    モデルファイルをクライアントへダウンロードさせる必要があります。サイズの大きいモデルはロードに膨大な時間を要し、カスタマイズモデルの配布にはリソース面でのリスクも伴います。
  3. ブラウザバージョンの依存
    WebGPUなどの最新技術に依存するため、ブラウザのバージョンが求められます。
    • PC版 Chrome: v113 (2023/05/02)
    • Android版 Chrome: v149 (2026/06/16)

「ローカルLLMを動かすサーバがないなら クライアントで動かせばいいじゃん」

このスローガンの通りに世界が動くには、まだ時間がかかりそうです。

まとめ

ブラウザ上でローカルLLMを動かしてみました。

全人類が、1B(10億パラメータ)程度の軽量なLLMモデルを、手元のPCやスマホでサクサク動かせる世界になったら、ようやく「アリ」と言えるかもしれません。

その日が来るのを、楽しみに待ちたいと思います。

Appendix: WebGPU以外の手法は?

Transformers.jsWebAssembly (WASM) を使用して動作させることも可能です。
WASMはWebGPUよりも 幅広いブラウザをサポートしています が、以下のデメリットがあります。

  • 速度: WebGPUに比べるとかなり遅い。
  • メモリ制限: LLMの読み込みサイズに制限(例:2GB)がある。(エラーメッセージが出ましたが、ログは残していません。🙇)