WebGPU: トラブルシューティングのヒントと修正

François Beaufort
François Beaufort

公開日: 2024 年 2 月 7 日、最終更新日: 2025 年 10 月 17 日

このドキュメントでは、Chrome ブラウザで WebGPU が動作しない、または期待どおりに動作しない理由について説明します。また、可能な場合は、問題を解決するための明確な手順も示します。

次の例は、navigatorgpu を使用できない場合に発生する JavaScript エラーを示しています。

const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')

考えられる理由は次のとおりです。次の順序で確認します。

  1. WebGPU を利用するには、ChromeOS、macOS、Windows では Chrome 113 以降、Android では Chrome 121 以降が必要です。chrome://version でバージョンを確認し、必要に応じて更新します。

  2. WebGPU にアクセスできるのは、セキュアなコンテキストのみです。安全でないプロトコル(http:file: など)でコードを配信する場合は、安全な https: プロトコルを使用するか、ウェブアプリの開発中に次のいずれかの方法でこの問題に対処します。

    • 次のいずれかのコマンド(npx http-server または python3 -m http.server)を使用して、http://localhost または http://127.0.0.1 でコードをローカルに提供します。

    • chrome://flags/#unsafely-treat-insecure-origin-as-secure の [安全でないオリジンを安全として扱う] リストにオリジンを追加し、Chrome を再起動します。

    • Node.js をインストールし、npx servez --ssl を実行して、偽の証明書を使用してフォルダを https で提供します。Chrome では引き続き警告が表示されますが、[詳細設定]、[... に進む] の順にクリックして回避できます。

    • ngrok を使用してローカル ウェブサーバーをインターネットに公開します。

GPU アダプターが null である

requestAdapter() の呼び出しから取得したアダプタが null の場合に発生する JavaScript エラーの例を次に示します。

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)

この問題は、次のいずれかの理由で発生します。次の順序で確認します。

  1. ユーザーが chrome://settings/system で [グラフィック アクセラレーションが使用可能な場合は使用する] をオフにしている場合、WebGPU は無効になります。この設定がオフになっているかどうかを確認し、オフになっている場合はオンに戻します

  2. このプラットフォームでは、WebGPU はまだサポートされていません。chrome://flags/#enable-unsafe-webgpu フラグを有効にして Chrome を再起動します。Linux の試験運用版のサポートを利用するには、chrome://flags/#enable-vulkan フラグも有効にする必要があります。詳しくは、ヘッドレス Chrome での WebGPU のサポートをご覧ください。

  3. GPU ハードウェアがブロックリストに登録されている。chrome://gpu に「WebGPU has been disabled via blocklist or the command line」と表示された場合は、chrome://flags/#enable-unsafe-webgpu フラグを有効にして Chrome を再起動することで、WebGPU アダプタのブロックリストを無効にできます。chrome://flags/#ignore-gpu-blocklist フラグを有効にして Chrome を再起動することで、組み込みのソフトウェア レンダリング リストをオーバーライドすることもできます。

  4. requestAdapter() で渡されたオプションに一致する GPU アダプタがありません。さまざまなオプションを指定して requestAdapter() を呼び出してみます

  5. WebGPU には GPU(ハードウェアまたはソフトウェア エミュレート)が必要です。Chrome が GPU を検出しているかどうかは、chrome://gpu にアクセスして確認できます。

  6. GPU プロセスが数回クラッシュしました。ページを再読み込みするか、Chrome を再起動してください。詳しくは、WebGPU デバイスの損失に関するベスト プラクティスをご覧ください。

WebGPU は WebGL よりも遅い

  1. chrome://gpu を開き、「WebGPU: Hardware accelerated」と表示されていることを確認します。「WebGPU: ソフトウェアのみ、ハードウェア アクセラレーションは利用不可」と表示された場合は、GPU ドライバの更新が必要になることがあります。

  2. WebGL のコンセプトを WebGPU に直接変換すると、WebGPU 独自の最適化を十分に活用できない可能性があります。両者の違いについては、WebGL から WebGPU へをご覧ください。

Windows 固有の制限事項

Windows デバイスで WebGPU を使用する場合は、次の制限事項に注意してください。

  • Chrome では、複数の GPU アダプタを同時に使用することはできません。問題 chromium:329211593 をご覧ください。

  • Chrome は、他の Chrome ワークロードに割り当てられたのと同じ GPU アダプタを常に使用します。ノートパソコンの場合、電力使用量(省電力)の観点から、通常は統合グラフィック カードが使用されます。つまり、requestAdapter() を呼び出すときに powerPreference オプションは影響しません。chrome://flags/#force-high-performance-gpu フラグを有効にして Chrome を再起動すると、高性能 GPU が利用可能な場合にその使用を強制できます。