[Tech Series 02] TensorFlow.jsからWebLLMまで: Web MLの進化
初期のWeb ML技術であるTensorFlow.jsから、ブラウザで大規模言語モデル(LLM)を実行するWebLLMまでの発展過程を紹介します。
![[Tech Series 02] TensorFlow.jsからWebLLMまで: Web MLの進化](/images/blog/web_ml_evolution.png)
TensorFlow.jsからWebLLMまで: Web MLの進化
ウェブブラウザで機械学習を実行することは、ほんの数年前までは想像し難いことでした。JavaScriptは遅く、ブラウザは重い計算を処理するのに適していないという認識が支配的でした。しかし、Web ML技術は驚くべき速度で進化し、こうした偏見を打ち破りました。
1. 黎明期: TensorFlow.jsの登場(2018)
2018年、GoogleはTensorFlow.jsを世界に公開しました。これはWeb MLのビッグバンのような出来事でした。Pythonの専有物だったディープラーニングをJavaScript生態系に持ち込んだのです。
開発者はブラウザで直接モデルをトレーニングしたり、事前学習済みモデルを読み込んで推論(Inference)することが可能になりました。初期の活用は主に画像分類、ポーズ検出(PoseNet)、顔認識など、比較的軽量なモデル中心でしたが、「ウェブでAIが動く」という可能性を証明するには十分でした。
2. 飛躍期: WebAssembly(Wasm)アクセラレーション
JavaScriptエンジン(V8など)の性能向上にもかかわらず、ディープラーニングの行列演算は依然として重いままでした。これを打破するために**WebAssembly(Wasm)**技術が導入されました。
WebAssemblyは、C++やRustで書かれたコードをブラウザで実行可能なバイナリフォーマットにコンパイルし、ネイティブに近い実行速度を提供します。これによりTensorFlow.jsのバックエンド性能が大幅に向上し、より複雑で精緻なモデルをウェブで実行できる基盤が整いました。
3. 革命期: WebGPUと大規模言語モデル(LLM)

そして今、私たちはまた一つの革命を迎えています。それはWebGPUの登場です。既存のWebGLがグラフィックレンダリング用に設計されたAPIをAI演算に「借りて使う」形だったのに対し、WebGPUは最初から汎用演算(Compute Shader)を念頭に置いて設計された次世代グラフィック標準です。
WebGPUを通じてブラウザは、デバイスに搭載された高性能GPU資源に直接的かつ効率的にアクセスできるようになりました。これは演算速度を飛躍的に高め、ついにWebLLMプロジェクトのように数十億個のパラメ��ータを持つ大規模言語モデル(Llama 3、Gemmaなど)をウェブブラウザのタブ一つで駆動することが可能になりました。
Realaysはこのような技術的発展の頂点に立っています。私たちはWebGPUと最新のWeb ML技術を積極的に導入し、ユーザーにこれまでに経験したことのない速くて強力なウェブAIサービスを提供しています。
世代別性能比較
TensorFlow.js (2018)
- モデルサイズ: 主に10MB以下の軽量モデル
- 推論速度: MobileNet基準で約100-200ms (CPU)
- 主な使用例: 画像分類、ポーズ検出、物体認識
WebAssemblyアクセラレータ (2020)
- 性能向上: CPU演算速度が2-3倍改善
- モデルサポート: より複雑なCNN、RNNモデルをサポート
- 主な使用例: リアルタイムビデオ処理、音声認識
WebGPU + WebLLM (2023~)
- モデルサイズ: 数GB級のLLMをサポート (Llama 3、Gemmaなど)
- 推論速度: GPUアクセラレーションで10-100倍向上
- 主な事例: チャットボット、テキスト生成、画像生成AI
実際の適用例
1. PoseNetを活用した姿勢認識
import * as poseDetection from "@tensorflow-models/pose-detection";
async function detectPose(video) {
// MoveNetモデルをロード
const detector = await poseDetection.createDetector(
poseDetection.SupportedModels.MoveNet,
);
// ビデオからポーズを検出
const poses = await detector.estimatePoses(video);
return poses;
}
2. WebLLMを活用したチャットボット
import { ChatModule } from "@mlc-ai/web-llm";
async function initChatbot() {
const chat = new ChatModule();
// Llama-3モデルをロード (WebGPU必要)
await chat.reload("Llama-3-8B-Instruct-q4f32_1");
// 対話を生成
const response = await chat.generate("こんにちは!");
console.log(response);
}
技術選択ガイド
いつTensorFlow.jsを使うべきか?
- 軽量モデル (< 50MB)
- 広範なブラウザ互換性が必要
- CPUでも十分な性能
いつWebGPUを使うべきか?
- 大型モデル (> 100MB)
- リアルタイム処理が必要
- 最新ブラウザをターゲットにできる
いつWebAssemblyを使うべきか?
- CPU集約的な演算
- GPUがない環境に備える
- レガシーブラウザサポート
性能最適化のヒント
1. モデル量子化
// モデルをint8に量子化してサイズを1/4に削減
await tf.loadGraphModel("model.json", {
quantizationBytes: 1, // 8ビット量子化
});
2. WebWorker活用
// メインスレッドをブロックせずバックグラウンドで推論
const worker = new Worker("ml-worker.js");
worker.postMessage({ image: imageData });
worker.onmessage = (e) => {
console.log("Prediction:", e.data);
};
3. モデルキャッシング
// IndexedDBにモデルをキャッシュ
const model = await tf.loadLayersModel("indexeddb://my-model");
if (!model) {
const model = await tf.loadLayersModel("https://cdn.com/model.json");
await model.save("indexeddb://my-model");
}
Web MLの限界と解決方法
限界1: ブラウザメモリ制限
問題: 大型モデルロード時のメモリ不足 解決:
- モデル量子化を適用
- ストリーミングロード方式を使用
- 必要な部分のみを動的にロード
限界2: 初期ローディング時間
問題: モデルダウンロードに時間がかかる 解決:
- Progressive Loading (段階的ローディング)
- Service Workerキャッシング
- CDNを活用
限界3: GPUアクセス制限
問題: すべてのブラウザがWebGPU未サポート 解決:
- フォールバック戦略を実装
- WebGLバックエンドを並行サポート
- CPU最適化版を提供
未来の展望
予想される発展
- より大きなモデル: 100B+パラメータモデルもブラウザで実行
- マルチモーダル: テキスト、画像、音声を同時処理
- 連合学習: ユーザーデータでローカル学習後に集計
- リアルタイム協働AI: P2Pで複数のブラウザがAI演算を分散
産業別影響
- 教育: 個別化学習AIチューター
- 医療: リアルタイム健康モニタリング
- クリエイティブ: ブラウザベースのAIデザインツール
- ゲーム: NPCの知的な対話と行動
よくある質問
Q: サーバーAIと比較してどのくらい速いですか? A: ネットワーク遅延を考慮すると、単純な推論ではEdge AIが5-10倍速いです。ただし、複雑なモデルではまだサーバーが優位です。
Q: WebGPUはいつすべてのブラウザで使用可能になりますか? A: ChromeとEdgeはすでにサポートしており、SafariとFirefoxも2024-2025年中にサポート予定です。
Q: モバイルでもWebGPUは動作しますか? A: はい、Android Chrome 94+で動作します。iOSはSafariで限定的にサポートしています。
次の投稿では、Web ML開発プロセスを段階的に詳しく扱います。

![[Tech Series 01] ウェブブラウザ、AIの新しいステージとなる: Edge Intelligence](/images/blog/edge_intelligence_concept.png)
![[Tech Series 04] プロダクションレベルWeb ML最適化](/images/blog/quantization_concept.png)