Sau 6 năm phát triển, vào ngày 6/4, nhóm Google Chrome đã chính thức phát hành WebGPU cho đồ họa 3D hiệu suất cao và tính toán song song dữ liệu trên mạng. WebGPU hiện được bật theo mặc định trong Chrome 113 ở giai đoạn thử nghiệm beta.
WebGPU là một loại API đồ họa Web mới, có ưu điểm là giảm đáng kể khối lượng công việc của JavaScript trong cùng một tỷ lệ đồ họa và tăng hiệu quả suy luận của các mô hình máy học lên hơn 3 lần. Bước nhảy vọt này có thể thực hiện được nhờ lập trình GPU linh hoạt và truy cập vào các tính năng nâng cao mà WebGL không thể.
Được biết, phiên bản đầu tiên của WebGPU đã được mở trên ChromeOS, macOS và Windows và hỗ trợ cho các nền tảng khác sẽ được tung ra vào cuối năm nay.
WebGPU là một loại API Web mới tận dụng các khả năng phần cứng hiện đại và cho phép thực hiện các hoạt động kết xuất và điện toán trên GPU, tương tự như Direct3D 12, Metal và Vulkan. Không giống như dòng API WebGL, WebGPU cung cấp quyền truy cập vào các tính năng GPU nâng cao hơn và cung cấp hỗ trợ hạng nhất cho điện toán chung trên GPU. API được thiết kế để thích ứng hoàn toàn với nền tảng Web, cung cấp trải nghiệm toàn diện cho nhà phát triển với API JavaScript đặc trưng, hứa hẹn tích hợp, hỗ trợ nhập video và thông báo lỗi đầy đủ.
Bản phát hành WebGPU đầu tiên này sẽ là khối xây dựng cơ bản cho các bản cập nhật và cải tiến trong tương lai. API sẽ cung cấp các chức năng đồ họa nâng cao hơn trong tương lai và các nhà phát triển được khuyến khích áp dụng cho các chức năng khác. Nhóm Chrome đang lên kế hoạch cung cấp quyền truy cập sâu vào các lõi của trình tạo bóng để tối ưu hóa máy học nhiều hơn và các tinh chỉnh bổ sung về công thái học trong WGSL (Ngôn ngữ tạo bóng cho WebGPU).
Theo giới thiệu, WebGPU là kết quả nỗ lực hợp tác của nhóm cộng đồng Web GPU W3C, trong đó có sự đóng góp của các hãng lớn như Mozilla, Apple, Intel, Microsoft. Sau 6 năm phát triển (90 người đóng góp, 2000 lần cam kết, 3000 vấn đề) kể từ thiết kế ban đầu vào năm 2017, lần triển khai đầu tiên của WebGPU cuối cùng đã chính thức cập bến Chrome, hỗ trợ cả Firefox và Safari.
Cả thư viện Chromium và Dawn cũng như thư viện wgpu của Firefox đều có sẵn dưới dạng các gói độc lập, cung cấp lớp công thái học và tính di động tuyệt vời giúp trừu tượng hóa API GPU của hệ điều hành. Các nhà phát triển cũng có thể dễ dàng di chuyển sang WASM thông qua Emscripten và Rust web-sys khi sử dụng các thư viện này trong các ứng dụng gốc.
Bản phát hành đầu tiên của WebGPU khả dụng trên các thiết bị ChromeOS có hỗ trợ Vulkan, thiết bị Windows có hỗ trợ Direct3D 12 và Chrome 113 trên macOS. Hỗ trợ mở rộng cho Linux, Android và các nền tảng hiện có khác cũng sẽ có sẵn trong năm. Ngoài Chrome, WebGPU đã bước đầu cập bến trình duyệt Firefox và Safari.
Nhiều thư viện WebGL được sử dụng rộng rãi đang hoặc đã có thể hỗ trợ WebGPU, vì vậy người dùng chỉ cần thực hiện một thay đổi duy nhất để sử dụng WebGPU:
1. Babylon.js đã hỗ trợ đầy đủ WebGPU.
2. PlayCanvas đã công bố hỗ trợ ban đầu cho WebGPU.
3. TensorFlow.js hỗ trợ các phiên bản được tối ưu hóa cho WebGPU của hầu hết các nhà khai thác.
4. Three.js đang làm việc để triển khai hỗ trợ WebGPU.
Vào thời điểm này, nhân viên Apple đã gửi một đề xuất có tên là WebGPU cho W3C, W3C đã quyết định sử dụng tên này làm tiêu chuẩn đặt tên mới trong tương lai và thành lập một nhóm làm việc để thực hiện công việc của WebGPU.
Vì tên này do Apple đặt nên cuối cùng chỉ có đề xuất của Apple được nhập vào kho mã "gpuweb-proposals" của họ. Tuy nhiên, để tránh những hiểu lầm và xung đột do trùng tên gây ra, tên của đề xuất ban đầu của Apple đã được đổi thành WebMetal.
Thấy rằng W3C đã chấp nhận đề xuất của Apple, Mozilla đã không hòa giải và thay vào đó, họ đã gửi một đề xuất dựa trên Vulkan có tên là WebGL Next cho Tập đoàn Khornos, nhưng đây là nỗ lực cuối cùng của WebGL. Cuối cùng, các nhà cung cấp trình duyệt đã bình chọn bằng chân và đứng về phía WebGPU.
Giờ đây, sau nhiều năm chờ đợi, đội ngũ Google đã chính thức phát hành WebGPU khiến nhiều nhà phát triển vô cùng phấn khích.
Khi ai đó hỏi: "Giả sử bạn là một học viên ML. Bạn có khuyên bạn nên học WebGPU thay vì dành nhiều thời gian hơn cho CUDA không?", raphlinus khuyên: "Tất cả phụ thuộc vào mục tiêu của bạn. Nếu bạn đang nghiên cứu về máy học thực sự thuật toán, sau đó sử dụng một khung như TensorFlow hoặc Torch, chúng cung cấp tất cả các hoạt động của tensor và trừu tượng hóa phần cứng. Nếu bạn muốn có hiệu suất tối đa trên phần cứng hiện nay, hãy gắn bó với Nvidia và chọn CUDA. Nếu bạn quan tâm đến việc triển khai trên nhiều loại phần cứng, hoặc muốn bắt tay vào triển khai các thuật toán như wonnx, thì WebGPU là dành cho bạn".
Nhà phát triển "FL33TW00D" cho biết, "Điều này rất thú vị! (Tôi đã nghi ngờ rằng nó sẽ trượt xuống 114) Việc triển khai WebGPU vẫn còn rất non nớt, nhưng nó chắc chắn đủ tốt để bắt đầu sử dụng". FL33TW00D cho biết, "Trước đây vài tháng, đã triển khai thời gian chạy Rust + WebGPU ML và rất thích viết WGSL. Gần đây, tôi có một LLM tham số 250M để chạy trong trình duyệt mà không cần tối ưu hóa nhiều và nó hoạt động tốt! Điều đó nói rằng, matmuls trong Vẫn còn các lỗi lớn trong trình duyệt (đặc biệt là xem xét việc kiểm tra giới hạn được thực thi trong trình duyệt). Trong điểm chuẩn của tôi, tôi đã cố gắng đạt được 50% FLOPS lý thuyết và khi kiểm tra giới hạn bắt đầu, nó sẽ Giảm xuống còn 30%. Tôi rất mong được truy cập các lõi shader được đề cập trong bài viết".
Anh ấy nói thêm rằng WebGPU là một "thiết kế API đồ họa hiện đại" giống như cách đây 8 năm. Muộn còn hơn không, nhưng... khái niệm "hiện đại" dường như đang đi theo hướng ngày nay: mọi thứ không bị ràng buộc (như lần lặp lại thứ ba của "không bị ràng buộc" nghĩa là gì), lưới tạo bóng, dò tia, trạng thái đường ống linh hoạt. Tuy nhiên, tất cả những thứ này đều không có trong WebGPU.
Đáp lại, kỹ sư đường ống đồ họa của Google, Corentin Wallez, đã trả lời rằng API gốc đã phát triển và PSO đã thúc đẩy các nhà phát triển trò chơi theo một hướng nhất định mà họ nghĩ rằng họ có thể duy trì vào thời điểm đó (biên dịch trước mọi thứ, hóa ra không phải như vậy) . Ông tuyên bố rằng WebGPU phải hỗ trợ tất cả phần cứng đang được sử dụng hiện nay, bao gồm cả các thiết bị không hỗ trợ trình tạo bóng lưới hoặc không liên kết. "Nhưng hy vọng sau phiên bản đầu tiên, nó sẽ tiếp tục cải thiện và bắt kịp một số tính năng mới quan trọng".
Flohofwoe nói: "WebGPU không thể chấp nhận sự phân chia như vậy. Nó phải hoạt động tốt như nhau trên máy tính để bàn và thiết bị di động trên cùng một cơ sở mã (thiết bị di động thực sự quan trọng hơn nhiều so với máy tính để bàn).
Vì vậy, với tư cách là người kế thừa WebGL, một số nhà phát triển đã đề xuất sự khác biệt giữa WebGPU và WebGL? Hao Jiali, một kỹ sư cao cấp của Keike Fangfang, đã từng chia sẻ so sánh hiệu suất của mình giữa hai bên tại Hội nghị Công nghệ Big Front-End Toàn cầu GMTC, chúng ta có thể xem qua.
Đây là so sánh về hiệu suất kết xuất cho các cảnh phức tạp. Có 1000 cây trong cảnh này, chúng không được vẽ theo ví dụ, nhưng mỗi cây có một lệnh gọi vẽ, vì vậy tôi cần hơn 1000 lệnh gọi vẽ trong một cảnh. Nếu dùng WebGL để vẽ thì thấy dùng card đồ họa 2070 chỉ chạy được đến 21FPS, thời gian CPU xử lý mỗi khung hình cần 44 mili giây, còn dùng WebGPU xử lý thì chạy được đến 123 khung hình và CPU thời gian cho mỗi khung hình chỉ 0,1 mili giây, đây là khoảng cách hiệu suất lớn nhất và đáng kể nhất giữa WebGPU và WebGL.
Khác là một khoảng cách mã. Trong quá trình vẽ bằng API gốc WebGL, điểm bắt đầu của mọi thứ là Canvas, tuy nhiên, đây là một điều rất khó tin, đó là dù không cần vẽ gì thì người dùng cũng cần tạo một phần tử Canvas, cái mà có thể không cần thiết cho giao diện người dùng. Nhận thức được, nhưng đối với các nhà phát triển trình duyệt, cần phải tạo một phần tử DOM mới và thêm tất cả những thứ nó cần. Một khi phần tử DOM sụp đổ, trình duyệt phải xử lý tất cả những điều này. Đối với các nhà phát triển, mọi thứ có thể trở nên rất phức tạp.
Nhưng WebGPU thì không như vậy, điểm vào của WebGPU là navigator.gpu, người dùng có thể lấy card đồ họa từ đây, sau đó lấy thiết bị từ card đồ họa, nhưng không có Canvas ở giữa.
WebGPU là một loại API đồ họa Web mới, có ưu điểm là giảm đáng kể khối lượng công việc của JavaScript trong cùng một tỷ lệ đồ họa và tăng hiệu quả suy luận của các mô hình máy học lên hơn 3 lần. Bước nhảy vọt này có thể thực hiện được nhờ lập trình GPU linh hoạt và truy cập vào các tính năng nâng cao mà WebGL không thể.
Được biết, phiên bản đầu tiên của WebGPU đã được mở trên ChromeOS, macOS và Windows và hỗ trợ cho các nền tảng khác sẽ được tung ra vào cuối năm nay.
Bình minh mới của đồ họa web
Bản phát hành WebGPU đầu tiên này sẽ là khối xây dựng cơ bản cho các bản cập nhật và cải tiến trong tương lai. API sẽ cung cấp các chức năng đồ họa nâng cao hơn trong tương lai và các nhà phát triển được khuyến khích áp dụng cho các chức năng khác. Nhóm Chrome đang lên kế hoạch cung cấp quyền truy cập sâu vào các lõi của trình tạo bóng để tối ưu hóa máy học nhiều hơn và các tinh chỉnh bổ sung về công thái học trong WGSL (Ngôn ngữ tạo bóng cho WebGPU).
Theo giới thiệu, WebGPU là kết quả nỗ lực hợp tác của nhóm cộng đồng Web GPU W3C, trong đó có sự đóng góp của các hãng lớn như Mozilla, Apple, Intel, Microsoft. Sau 6 năm phát triển (90 người đóng góp, 2000 lần cam kết, 3000 vấn đề) kể từ thiết kế ban đầu vào năm 2017, lần triển khai đầu tiên của WebGPU cuối cùng đã chính thức cập bến Chrome, hỗ trợ cả Firefox và Safari.
Cả thư viện Chromium và Dawn cũng như thư viện wgpu của Firefox đều có sẵn dưới dạng các gói độc lập, cung cấp lớp công thái học và tính di động tuyệt vời giúp trừu tượng hóa API GPU của hệ điều hành. Các nhà phát triển cũng có thể dễ dàng di chuyển sang WASM thông qua Emscripten và Rust web-sys khi sử dụng các thư viện này trong các ứng dụng gốc.
Bản phát hành đầu tiên của WebGPU khả dụng trên các thiết bị ChromeOS có hỗ trợ Vulkan, thiết bị Windows có hỗ trợ Direct3D 12 và Chrome 113 trên macOS. Hỗ trợ mở rộng cho Linux, Android và các nền tảng hiện có khác cũng sẽ có sẵn trong năm. Ngoài Chrome, WebGPU đã bước đầu cập bến trình duyệt Firefox và Safari.
Nhiều thư viện WebGL được sử dụng rộng rãi đang hoặc đã có thể hỗ trợ WebGPU, vì vậy người dùng chỉ cần thực hiện một thay đổi duy nhất để sử dụng WebGPU:
1. Babylon.js đã hỗ trợ đầy đủ WebGPU.
2. PlayCanvas đã công bố hỗ trợ ban đầu cho WebGPU.
3. TensorFlow.js hỗ trợ các phiên bản được tối ưu hóa cho WebGPU của hầu hết các nhà khai thác.
4. Three.js đang làm việc để triển khai hỗ trợ WebGPU.
Mừng và lo
Có thông tin cho rằng sự ra đời của WebGPU thực chất là kết quả của cuộc đấu tranh của các nhà sản xuất lớn. Vào năm 2016, Google nhận thấy rằng có một số vấn đề với WebGL nên đã đưa ra một đề xuất mới có tên là WebGL Next, tuyên bố sẽ tạo ra một API đồ họa chính xác khác. Sau đó, các nhà sản xuất khác đã làm theo và Mozilla, Apple và Opera đều đề xuất các khái niệm của riêng họ.Vào thời điểm này, nhân viên Apple đã gửi một đề xuất có tên là WebGPU cho W3C, W3C đã quyết định sử dụng tên này làm tiêu chuẩn đặt tên mới trong tương lai và thành lập một nhóm làm việc để thực hiện công việc của WebGPU.
Vì tên này do Apple đặt nên cuối cùng chỉ có đề xuất của Apple được nhập vào kho mã "gpuweb-proposals" của họ. Tuy nhiên, để tránh những hiểu lầm và xung đột do trùng tên gây ra, tên của đề xuất ban đầu của Apple đã được đổi thành WebMetal.
Thấy rằng W3C đã chấp nhận đề xuất của Apple, Mozilla đã không hòa giải và thay vào đó, họ đã gửi một đề xuất dựa trên Vulkan có tên là WebGL Next cho Tập đoàn Khornos, nhưng đây là nỗ lực cuối cùng của WebGL. Cuối cùng, các nhà cung cấp trình duyệt đã bình chọn bằng chân và đứng về phía WebGPU.
Giờ đây, sau nhiều năm chờ đợi, đội ngũ Google đã chính thức phát hành WebGPU khiến nhiều nhà phát triển vô cùng phấn khích.
Nó rất thú vị!
"Đây là một cột mốc quan trọng và là một phần của hành trình lớn hơn. Trong công việc của tôi trên Vello, một trình kết xuất 2D tiên tiến, tôi đã tin rằng WebGPU là một yếu tố thay đổi cuộc chơi. Chúng tôi sẽ có cơ sở hạ tầng khá hiện đại: Web, Windows, Mac , Linux, ChromeOS, iOS và Android", nhà phát triển có biệt danh raphlinus cho biết.Khi ai đó hỏi: "Giả sử bạn là một học viên ML. Bạn có khuyên bạn nên học WebGPU thay vì dành nhiều thời gian hơn cho CUDA không?", raphlinus khuyên: "Tất cả phụ thuộc vào mục tiêu của bạn. Nếu bạn đang nghiên cứu về máy học thực sự thuật toán, sau đó sử dụng một khung như TensorFlow hoặc Torch, chúng cung cấp tất cả các hoạt động của tensor và trừu tượng hóa phần cứng. Nếu bạn muốn có hiệu suất tối đa trên phần cứng hiện nay, hãy gắn bó với Nvidia và chọn CUDA. Nếu bạn quan tâm đến việc triển khai trên nhiều loại phần cứng, hoặc muốn bắt tay vào triển khai các thuật toán như wonnx, thì WebGPU là dành cho bạn".
Nhà phát triển "FL33TW00D" cho biết, "Điều này rất thú vị! (Tôi đã nghi ngờ rằng nó sẽ trượt xuống 114) Việc triển khai WebGPU vẫn còn rất non nớt, nhưng nó chắc chắn đủ tốt để bắt đầu sử dụng". FL33TW00D cho biết, "Trước đây vài tháng, đã triển khai thời gian chạy Rust + WebGPU ML và rất thích viết WGSL. Gần đây, tôi có một LLM tham số 250M để chạy trong trình duyệt mà không cần tối ưu hóa nhiều và nó hoạt động tốt! Điều đó nói rằng, matmuls trong Vẫn còn các lỗi lớn trong trình duyệt (đặc biệt là xem xét việc kiểm tra giới hạn được thực thi trong trình duyệt). Trong điểm chuẩn của tôi, tôi đã cố gắng đạt được 50% FLOPS lý thuyết và khi kiểm tra giới hạn bắt đầu, nó sẽ Giảm xuống còn 30%. Tôi rất mong được truy cập các lõi shader được đề cập trong bài viết".
WebGPU, có quá muộn không?
Tất nhiên, cũng có một số nhà phát triển bày tỏ sự nghi ngờ về việc có phải đến tận bây giờ WebGPU mới được phát hành hay không. Cựu kỹ sư công cụ trò chơi Unity, Aras Pranckevičius, đã đặt câu hỏi: "WebGL đã lỗi thời. Tôi tự hỏi liệu WebGPU có hơi muộn không (như Vulkan bây giờ mà PSO có thể không phải là một ý tưởng hay, lol)".Anh ấy nói thêm rằng WebGPU là một "thiết kế API đồ họa hiện đại" giống như cách đây 8 năm. Muộn còn hơn không, nhưng... khái niệm "hiện đại" dường như đang đi theo hướng ngày nay: mọi thứ không bị ràng buộc (như lần lặp lại thứ ba của "không bị ràng buộc" nghĩa là gì), lưới tạo bóng, dò tia, trạng thái đường ống linh hoạt. Tuy nhiên, tất cả những thứ này đều không có trong WebGPU.
Đáp lại, kỹ sư đường ống đồ họa của Google, Corentin Wallez, đã trả lời rằng API gốc đã phát triển và PSO đã thúc đẩy các nhà phát triển trò chơi theo một hướng nhất định mà họ nghĩ rằng họ có thể duy trì vào thời điểm đó (biên dịch trước mọi thứ, hóa ra không phải như vậy) . Ông tuyên bố rằng WebGPU phải hỗ trợ tất cả phần cứng đang được sử dụng hiện nay, bao gồm cả các thiết bị không hỗ trợ trình tạo bóng lưới hoặc không liên kết. "Nhưng hy vọng sau phiên bản đầu tiên, nó sẽ tiếp tục cải thiện và bắt kịp một số tính năng mới quan trọng".
Flohofwoe nói: "WebGPU không thể chấp nhận sự phân chia như vậy. Nó phải hoạt động tốt như nhau trên máy tính để bàn và thiết bị di động trên cùng một cơ sở mã (thiết bị di động thực sự quan trọng hơn nhiều so với máy tính để bàn).
WebGPU so với WebGL
Đây là so sánh về hiệu suất kết xuất cho các cảnh phức tạp. Có 1000 cây trong cảnh này, chúng không được vẽ theo ví dụ, nhưng mỗi cây có một lệnh gọi vẽ, vì vậy tôi cần hơn 1000 lệnh gọi vẽ trong một cảnh. Nếu dùng WebGL để vẽ thì thấy dùng card đồ họa 2070 chỉ chạy được đến 21FPS, thời gian CPU xử lý mỗi khung hình cần 44 mili giây, còn dùng WebGPU xử lý thì chạy được đến 123 khung hình và CPU thời gian cho mỗi khung hình chỉ 0,1 mili giây, đây là khoảng cách hiệu suất lớn nhất và đáng kể nhất giữa WebGPU và WebGL.
Khác là một khoảng cách mã. Trong quá trình vẽ bằng API gốc WebGL, điểm bắt đầu của mọi thứ là Canvas, tuy nhiên, đây là một điều rất khó tin, đó là dù không cần vẽ gì thì người dùng cũng cần tạo một phần tử Canvas, cái mà có thể không cần thiết cho giao diện người dùng. Nhận thức được, nhưng đối với các nhà phát triển trình duyệt, cần phải tạo một phần tử DOM mới và thêm tất cả những thứ nó cần. Một khi phần tử DOM sụp đổ, trình duyệt phải xử lý tất cả những điều này. Đối với các nhà phát triển, mọi thứ có thể trở nên rất phức tạp.
Nhưng WebGPU thì không như vậy, điểm vào của WebGPU là navigator.gpu, người dùng có thể lấy card đồ họa từ đây, sau đó lấy thiết bị từ card đồ họa, nhưng không có Canvas ở giữa.