Google、ブラウザ上で WebGPU を経由して .tflite モデルを実行する JavaScript バインディング「LiteRT.js」をリリース
Google は WebGPU を活用した高性能な JavaScript バインディング「LiteRT.js」をリリースし、ブラウザ内での .tflite モデル推論速度を最大 60 倍向上させることに成功した。
キーポイント
ネイティブ実行時のパフォーマンス飛躍
JavaScript ベースのカーネルに依存する従来の Web AI と異なり、ネイティブランタイムを WebAssembly でラップすることで、CPU/GPU 推論で最大 3 倍、アクセラレータ利用時は最大 60 倍の高速化を実現した。
多様なハードウェアバックエンド対応
XNNPACK(CPU)、ML Drift/WebGPU(GPU)、WebNN API(NPU)の 3 つのバックエンドをサポートし、デバイスに応じた最適な推論経路を自動選択する。
厳格なモデル変換要件とプライバシー向上
PyTorch モデルの変換には TorchDynamo 対応や動的形状の制限など厳しい前提条件があるが、推論がブラウザ内で完結するためサーバーコストゼロとユーザープライバシーの強化が可能となる。
手動メモリ管理の必要性
LiteRT.js はガベージコレクションをサポートしておらず、Tensor オブジェクトは明示的に delete() を呼び出して解放する必要があります。これを怠るとデバイスメモリのリークが発生します。
WebNN 実行には JSPI が必要
WebNN アクセラレータを使用する場合は、同期カーネルスケジューリングと非同期デバイスポーリングを橋渡しする JSPI (JavaScript Promises in WebAssembly) のフラグ設定が必須です。
TensorFlow.js との明確な違い
LiteRT.js はネイティブランタイムと .tflite 形式を採用し、NPU 対応やクロスプラットフォーム(Android/iOS/デスクトップ)での同一アーティファクト再利用を可能にしますが、メモリ管理は手動です。
TensorFlow.js との連携と最適化
前処理・後処理には TensorFlow.js を推奨し、@litertjs/tfjs-interop パッケージでテンソルを渡す。WebGPU バックエンドでは dataSync を避ける必要がある。
重要な引用
LiteRT.js instead ships the native cross-platform runtime with its optimizations intact.
GPU or NPU delivers a 5–60x speedup. That applies to demanding real-time work like object tracking and audio transcription.
Inference stays local, Google cites enhanced user privacy, zero server costs, and ultra-low latency.
LiteRT.js does not garbage-collect tensors. Every Tensor must be deleted explicitly, or the app leaks device memory.
Google positions LiteRT.js as a replacement for TF.js Graph Models specifically, not the whole library.
Avoid tensor.dataSync, which carries a significant penalty on the WebGPU backend.
影響分析・編集コメントを表示
影響分析
このリリースは、Web ブラウザを高性能な AI エッジデバイスとして再定義する転換点となる。従来の TensorFlow.js の性能限界を超え、リアルタイムなコンピュータビジョンや音声処理アプリケーションが、サーバーインフラなしでネイティブアプリ並みの速度で動作できるようになるため、プライバシー重視の Web アプリ開発やオフライン対応サービスに大きな影響を与える。
編集コメント
ブラウザ内でネイティブレベルの推論速度を実現する技術は、Web AI の実用性を飛躍的に高める画期的な一歩です。ただし、変換時の厳格な制約には注意が必要で、開発者はモデル設計段階からこれらの要件を考慮する必要があります。
Google は、.tflite モデルを WebGPU を通じてブラウザ上で実行できる JavaScript バインディング「LiteRT.js」を発表しました。LiteRT は Google が提供するオンデバイス推論ライブラリで、以前は TensorFlow Lite と呼ばれていました。
LiteRT.js により、.tflite モデルをブラウザ内で直接実行できるようになります。推論処理がローカル端末内完結するため、Google はユーザープライバシーの向上、サーバーコストのゼロ化、そして超低遅延の実現をメリットとして挙げています。
LiteRT.js とは何か?
これは新しいモデルフォーマットではありません。Google が既存のネイティブランタイムを WebAssembly へコンパイルし、JavaScript から利用可能な形で公開したものです。
TensorFlow.js を含む以前のウェブ AI ソリューションは、JavaScript ベースのカーネルに依存していました。Google はこれらを性能面で劣ると評価しています。一方、LiteRT.js はネイティブなクロスプラットフォームランタイムをそのまま搭載しており、その最適化機能も維持されています。
この結果、Web アプリでも他プラットフォームで蓄積された成果が活用できます。Android、iOS、デスクトップ向けに開発されたパフォーマンス向上や量子化の改善、ハードウェア最適化などが、ウェブ環境にもそのまま持ち込まれるのです。
仕組み:1 つのランタイム、3 つのバックエンド
このランタイムの下で、LiteRT.js は 3 つのバックエンドをサポートしています。
- CPU: Google の最適化 CPU ライブラリ「XNNPACK」を使用し、マルチスレッド対応と SIMD(単一命令複数データ)の緩やかなビルドを備えています。
- GPU: WebGPU を介して動作するオンデバイス GPU 解決策「ML Drift」を採用しています。
- NPU: WebNN API を利用しますが、これは現在 Chrome や Edge で実験的な機能です。
バックエンドの切り替えには 2 つの重要なルールが適用されます。まず、LiteRT.js は部分的な委譲(デレゲーション)をサポートしていません。計算グラフを CPU と GPU に分割することはできません。
第二に、モデルごとの委譲は「すべてかゼロか」の扱いになります。選択したアクセラレータへ完全に委譲できない場合、LiteRT は自動的に WebAssembly (wasm) 実行へとフォールバックします。CPU パスは最も幅広い演算子に対応しています。
パフォーマンス
これらのバックエンドを踏まえて、Google チームは二つの明確な結果を発表しました。
他のウェブランタイムと比較すると、LiteRT.js は CPU および GPU 推論において最大で 3 倍高速です。この数値は、従来のコンピュータビジョンや音声処理モデルを対象としたものです。
一方、CPU 実行自体と比較した場合、GPU や NPU を利用することで 5〜60 倍の速度向上が得られます。これは、物体追跡や音声文字起こしといった負荷の高いリアルタイムワークロードに適用されます。
両方のベンチマークは、M4 Apple Silicon を搭載した 2024 年製の MacBook Pro で制御されたブラウザ環境にて実施されました。Google は、結果がローカルの GPU 性能、サーマルスロットリング(熱による速度低下)、ドライバーの最適化状況によって変動すると注意を促しています。発表資料には明記されていませんが、「10 倍」という数値も一部で流通しているようです。
PyTorch モデルの取り込み
LiteRT Torch を使えば、PyTorch モデルをワンステップで .tflite 形式に変換できます。
ただし、前提条件は厳格です。モデルは torch.export.export でエクスポート可能である必要があります。つまり、TorchDynamo に対応していることに加え、実行時のテンソル値に依存する Python の分岐処理を含んではいけません。また、バッチ次元を含む入力・出力の動的な形状も許容されません。
モデルサイズについては、AI Edge Quantizer が異なるレイヤー間で量子化スキームを構成します。事前学習済みの .tflite モデルは、Kaggle や LiteRT の Hugging Face コミュニティでも入手可能です。
変換後のランタイムコードは非常に簡潔です。以下は、@litertjs/core v2.5.2 で検証済みの WebGPU 経由の実装例です。
import {loadLiteRt, loadAndCompile, Tensor} from '@litertjs/core';
// Wasm ファイルは node_modules/@litertjs/core/wasm/ ディレクトリ、または CDN に配置します。
await loadLiteRt('path/to/wasm/directory/');
const model = await loadAndCompile('path/to/model.tflite', {
accelerator: 'webgpu', // 'wasm' | 'webgpu' | 'webnn'
});
const input = new Tensor(new Float32Array(1 * 3 * 224 * 224), [1, 3, 224, 224]);
const results = await model.run(input);
// アクセラレータからの結果はオフヒープに格納されます。CPU に移動させてから変換します。
const cpuTensor = await results[0].moveTo('wasm');
const output = cpuTensor.toTypedArray();
// LiteRT.js は手動メモリ管理を採用しています。すべてのテンソルを明示的に削除してください。
input.delete();
for (const t of results) t.delete();
cpuTensor.delete();最後のコードブロックには特に注意が必要です。LiteRT.js では、テンソルのガベージコレクションは行われません。すべての Tensor を明示的に delete() 処理を行わないと、デバイスメモリがリークしてしまいます。Google の発表記事にあるスニペットでは、この削除ステップが省略されています。
WebNN を利用する場合は、追加のフラグ設定が必要です。LiteRT.js は JSPI(JavaScript Promise Integration)を必要とし、同期カーネルスケジューリングと非同期デバイスポーリングを橋渡しします。
await loadLiteRt('path/to/wasm/', {jspi: true});
const model = await loadAndCompile('model.tflite', {
accelerator: 'webnn',
webNNOptions: {devicePreference: 'npu'}, // 'cpu' | 'gpu' | 'npu'
});前処理を実装する前に、ダミー入力を用いてテストを行ってください。まずは npm i @litertjs/model-tester を実行し、その後 npx model-tester を起動します。これにより、ランダムな入力を元にモデルを WebNN、WebGPU、CPU 上で動作させることができます。また、model.getInputDetails() を使用すれば、入力名や形状を確認できます。
具体的なユースケースと実装例
これらの API は、Google がリリース時に公開した 4 つのデモを支えています。
| ユースケース | 例 | LiteRT.js の提供機能 |
|---|---|---|
| リアルタイム物体検出 | Ultralytics YOLO26(公式 LiteRT エクスポート) | モバイル、エッジ、ブラウザ向けに統一された 1 つのエクスポートパス |
| ウェブカメラからの深度推定 | Depth-Anything-V2(動画ピクセルをライブ 3D ポイントクラウドへ変換) | WebGPU を活用したインタラクティブな速度での実行 |
| 画像のアップスケール | Real-ESRGAN(128×128 パッチを 512×128 に拡大し、4 倍解像度の画像に再構成) | ローカル処理のみで、データ転送は不要 |
| セマンティック検索 | EmbeddingGemma ベクトル検索(ページ内実行) | クライアントサイドで埋め込みベクトルを計算 |
LiteRT.js と TensorFlow.js の比較
これらのデモを見ると、既存の Web ML チームにとって自然な疑問が浮かびます。
| 項目 | LiteRT.js | TensorFlow.js |
|---|---|---|
| カーネル | ネイティブランタイム(WebAssembly にコンパイル済み) | JavaScript ベースのカーネル |
| モデル形式 | .tflite | TF.js グラフおよびレイヤーモデル |
| CPU 実行経路 | XNNPACK、マルチスレッド、SIMD 緩和対応 | JS および Wasm バックエンド |
| GPU 実行経路 | WebGPU を介した ML Drift | WebGL および WebGPU バックエンド |
| NPU 実行経路 | WebNN(実験的) | なし |
| メモリ管理 | 手動(.delete() の呼び出しが必要) | 自動、tf.tidy や tf.dispose も利用可能 |
| クロスプラットフォーム再利用 | Android、iOS、デスクトップと同じアーティファクト | Web 専用 |
重要なのは、これらが排他的な選択肢ではないということです。Google は LiteRT.js を TF.js の Graph Models 専用の代替手段として位置付けており、ライブラリ全体を置き換えるものではありません。
前処理と後処理には引き続き TensorFlow.js を推奨します。@litertjs/tfjs-interop パッケージは runWithTfjsTensors メソッドを通じて両者の間でテンソルをやり取りします。WebGPU バックエンドでは大きなパフォーマンスペナルティとなるため、tensor.dataSync の使用は避けてください。
インタラクティブな解説
以下の埋め込みコンテンツでは、各バックエンドにおけるパイプラインの 6 つの段階がアニメーションで示されています。
(function(){
var f=document.getElementById("mtp-litertjs-frame");
window.addEventListener("message",function(e){
if(e&&e.data&&typeof e.data.mtpLiteRtHeight==="number"){ f.style.height=e.data.mtpLiteRtHeight+"px"; }
});
})();まとめ
- LiteRT.js は、Google のネイティブランタイムを WebAssembly にコンパイルしたもので、ブラウザ内で
.tfliteモデルを実行します。 - パフォーマンス向上は報告されており、他の Web ランタイムと比較して最大 3 倍、GPU や NPU を使用した場合では CPU パス自体と比較して 5〜60 倍の高速化が実現されています。
- サポートするバックエンドは 3 つ。CPU では XNNPACK、WebGPU 上では ML Drift(MLD),NPU では WebNN です。部分的な委譲はなく、対応しない場合は WebAssembly にフォールバックします。
- テンソルは手動管理が必要です。
.delete()を呼び出さないと、デバイスメモリがリークする可能性があります。 - WebNN はまだ実験段階です。現時点での実用的なアクセラレーションターゲットは WebGPU となります。
参考資料
- LiteRT.js, Google’s high performance Web AI Inference
- Get started with LiteRT.js
- LiteRT Torch (ai-edge-torch)
- AI Edge Quantizer
- LiteRT-LM
Google が WebGPU を通じてブラウザ上で .tflite モデルを実行できる JavaScript バインディング「LiteRT.js」をリリースしました。
この発表は、MarkTechPost によって最初に報じられました。
原文を表示
Google released LiteRT.js, a JavaScript binding of LiteRT. LiteRT is Google’s on-device inference library, previously called TensorFlow Lite.
LiteRT.js runs .tflite models directly inside the browser. Because inference stays local, Google cites enhanced user privacy, zero server costs, and ultra-low latency.
What is LiteRT.js?
It is not a new model format. Rather, Google compiled its existing native runtime to WebAssembly and exposed it to JavaScript.
Earlier web AI solutions, including TensorFlow.js, relied on JavaScript-based kernels. Google describes those as less performant. LiteRT.js instead ships the native cross-platform runtime with its optimizations intact.
Consequently, web apps inherit work done elsewhere. Performance upgrades, quantization improvements, and hardware optimizations built for Android, iOS, and desktop arrive on the web too.
How It Works: One Runtime, Three Backends
Under that runtime, LiteRT.js targets three backends:
CPU uses XNNPACK, Google’s optimized CPU library, with multi-thread support and a relaxed SIMD build.
GPU uses ML Drift, Google’s on-device GPU solution, running through WebGPU.
NPU uses the WebNN API, currently experimental in Chrome and Edge.
Two related rules govern dispatch. First, LiteRT.js does not support partial delegation. A graph cannot split across CPU and GPU.
Second, delegation is all-or-nothing per model. If a model cannot be fully delegated to the chosen accelerator, LiteRT falls back to wasm execution. The CPU path has the widest operator coverage.
Performance
Given those backends, Google team reports two distinct results.
Against other web runtimes, LiteRT.js is up to 3x faster across CPU and GPU inference. That figure covers classical computer vision and audio processing models.
Against its own CPU execution, GPU or NPU delivers a 5–60x speedup. That applies to demanding real-time work like object tracking and audio transcription.
Both benchmarks ran in a controlled browser environment on a 2024 MacBook Pro with M4 Apple Silicon. Google notes results vary with local GPU, thermal throttling, and driver optimization. A “10x” figure circulating alongside the launch does not appear in the announcement.
Getting a PyTorch Model In
LiteRT Torch converts PyTorch models to .tflite in a single step.
However, the prerequisites are strict. Your model must be exportable with torch.export.export, meaning TorchDynamo-exportable. It cannot contain Python conditional branches that depend on runtime tensor values. It also cannot have dynamic input or output dimensions, including the batch dimension.
For size, AI Edge Quantizer configures quantization schemes across different model layers. Pretrained .tflite models are also available on Kaggle and the LiteRT Hugging Face Community.
The Minimal Pipeline
Once converted, the runtime code is short. This is the WebGPU path, verified against @litertjs/core v2.5.2:
Copy CodeCopiedUse a different Browser
import {loadLiteRt, loadAndCompile, Tensor} from '@litertjs/core';
// Wasm files live in node_modules/@litertjs/core/wasm/ or on a CDN.
await loadLiteRt('path/to/wasm/directory/');
const model = await loadAndCompile('path/to/model.tflite', {
accelerator: 'webgpu', // 'wasm' | 'webgpu' | 'webnn'
});
const input = new Tensor(new Float32Array(1 * 3 * 224 * 224), [1, 3, 224, 224]);
const results = await model.run(input);
// Accelerator results live off-heap. Move to CPU, then convert.
const cpuTensor = await results[0].moveTo('wasm');
const output = cpuTensor.toTypedArray();
// LiteRT.js uses manual memory management. Delete every tensor.
input.delete();
for (const t of results) t.delete();
cpuTensor.delete();
That last block deserves attention. LiteRT.js does not garbage-collect tensors. Every Tensor must be deleted explicitly, or the app leaks device memory. The snippet in Google’s announcement post omits this step.
WebNN needs one extra flag. LiteRT.js requires JSPI, which bridges synchronous kernel scheduling with asynchronous device polling:
Copy CodeCopiedUse a different Browser
await loadLiteRt('path/to/wasm/', {jspi: true});
const model = await loadAndCompile('model.tflite', {
accelerator: 'webnn',
webNNOptions: {devicePreference: 'npu'}, // 'cpu' | 'gpu' | 'npu'
});
Before writing pre-processing, test with fake inputs. Run npm i @litertjs/model-tester, then npx model-tester. It runs your model on WebNN, WebGPU, and CPU using random inputs. Use model.getInputDetails() to read input names and shapes.
Use Cases With Examples
Those APIs back four demos Google shipped at launch:
Use caseExampleWhat LiteRT.js provides
Real-time object detectionUltralytics YOLO26, via official LiteRT export in the Ultralytics Python packageOne export path to mobile, edge, and browser
Depth from a webcamDepth-Anything-V2, mapping video pixels into a live 3D point cloudWebGPU execution at interactive rates
Image upscalingReal-ESRGAN, upscaling 128×128 patches to 512×512, reassembled into a 4x imageLocal processing, no upload
Semantic searchEmbeddingGemma vector search running in-pageEmbeddings computed client-side
LiteRT.js vs TensorFlow.js
Those demos raise an obvious question for existing web ML teams.
DimensionLiteRT.jsTensorFlow.js
KernelsNative runtime compiled to WebAssemblyJavaScript-based kernels
Model format.tfliteTF.js graph and layers models
CPU pathXNNPACK, multi-thread, relaxed SIMDJS and Wasm backends
GPU pathML Drift over WebGPUWebGL and WebGPU backends
NPU pathWebNN, experimentalNone
MemoryManual; call .delete()Automatic, plus tf.tidy and tf.dispose
Cross-platform reuseSame artifact as Android, iOS, desktopWeb-only
Importantly, the two are not mutually exclusive. Google positions LiteRT.js as a replacement for TF.js Graph Models specifically, not the whole library.
TensorFlow.js remains the recommended tool for pre- and post-processing. The @litertjs/tfjs-interop package passes tensors between them via runWithTfjsTensors. Avoid tensor.dataSync, which carries a significant penalty on the WebGPU backend.
Interactive Explainer
The embed below animates the six pipeline stages across each backend.
(function(){
var f=document.getElementById("mtp-litertjs-frame");
window.addEventListener("message",function(e){
if(e&&e.data&&typeof e.data.mtpLiteRtHeight==="number"){ f.style.height=e.data.mtpLiteRtHeight+"px"; }
});
})();
Key Takeaways
LiteRT.js runs .tflite models in-browser using Google’s native runtime compiled to WebAssembly.
Reported gains: up to 3x over other web runtimes; 5–60x for GPU/NPU over its own CPU path.
Three backends: XNNPACK on CPU, ML Drift over WebGPU, WebNN for NPUs. No partial delegation; falls back to wasm.
Tensors are manually managed. Call .delete() or leak device memory.
WebNN remains experimental. WebGPU is the practical acceleration target today.
Sources
LiteRT.js, Google’s high performance Web AI Inference — developers.googleblog.com
Get started with LiteRT.js — developers.google.com
LiteRT Torch (ai-edge-torch) — GitHub
AI Edge Quantizer — GitHub
LiteRT-LM — GitHub
The post Google Releases LiteRT.js: A JavaScript Binding of LiteRT That Runs .tflite Models in Browsers via WebGPU appeared first on MarkTechPost.
関連記事
PrismML が Qwen3.6-27B の軽量版「Bonsai 27B」をリリース:ラップトップやスマートフォンで動作する 1 ビットおよび 3 値モデル
コード生成エージェント4種比較:Mistral Vibe、Claude Code、Cursor、Codexの実務タスク評価
OpenCoreDev がドメイン SDK 0.2.0 をリリース:5 つのプラットフォーム間で顧客ドメインを追加・検証・削除する TypeScript API
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み