Chrome に搭載された WebGPU

長年の開発期間を経て、Chrome チームは、ウェブ上で高性能 3D グラフィックスとデータ並列計算を行える WebGPU を出荷しました。

François Beaufort
François Beaufort

Chrome チームは、Chrome 113(現在は Beta チャンネル)で WebGPU をデフォルトで利用できるようになりました。WebGPU は新しいウェブ グラフィック API であり、同じグラフィックに対する JavaScript ワークロードを大幅に削減し、ML モデルの推論を 3 倍以上向上させるなど、大きなメリットをもたらします。これは、より柔軟な GPU プログラミングと、WebGL では提供されない高度な機能を利用できることで可能になります。

WebGPU のこの初回リリースは、ChromeOS、macOS、Windows でご利用いただけます。他のプラットフォームについては、今年後半にサポートされる予定です。

ウェブ グラフィックの新たな夜明け

WebGPU は、最新のハードウェア機能を公開し、Direct3D 12、Metal、Vulkan と同様に、GPU 上でレンダリングと計算処理を行えるウェブ用の新しい API です。WebGL の API ファミリーとは異なり、WebGPU では、より高度な GPU 機能を利用できるほか、GPU での一般的な計算を高いレベルでサポートできます。この API はウェブ プラットフォームを念頭に置いて設計されており、慣用的な JavaScript API、Promise との統合、動画のインポートのサポート、優れたエラー メッセージが表示される洗練されたデベロッパー エクスペリエンスを備えています。

WebGPU のこの初回リリースは、今後のアップデートと機能強化の構成要素となります。この API では、さらに高度なグラフィック機能が提供される予定です。デベロッパーの皆様には、追加機能に対するリクエストの送信をおすすめします。また、ML をさらに最適化し、WGSL(WebGPU シェーディング言語)のエルゴノミクスをさらに強化するために、シェーダーコアへのアクセスを増やす予定です。

WebGPU は、W3C の「GPU for the Web」コミュニティ グループによる共同の取り組みの成果であり、Mozilla、Apple、Intel、Microsoft などの大手企業も参加しています。2017 年の最初の設計から 6 年間(90 のコントリビューター、2,000 のコミット、3,000 号)の開発期間を経て、現在では最初の実装が Chrome で利用可能になり、現在は Firefox と Safari もサポートしています。

Chromium 用の Dawn ライブラリと Firefox 用の wgpu ライブラリは、どちらもスタンドアロン パッケージとして利用でき、OS GPU API を抽象化する優れたポータビリティと人間工学に基づくレイヤを提供します。また、これらのライブラリをネイティブ アプリケーションで使用すると、EmscriptenRust web-sys を介した WASM への移植が容易になります。

ブラウザ サポート

WebGPU のこの初期リリースは、Vulkan をサポートする ChromeOS デバイス、Direct3D 12 をサポートする Windows デバイス、macOS の Chrome 113 で利用できます。Linux、Android、既存のプラットフォームに対するサポートの拡大は、近日中にリリースされる予定です。

WebGPU は、Chrome での初期実装に加えて、FirefoxSafari でも開発が進められています。

ライブラリ サポート

広く使用されている多くの WebGL ライブラリでは、すでに WebGPU のサポートが実装中であるか実装が完了しています。つまり、WebGPU を使用する際は、以下の 1 行を変更するだけで済みます。

  • Babylon.js は WebGPU を完全にサポートしています。
  • PlayCanvas は、WebGPU の初期サポートを発表しました。
  • TensorFlow.js は、ほとんどの演算子の WebGPU に最適化されたバージョンをサポートしています。
  • Three.js の WebGPU のサポートは現在進行中です。をご覧ください。

リソース

WebGPU は重要な技術であるため、詳細については次のリソースをご覧ください。

謝辞

Chromium に協力してくださったすべての皆様、特に Intel の協力者に貴重なサポートをしていただき、ありがとうございました。