WebGPU: Tipps und Lösungen zur Fehlerbehebung

François Beaufort
François Beaufort

In diesem Dokument wird erläutert, warum WebGPU möglicherweise nicht funktioniert oder nicht wie erwartet im Chrome-Browser funktioniert. Außerdem werden klare Schritte zur Behebung der Probleme beschrieben, sofern möglich.

Im folgenden Beispiel wird ein JavaScript-Fehler angezeigt, der auftreten kann, wenn gpu in navigator nicht verfügbar ist:

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

Das kann folgende Gründe haben: Prüfen Sie diese in der folgenden Reihenfolge:

  1. Für WebGPU ist Chrome 113 oder höher auf ChromeOS, macOS und Windows sowie Chrome 121 oder höher auf Android erforderlich. Prüfe deine Version unter chrome://version und aktualisiere sie bei Bedarf.

  2. WebGPU ist nur für sichere Kontexte zugänglich. Wenn Sie Ihren Code über ein unsicheres Protokoll (z. B. http: oder file:) bereitstellen, verwenden Sie entweder das sichere https:-Protokoll oder beheben Sie das Problem während der Entwicklung Ihrer Webanwendung auf eine der folgenden Arten:

    • Sie können Ihren Code lokal auf http://localhost oder http://127.0.0.1 mit einem der folgenden Befehle bereitstellen: npx http-server oder python3 -m http.server.

    • Fügen Sie die Quelle der Liste „Unsichere Quellen, die als sicher behandelt werden“ in chrome://flags/#unsafely-treat-insecure-origin-as-secure hinzu und starten Sie Chrome neu.

    • Installieren Sie Node.js und führen Sie npx servez --ssl aus, um Ihren Ordner über https mit einem gefälschten Zertifikat bereitzustellen. Sie erhalten weiterhin eine Warnung in Chrome, die Sie jedoch überspringen können, indem Sie auf „Erweitert“ und dann auf „Weiter zu…“ klicken.

    • Stellen Sie Ihren lokalen Webserver mit ngrok dem Internet zur Verfügung.

Der GPU-Adapter ist null

Das folgende Beispiel zeigt einen JavaScript-Fehler, der auftreten kann, wenn der Adapter, der durch Aufrufen von requestAdapter() zurückgegeben wird, null ist:

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

Das kann einen der folgenden Gründe haben: Prüfen Sie diese in der folgenden Reihenfolge:

  1. WebGPU ist deaktiviert, wenn der Nutzer in chrome://settings/system die Option „Grafikbeschleunigung verwenden, falls verfügbar“ deaktiviert hat. Prüfe, ob diese Einstellung deaktiviert ist, und aktiviere sie dann wieder.

  2. WebGPU wird auf dieser Plattform noch nicht unterstützt. Sie können das Flag chrome://flags/#enable-unsafe-webgpu aktivieren und Chrome neu starten. Für die experimentelle Unterstützung von Linux müssen Sie außerdem das Flag chrome://flags/#enable-vulkan aktivieren. Weitere Informationen finden Sie unter WebGPU-Unterstützung in Headless Chrome.

  3. Die GPU-Hardware wurde speziell auf die Sperrliste gesetzt. Wenn in chrome://gpu die Meldung „WebGPU wurde über die Blockliste oder die Befehlszeile deaktiviert“ angezeigt wird, können Sie die Blockliste der WebGPU-Adapter deaktivieren, indem Sie das Flag chrome://flags/#enable-unsafe-webgpu aktivieren und Chrome neu starten.

  4. Es gibt keinen passenden GPU-Adapter für die in requestAdapter() übergebenen Optionen. Probieren Sie verschiedene Optionen aus, um requestAdapter() anzurufen.

  5. Für WebGPU ist eine GPU erforderlich (entweder hardware- oder softwaregestützt). Ob Chrome eine GPU erkennt, können Sie unter chrome://gpu prüfen.

  6. Der GPU-Prozess ist mehrmals abgestürzt. Sie können die Seite aktualisieren oder Chrome neu starten. Weitere Informationen finden Sie unter Best Practices für den Verlust von WebGPU-Geräten.

WebGPU ist langsamer als WebGL

  1. Öffne chrome://gpu und prüfe, ob „WebGPU: Hardware accelerated“ (WebGPU: Hardwarebeschleunigt) angezeigt wird. Wenn Sie „WebGPU: Software only, hardware acceleration unmanaged“ (WebGPU: Nur Software, Hardwarebeschleunigung nicht verfügbar) lesen, müssen Sie möglicherweise Ihre GPU-Treiber aktualisieren.

  2. Wenn WebGL-Konzepte direkt in WebGPU übertragen werden, werden die einzigartigen Optimierungen von WebGPU möglicherweise nicht voll ausgeschöpft. Weitere Informationen zu den Unterschieden finden Sie unter Von WebGL zu WebGPU.

Windows-spezifische Einschränkungen

Beachten Sie bei der Verwendung von WebGPU auf Windows-Geräten die folgenden Einschränkungen:

  • Chrome unterstützt nicht die gleichzeitige Verwendung mehrerer GPU-Adapter. Siehe issue chromium:329211593.

  • Chrome verwendet immer denselben GPU-Adapter, der auch anderen Chrome-Arbeitslasten zugewiesen ist. Bei Laptops ist dies in der Regel die integrierte Grafikkarte, da dies die Stromversorgung optimiert. Das bedeutet, dass die Option powerPreference beim Aufrufen von requestAdapter() keine Auswirkungen hat.