7月9日、GoogleのエンジニアチームであるPing Yu、Marko Ristić、Matthew Soulanille、Chintan Parikhが「LiteRT.js, Google's high performance Web AI Inference- Google Developers Blog」と題した記事を公開した。この記事では、ブラウザ上でMLモデルをネイティブ実行できるJavaScriptランタイム「LiteRT.js」の正式リリースについて詳しく紹介されている。
TensorFlow.jsの後継として登場したLiteRT.js
GoogleはオンデバイスMLランタイム「LiteRT」(旧TensorFlow Lite)のJavaScriptバインディングとして「LiteRT.js」をリリースした。
従来のTensorFlow.jsはJavaScriptベースのカーネルで動作しており、パフォーマンスに制約があった。LiteRT.jsはWebAssemblyを通じてネイティブのクロスプラットフォームランタイムを直接Web開発者に提供し、その壁を突破する。
最大の特徴は3種類のハードウェアバックエンドへの対応だ。
- CPU:GoogleのSIMD最適化ライブラリXNNPACKを使用。マルチスレッドに対応
- GPU:GoogleのGPUアクセラレーションライブラリ「ML Drift」がWebGPUを通じてGPUを活用
- NPU:現在ChromeおよびEdgeで実験的に提供中のWebNN API経由でNPUをターゲットにする
WebNN(Web Neural Network API)はW3Cが策定中のAPIで、デバイスに搭載されたNPU(Neural Processing Unit)をWebから直接叩ける仕組みだ。現時点ではChrome・Edgeでの実験的サポートにとどまるが、LiteRT.jsはすでにこれを取り込んでいる。
既存の.tfliteモデルがそのままブラウザで動く
LiteRT.jsの実用上の強みは、.tflite形式のモデルをほぼそのままブラウザで実行できる点だ。AndroidやiOSで使っていたモデルを再学習なしにWebへ持ち込める。
PyTorchからの変換は「LiteRT Torch」で1ステップ。量子化には「AI Edge Quantizer」を使い、モデルの品質を保ちつつサイズと速度を最適化できる。
コードも非常にシンプルだ。
import { loadLiteRt, loadAndCompile, Tensor } from '@litertjs/core';
await loadLiteRt('path/to/wasm/directory/');
const model = await loadAndCompile('path/to/your/model.tflite', { accelerator: 'webgpu' });
const inputTypedArray = new Float32Array(1 * 3 * 224 * 224);
const inputTensor = new Tensor(inputTypedArray, [1, 3, 224, 224]);
const results = await model.run(inputTensor);
// GPU上のTensorをCPUへ移動してTypedArrayに変換
const resultArray = (await results[0].moveTo('wasm')).toTypedArray();
npmパッケージ@litertjs/coreをインストールし、モデルを読み込んでアクセラレータを指定するだけで推論が走る。なお、acceleratorオプションの値は文字列'webgpu'で指定する点に注意(元記事の記法を参照のこと)。入力テンソルのサイズ224×224はImageNetモデルの標準的な入力解像度だ。
実測パフォーマンス:他のWebランタイム比で最大3倍速
記事では2024年製Apple MacBook Pro(M4)を使ったベンチマーク結果が公開されている。ここでいう「3倍速」はCPUとの比較ではなく、既存の他のWebランタイムとの比較である点に注意したい。
- 古典的なコンピュータビジョンモデルや音声処理モデルにおいて、他のWebランタイムと比較して最大3倍のスピードアップを達成
- GPU(WebGPU)やNPU(WebNN)を使った場合、CPU実行と比べて5〜60倍の高速化を確認
物体追跡、音声書き起こし、画像処理のようなリアルタイム処理が要求されるタスクで特に効果が大きいとしている。
実装デモ:YOLO、深度推定、画像超解像
記事ではいくつかの動作デモが紹介されている。
YOLO統合:UltralyticsのYOLOファミリーがLiteRT.jsに公式対応。Ultralytics PythonパッケージからLiteRT形式でエクスポートし、数行のコードでモバイル・エッジ・ブラウザに展開できる。
単眼深度推定:Depth-Anything-V2モデルをWebGPUで動かし、通常のWebカメラ映像をリアルタイムで3Dポイントクラウドに変換するデモ。
画像超解像:Real-ESRGANモデルで画像を4倍に高解像度化する。128×128ピクセルのパッチを512×512に拡大し、最終的に結合する処理をすべてブラウザ内で完結させる。
ブラウザ内でEmbeddingGemmaを使ったベクトル検索のデモも公開されている。デモへの直接リンクは元記事内に掲載されているので、元記事から確認してほしい。
ロードマップ
今後の開発方針として以下が挙げられている。
- WebNN統合の強化によるNPUネイティブパフォーマンスの向上
- オンデバイス生成AI向けの最適化サポート
- LLMサポートとして「LiteRT-LM.js」(ブラウザ上でLLMを動かすJavaScript API)の提供
事前学習済み.tfliteモデルはKaggleやLiteRT Hugging Face Communityで公開されており、npmパッケージ@litertjs/coreはすでに取得可能だ。TensorFlow.jsユーザー向けの移行ガイドも用意されている。
詳細はLiteRT.js, Google's high performance Web AI Inference- Google Developers Blogを参照していただきたい。