WebGPU が実用段階に入った — ブラウザ内で GPU をフル活用する
Chrome 113・Safari 18 で本番対応済みの WebGPU。WebGL との根本的な違いはコンピュートシェーダー。ML 推論・大量データ可視化・動画エフェクトへの実用的な活用法を解説する。
「ブラウザで GPU が使える」という話が出てきてから、ずいぶん経つ。
ただずっと「実験的な機能」「Flag を立てないと動かない」「Firefox では無理」という状態が続いていて、本番に持ち込める雰囲気じゃなかった。そのまま「面白そうだけど時期尚早」として棚に上げていた人も多いはずだ。
それが変わった。Chrome 113 と Safari 18 で WebGPU が本番対応になった。棚から下ろすタイミングが来た。
WebGL と何が違うのか
WebGL は 2011 年に生まれた「GPU をブラウザから使う API」。15 年間、3D グラフィックスとゲームを支えてきた。
でも WebGL には大きな制約があった。描画専用なのだ。GPU の能力を「ピクセルを塗る」ことにしか使えない。
WebGPU はその制約を取り払った。Vulkan・Metal・Direct3D 12 という現代の GPU API を統一インターフェースで包んでいて、描画だけじゃなく汎用の並列計算もできる。
WebGL = 「描画する」だけ
WebGPU = 「描画する」 + 「大量計算する」
この「大量計算」の部分が、話を面白くしている。
GPU が「数で押す」とはどういうことか
CPU と GPU の違いを一言で言うと、少数精鋭か、数で押すか。
CPU は少数の超高性能なコアを持つ。複雑な処理や分岐を素早くこなす。GPU は数千〜数万の小さなコアを持つ。同じ処理を大量に並列で走らせる。
1920×1080 の画像をグレースケールに変換するとしよう。CPU でやるとピクセルを 1 個ずつ順番に処理する——207 万回のループだ。GPU なら 207 万ピクセルを同時に処理できる。
WebGPU のコンピュートシェーダーは、この並列処理能力を「描画以外のことに使う」ための仕組み。これが WebGL に無くて WebGPU にあるもの、本質的な違いはここだけといっていい。
/* WGSL(WebGPU Shading Language) でグレースケール変換 */
@compute @workgroup_size(8, 8)
fn main(@builtin(global_invocation_id) id: vec3u) {
let pixel = textureLoad(inputTex, id.xy, 0);
let gray = dot(pixel.rgb, vec3f(0.299, 0.587, 0.114));
textureStore(outputTex, id.xy, vec4f(gray, gray, gray, pixel.a));
}
@workgroup_size(8, 8) は「8×8 = 64 スレッドを同時実行する」という宣言。これで 1920×1080 の変換が 1ms 以下で終わる。CPU でやるより桁違いに速い。
実際に使われているのはこの 3 用途
ブラウザ内 ML 推論
TensorFlow.js は WebGPU バックエンドを正式サポートしている。1 行で切り替わる。
import * as tf from '@tensorflow/tfjs';
await tf.setBackend('webgpu');
モデルによっては WebGL バックエンドの 3〜5 倍速くなる。顔認識・姿勢推定・画像分類がサーバーなしでブラウザ完結する。インフラコストがゼロ。プライバシーの観点でも、データがサーバーに送られないのは強い。
大量データのリアルタイム可視化
地図・金融チャート・ネットワークグラフなど、100 万点を超えるデータをリアルタイムで動かす用途。CPU では秒単位かかる処理が GPU なら 60fps で回る。データ系ダッシュボードで WebGPU に切り替えて劇的に速くなったという報告が増えている。
動画へのリアルタイムエフェクト
WebCodecs でフレームをデコード → WebGPU でシェーダー処理 → Canvas で描画。この組み合わせで、動画へのリアルタイム加工がブラウザ内で完結する。
video.requestVideoFrameCallback(() => {
const texture = device.importExternalTexture({ source: video });
applyComputeShader(texture);
});
配信ツールやビデオ会議の背景処理など、「高速な映像処理をブラウザに持ち込む」需要は多い。
WGSL を書かなくても使える
主要ライブラリが WebGPU を裏で使ってくれる。
| ライブラリ | 用途 |
|---|---|
| Three.js (WebGPU Renderer) | 3D グラフィックス・ビジュアルエフェクト |
| Babylon.js | ゲーム・インタラクティブ 3D |
| TensorFlow.js | ML 推論 |
ただし Firefox の Stable はまだ未対応。全ユーザーに届ける用途には慎重になった方がいい。navigator.gpu の存在確認と WebGL へのフォールバックは必ず入れる。
if (!navigator.gpu) {
fallbackToWebGL();
return;
}
const adapter = await navigator.gpu.requestAdapter({ powerPreference: 'high-performance' });
const device = await adapter.requestDevice();
社内ツール・プレミアム機能・B2B サービスのように「Chrome / Safari で動けばいい」用途なら、今すぐ本番に入れられる。
WebGL の実装限界にぶつかっているなら、これが乗り換える理由になる。ブラウザ内で ML 推論をやりたいなら、選択肢は WebGPU 一択になりつつある。「そのうち」と思っていたなら、そのうちはもう来ている。