WebGPU: 문제 해결 팁 및 수정사항

François Beaufort
François Beaufort

이 문서에서는 Chrome 브라우저에서 WebGPU가 작동하지 않거나 예상대로 작동하지 않는 이유를 설명하고 가능한 경우 문제를 해결하기 위한 명확한 단계를 안내합니다.

다음 예는 navigator에서 gpu를 사용할 수 없을 때 발생할 수 있는 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에 액세스할 수 없습니다. 서비스 워커 또는 공유 워커를 사용하는 경우 WebGPU 코드를 전용 워커 또는 전역 창 컨텍스트로 이동합니다.

  3. 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일 때 발생할 수 있는 자바스크립트 오류의 예입니다.

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가 사용 중지된 경우 차단 목록 또는 명령줄을 통해 WebGPU가 사용 중지되었습니다'라는 메시지가 표시되면 chrome://flags/#enable-unsafe-webgpu 플래그를 사용 설정하고 Chrome을 다시 시작하여 WebGPU 어댑터 차단 목록을 사용 중지할 수 있습니다.

  4. requestAdapter()에 전달된 옵션과 일치하는 GPU 어댑터가 없습니다. 다른 옵션으로 requestAdapter()를 호출해 보세요.

  5. WebGPU에는 GPU (하드웨어 또는 소프트웨어 에뮬레이션된 방식)가 필요합니다. chrome://gpu 페이지를 방문하여 Chrome이 GPU를 감지하는지 확인할 수 있습니다.

WebGPU가 WebGL보다 느림

  1. chrome://gpu를 열고 'WebGPU: 하드웨어 가속'이 표시되는지 확인합니다. 'WebGPU: 소프트웨어만 지원, 하드웨어 가속을 사용할 수 없음'을 읽은 경우 GPU 드라이버를 업데이트해야 할 수 있습니다.

  2. WebGL 개념을 WebGPU로 직접 변환하면 WebGPU의 고유한 최적화를 최대한 활용하지 못할 수 있습니다. WebGL에서 WebGPU까지에서 몇 가지 차이점을 알아보세요.

Windows 관련 제한사항

Windows 기기에서 WebGPU를 사용할 때는 다음 제한사항에 유의하세요.

  • Chrome은 여러 GPU 어댑터를 동시에 사용하는 것을 지원하지 않습니다. 문제 chromium:329211593을 참고하세요.

  • Chrome은 전력 사용 측면 (예: 절전 모드)으로 인해 다른 Chrome 워크로드에 할당된 것과 동일한 GPU 어댑터를 사용합니다. 노트북의 경우에는 일반적으로 통합 그래픽 카드입니다. 즉, powerPreference 옵션은 requestAdapter()를 호출할 때 아무런 영향을 미치지 않습니다.