WebGPU: Mẹo khắc phục sự cố và bản sửa lỗi

François Beaufort
François Beaufort

Ngày xuất bản: Ngày 7 tháng 2 năm 2024, Lần cập nhật gần đây nhất: Ngày 17 tháng 10 năm 2025

Tài liệu này giải thích lý do khiến WebGPU có thể không hoạt động hoặc không hoạt động như mong đợi trong trình duyệt Chrome, kèm theo các bước rõ ràng để giải quyết vấn đề (nếu có thể).

Ví dụ sau đây cho thấy một lỗi JavaScript mà bạn có thể gặp phải khi gpu không có trong navigator:

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

Điều này có thể là do một trong những nguyên nhân sau. Hãy kiểm tra các mục sau theo thứ tự cụ thể này:

  1. WebGPU yêu cầu Chrome 113 trở lên trên ChromeOS, macOS, Windows và Chrome 121 trở lên trên Android. Kiểm tra phiên bản của bạn tại chrome://version và cập nhật nếu cần.

  2. WebGPU chỉ có thể truy cập vào các bối cảnh an toàn. Nếu bạn phân phát mã của mình qua một giao thức không an toàn (ví dụ: http:, file:), hãy sử dụng giao thức https: an toàn hoặc giải quyết vấn đề này trong quá trình phát triển ứng dụng web theo một trong những cách sau:

    • Phân phát mã cục bộ trên http://localhost hoặc http://127.0.0.1 bằng một trong các lệnh sau: npx http-server hoặc python3 -m http.server.

    • Thêm nguồn vào danh sách "Nguồn không an toàn được coi là an toàn" của chrome://flags/#unsafely-treat-insecure-origin-as-secure rồi khởi động lại Chrome.

    • Cài đặt Node.js và chạy npx servez --ssl để phân phát thư mục của bạn qua https bằng chứng chỉ giả. Bạn vẫn sẽ nhận được cảnh báo trong Chrome mà bạn có thể bỏ qua bằng cách nhấp vào "Nâng cao" rồi nhấp vào "Tiến hành đến...".

    • Mở máy chủ web cục bộ của bạn cho Internet bằng ngrok.

Bộ điều hợp GPU là giá trị rỗng

Sau đây là ví dụ về lỗi JavaScript mà bạn có thể gặp phải khi bộ chuyển đổi bạn nhận được từ việc gọi requestAdapter() là giá trị rỗng:

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

Điều này xảy ra vì một trong những lý do sau. Hãy kiểm tra các mục sau theo thứ tự cụ thể này:

  1. WebGPU sẽ bị tắt khi người dùng tắt chế độ "Sử dụng tính năng tăng tốc đồ hoạ nếu có" trong chrome://settings/system. Kiểm tra xem chế độ cài đặt này có đang tắt hay không rồi bật lại

  2. Nền tảng này hiện chưa hỗ trợ WebGPU. Bạn có thể bật cờ chrome://flags/#enable-unsafe-webgpu rồi khởi động lại Chrome. Để dùng tính năng hỗ trợ thử nghiệm Linux, bạn cũng cần bật cờ chrome://flags/#enable-vulkan. Hãy xem bài viết Hỗ trợ WebGPU trong Chrome không giao diện người dùng để tìm hiểu thêm.

  3. Phần cứng GPU đã được đưa vào danh sách chặn cụ thể. Nếu thấy thông báo "WebGPU has been disabled via blocklist or the command line" (WebGPU đã bị vô hiệu hoá thông qua danh sách chặn hoặc dòng lệnh) trong chrome://gpu, bạn có thể vô hiệu hoá danh sách chặn bộ điều hợp WebGPU bằng cách bật cờ chrome://flags/#enable-unsafe-webgpu rồi khởi động lại Chrome. Bạn cũng có thể ghi đè danh sách kết xuất phần mềm tích hợp bằng cách bật cờ chrome://flags/#ignore-gpu-blocklist rồi khởi động lại Chrome.

  4. Không có bộ chuyển đổi GPU nào phù hợp với các lựa chọn được truyền trong requestAdapter(). Thử gọi requestAdapter() bằng các lựa chọn khác.

  5. WebGPU yêu cầu phải có GPU (phần cứng hoặc phần mềm mô phỏng). Bạn có thể kiểm tra xem Chrome có phát hiện thấy GPU hay không bằng cách truy cập vào chrome://gpu.

  6. Quy trình GPU gặp sự cố nhiều lần. Bạn có thể tải lại trang hoặc khởi động lại Chrome. Hãy xem Các phương pháp hay nhất về tình trạng mất thiết bị WebGPU để tìm hiểu thêm.

WebGPU chậm hơn WebGL

  1. Mở chrome://gpu và đảm bảo bạn có thể đọc "WebGPU: Hardware accelerated" (WebGPU: Tăng tốc phần cứng). Nếu thấy thông báo "WebGPU: Chỉ phần mềm, không có tính năng tăng tốc phần cứng", có thể bạn cần cập nhật trình điều khiển GPU.

  2. Việc dịch trực tiếp các khái niệm WebGL sang WebGPU có thể không tận dụng hết các điểm tối ưu hoá riêng biệt của WebGPU. Hãy xem bài viết Từ WebGL đến WebGPU để tìm hiểu về một số điểm khác biệt giữa hai công nghệ này.

Các hạn chế dành riêng cho Windows

Hãy lưu ý những hạn chế sau khi sử dụng WebGPU trên thiết bị Windows:

  • Chrome không hỗ trợ việc sử dụng nhiều bộ điều hợp GPU cùng lúc. Xem vấn đề chromium:329211593.

  • Chrome luôn sử dụng cùng một bộ điều hợp GPU đã được phân bổ cho các khối lượng công việc khác của Chrome. Đối với máy tính xách tay, bộ điều hợp này thường là card đồ hoạ tích hợp, do yếu tố sử dụng điện (tức là tiết kiệm điện). Điều này có nghĩa là lựa chọn powerPreference không có tác động nào khi gọi requestAdapter(). Bạn có thể buộc sử dụng GPU hiệu suất cao (nếu có) bằng cách bật cờ chrome://flags/#force-high-performance-gpu rồi khởi động lại Chrome.