Tài liệu này giải thích lý do WebGPU có thể không hoạt động hoặc không hoạt động như mong đợi trong trình duyệt Chrome, cùng với các bước rõ ràng để giải quyết sự cố nếu có thể.
navigator.gpu không xác định
Ví dụ sau đây cho thấy 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 lý do sau. Hãy xem các thành phần theo thứ tự cụ thể này:
WebGPU yêu cầu Chrome 113 trở lên trên ChromeOS, macOS, Windows và Chrome 121 trở lên trên Android. Hãy kiểm tra phiên bản của bạn tại
chrome://version
và cập nhật nếu cần.WebGPU chỉ có thể truy cập được trong các ngữ cảnh an toàn. Nếu phân phát mã qua một giao thức không an toàn (ví dụ:
http:
,file:
), hãy sử dụng giao thứchttps:
bảo mật 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 các cách sau:Phân phát mã của bạn cục bộ trên
http://localhost
hoặchttp://127.0.0.1
bằng một trong những lệnh sau:npx http-server
hoặcpython3 -m http.server
.Thêm nguồn gốc vào phần "Các nguồn gốc không an toàn được coi là an toàn" danh sách
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 một chứng chỉ giả mạo. Bạn vẫn sẽ nhận được cảnh báo trong Chrome, bạn có thể bỏ qua bằng cách nhấp vào "Nâng cao" sau đó, "Tiếp tục...".Hiển thị máy chủ web cục bộ với Internet bằng ngrok.
Bộ điều hợp GPU 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ừ lệnh gọi requestAdapter()
có 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 xem các thành phần theo thứ tự cụ thể này:
WebGPU bị tắt khi người dùng đã tắt chế độ "Sử dụng tính năng tăng tốc đồ hoạ khi khả dụng" trong
chrome://settings/system
. Kiểm tra xem chế độ cài đặt này đã tắt hay chưa và bật lạiWebGPU chưa được hỗ trợ trên nền tảng này. Bạn có thể bật cờ
chrome://flags/#enable-unsafe-webgpu
và khởi động lại Chrome. Để 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 Headless Chrome để tìm hiểu thêm.Phần cứng GPU đã được đưa vào danh sách chặn cụ thể. Nếu bạn thấy thông báo "WebGPU đã bị tắt thông qua danh sách chặn hoặc dòng lệnh" trong
chrome://gpu
, bạn có thể tắt danh sách chặn bộ chuyển đổi WebGPU bằng cách bật cờchrome://flags/#enable-unsafe-webgpu
và khởi động lại Chrome.Không có bộ chuyển đổi GPU phù hợp cho các tuỳ chọn được truyền vào
requestAdapter()
. Hãy thử gọirequestAdapter()
bằng các tuỳ chọn khác.WebGPU yêu cầu GPU (phần cứng hoặc phần mềm được 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
chrome://gpu
.
WebGPU chậm hơn WebGL
Mở
chrome://gpu
và đảm bảo bạn có thể đọc được "WebGPU: Hardware Accelerated" (Tăng tốc phần cứng). Nếu bạn 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", thì có thể bạn cần phải cập nhật trình điều khiển GPU.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 được hết khả năng tối ưu hoá độc đáo của WebGPU. Hãy xem Từ WebGL đến WebGPU để tìm hiểu về một số điểm khác biệt của chúng.
Các hạn chế dành riêng cho Windows
Hãy lưu ý các hạn chế sau khi sử dụng WebGPU trên các thiết bị Windows:
Chrome không hỗ trợ sử dụng đồng thời nhiều bộ điều hợp GPU. Hãy xem phần vấn đề về chromium:329211593.
Chrome luôn sử dụng cùng một bộ chuyển đổi GPU đã được phân bổ cho các tải công việc khác của Chrome (thường là đối với máy tính xách tay) là thẻ đồ hoạ tích hợp do khía cạnh sử dụng điện năng (chẳng hạn như: tiết kiệm điện năng). Điều này có nghĩa là tuỳ chọn
powerPreference
không có bất kỳ ảnh hưởng nào khi gọirequestAdapter()
.