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

François Beaufort
François Beaufort

このドキュメントでは、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. ユーザーが [グラフィック アクセラレーションが使用可能な場合は使用する] をオフにした場合、WebGPU は無効になります。(chrome://settings/system)この設定がオフになっているかどうかを確認し、オンに戻してください

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

  3. GPU ハードウェアは拒否リストに登録されています。「WebGPU が拒否リストまたはコマンドラインにより無効になっています」と表示される場合chrome://gpuchrome://flags/#enable-unsafe-webgpu フラグを有効にして Chrome を再起動すると、WebGPU アダプタのブロックリストを無効にできます。

  4. requestAdapter() で渡されたオプションに一致する GPU アダプターがない。別のオプションで requestAdapter() を呼び出してみてください

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

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 アダプターが使用されます。ノートパソコンでは、電力消費(省電力など)の面から、内蔵グラフィックス カードが一般的に使用されます。つまり、powerPreference オプションは requestAdapter() の呼び出し時に影響を与えません。