Hugging Face、ブラウザ用GPUカーネル207種を公開

Hugging Faceは9月1日、Hubから最適化済みWebGPUカーネルをダウンロード・準備・実行するためのJavaScriptローダーライブラリ「@huggingface/kernels」を公開した。同時に、行列積、正規化、畳み込み、アテンションの基本演算、量子化演算、データレイアウト変換など、さまざまな機械学習アーキテクチャに対応する調整済みGPU演算子207個も公開されている。ライセンスはApache-2.0。

最も特徴的なのは構成の仕方だ。各カーネルはインターフェース定義、シェーダーテンプレート、正確性テスト、ベンチマークデータを備えた個別リポジトリとして公開される。Hubに載った時点で、演算子とモデルはバージョン管理・ダウンロード・参照の仕組みを共有することになる。

809件の比較テスト

性能評価はORT WebGPU 1.30.0-devとの直接比較で、809件のテストケースを対象に、幾何平均で2.57倍、中央値で1.90倍の高速化を記録した。勝敗は629勝176敗4分。演算子別に見ると、Addは3.52倍、Softmaxは2.11倍、LayerNormalizationは2.22倍それぞれ高速化している。

単純計算すると勝率はおよそ78%になる。幾何平均2.57倍が中央値1.90倍を大きく上回っているのは、一部の演算子が突出して高速化し、平均値を押し上げていることを示す右に裾を引いた分布だ。実際のワークロードで体感できる高速化は、発表で強調される数字よりも中央値に近い水準になる可能性が高い。結論の方向性自体は変わらないが、期待値は少し引き戻しておく必要がある。

あわせて公開されたのが、ブラウザ内で動くベンチマークツール「Fleet」だ。発想はクラウドソーシングで、ツールを実行したユーザーの端末から性能と正確性のデータが集まってくる仕組みになっている。WebGPUのハードウェア断片化はサーバー側のCUDAよりはるかに深刻で、統合GPU、単体GPU、モバイルGPU、ブラウザ実装ごとに挙動が異なり、限られた検証環境だけでは全体像を捉えきれない。テストをユーザーに委ねるのは現実的な解決策と言える。

なぜカーネル層で足踏みしていたのか

ブラウザ上でモデルを動かすメリットは以前からはっきりしていた。計算はユーザーの端末上で行われ、サーバー側に計算コストは発生せず、データも端末外に出ない。それでも普及が進まなかった主因は、モデル形式や推論フレームワークではなく、その下にあるカーネル層だった。同じSoftmaxでも、実装の出来次第でリアルタイムに動くかどうかが決まる。

これまでこの層は、推論ランタイム全体とセットでしかアップデートできなかった。より高速なアテンション実装に切り替えるには、フレームワークの次期バージョンを待つのが通例だった。カーネルを独立リポジトリに分けたことで、演算子は単体で差し替え、ロールバック、改善ができる単位になった。特定のGPU向けに調整した行列積カーネルを、あるモデルの一部だけに導入する、といったことも理論上は他のコードに手を入れずに済む。

呼び出し方はシンプルで、カーネルオブジェクトを取得してそのまま関数として呼び出せる。

const add = await getKernel("webgpu-kernels/ai.onnx.Add", { version: 1 });

動作にはブラウザのWebGPU対応が前提となり、判定は"gpu" in navigatorの一行で済む。

オンデバイスツールへの影響

今回の恩恵を受けるのは具体的な層だ。ブラウザ完結の画像処理、ローカル文字起こし、オフライン翻訳、プライバシー重視のツールを手がけるチームである。こうしたプロダクトのビジネスモデルは、サーバー側が静的ファイルを配信するだけで計算コストを負わないことが前提であり、ブラウザに載せられるモデルの規模はカーネル性能に直結する。カーネル全体が約2倍速くなれば、実用に耐えるモデルサイズの上限も一段引き上がり、これまで3秒かかっていた処理が1秒未満に収まることもあり得る。

留保点もはっきり述べておく必要がある。ベンチマークの比較対象はORT WebGPUのdevビルドであり、相手側も更新を続けている。207個という演算子数は多く聞こえるが、カバーしているのは一般的な処理であり、珍しいアーキテクチャに当たれば結局自前で書くことになる。WebGPUの対応自体は各ブラウザに広がっているものの、モバイル実装の完成度にはばらつきがあり、端末ごとの挙動はFleetのようなツールで自分で確認する必要がある。

カーネルをアドレス可能でバージョン管理され、クラウドで検証できる資産に変えたことは、単純な倍速化以上に長期的な意味を持つ。モデルの重みはすでにこの形で流通してきており、基盤側のコードが追いつくのは時間の問題だった。

参考資料:Hugging Face公式ブログ、CocoLoop、Hugging Face Hubリポジトリ。カーネル数、809件のテストケース、幾何平均2.57倍と中央値1.90倍の高速化、629勝176敗4分の勝敗記録および各演算子の倍率は公式発表に基づいて確認した。勝率の計算と分布の偏りに関する分析は編集部による概算。