Ngày 1 tháng 9, Hugging Face phát hành @huggingface/kernels, một thư viện loader JavaScript dùng để tải, chuẩn bị và chạy các kernel WebGPU đã được tối ưu từ Hub. Đi kèm là 207 kernel GPU đã tinh chỉnh sẵn, bao phủ nhân ma trận, chuẩn hóa, tích chập, các nguyên hàm attention, phép toán lượng tử hóa và chuyển đổi bố cục dữ liệu, trải rộng trên nhiều kiến trúc machine learning. Giấy phép là Apache-2.0.
Cách tổ chức mới là điểm khác thường nhất của dự án: mỗi kernel được phát hành như một repo độc lập, kèm theo định nghĩa interface, template shader, bộ kiểm thử tính đúng đắn và dữ liệu benchmark riêng. Khi đưa lên Hub, một kernel và một model được quản lý phiên bản, tải về và tham chiếu theo cùng một cơ chế.
809 bộ so sánh đối chứng
Hiệu năng được so sánh trực tiếp với ORT WebGPU 1.30.0-dev, dựa trên 809 trường hợp kiểm thử: tốc độ trung bình hình học nhanh hơn 2,57 lần, trung vị nhanh hơn 1,90 lần, tỷ số thắng-thua là 629 thắng, 176 thua, 4 hòa. Tách ra từng kernel riêng lẻ, Add nhanh hơn 3,52 lần, Softmax nhanh hơn 2,11 lần, LayerNormalization nhanh hơn 2,22 lần.
Tính nhanh thì tỷ lệ thắng vào khoảng 78%. Trung bình hình học 2,57 lần cao hơn rõ rệt so với trung vị 1,90 lần, cho thấy phân phối mức tăng tốc lệch phải — một số ít kernel tăng tốc cực mạnh, kéo giá trị trung bình lên cao. Mức tăng tốc cảm nhận được trên tải thực tế nhiều khả năng gần với mốc trung vị hơn là con số ấn tượng nhất trong phần quảng bá. Điều này không làm thay đổi kết luận, chỉ là đưa kỳ vọng về đúng vị trí.
Đi kèm còn có một công cụ benchmark chạy ngay trong trình duyệt tên là Fleet, theo hướng crowdsourcing: máy của ai chạy qua, bằng chứng về hiệu năng và tính đúng đắn sẽ được gửi ngược về. Mức độ phân mảnh phần cứng của WebGPU cao hơn hẳn so với CUDA phía server — GPU tích hợp, GPU rời, GPU di động, các cách triển khai trình duyệt khác nhau cho kết quả chênh lệch khá lớn, chỉ đo trên vài máy trong phòng lab thì không thấy được toàn cảnh. Chia việc kiểm thử ra cho người dùng là cách làm thực dụng.
Vì sao nút thắt nằm ở lớp kernel
Sức hút của việc chạy model ngay trên trình duyệt luôn rất rõ ràng: tính toán diễn ra trên thiết bị người dùng, server không phải trả tiền tính toán, dữ liệu cũng không cần rời khỏi máy. Rào cản khi triển khai thường không nằm ở định dạng model hay framework suy luận, mà nằm ở lớp kernel bên dưới — cùng một phép Softmax, viết tốt và viết bình thường tạo ra khác biệt giữa chạy real-time được hay không.
Trước đây lớp này chỉ có thể nâng cấp cùng với cả runtime suy luận. Muốn đổi sang một cách triển khai attention nhanh hơn, thường phải chờ framework ra bản mới. Sau khi tách thành các repo độc lập, kernel trở thành đơn vị có thể thay riêng, rollback riêng, gửi cải tiến riêng. Đổi một kernel nhân ma trận được tối ưu cho một dòng GPU cụ thể cho một model nào đó, về lý thuyết không cần động đến phần code còn lại.
Cách gọi cũng được rút gọn tối đa, lấy đối tượng kernel về là dùng như một hàm:
const add = await getKernel("webgpu-kernels/ai.onnx.Add", { version: 1 });Điều kiện để chạy là trình duyệt hỗ trợ WebGPU, cách kiểm tra chỉ cần một dòng "gpu" in navigator.
Bài toán với công cụ phía thiết bị
Bên hưởng lợi từ đợt cập nhật này khá cụ thể: các đội làm xử lý ảnh thuần trình duyệt, chuyển giọng nói thành văn bản tại chỗ, dịch offline, các công cụ nhạy cảm về quyền riêng tư. Mô hình kinh doanh của nhóm sản phẩm này dựa trên việc server chỉ phát file tĩnh, không gánh chi phí tính toán, nên quy mô model có thể nhét vừa vào trình duyệt phụ thuộc trực tiếp vào hiệu năng kernel. Kernel nhanh gấp đôi nói chung thì trần số tham số của model khả dụng cũng nhích lên một bậc, thao tác vốn phải chờ ba giây có thể rút xuống dưới một giây.
Phần dè dặt cũng cần nói rõ. Đối tượng so sánh benchmark là một bản dev của ORT WebGPU, đối thủ cũng đang liên tục cải tiến; 207 kernel nghe có vẻ nhiều nhưng chỉ phủ các phép toán phổ biến, gặp kiến trúc ít gặp vẫn phải tự viết. Mức hỗ trợ WebGPU trên các trình duyệt tuy đã phổ biến, nhưng chất lượng triển khai trên di động vẫn không đồng đều, hiệu năng trên nhiều thiết bị khác nhau cần tự dùng công cụ kiểu Fleet để đo thử.
Biến kernel thành tài nguyên có thể định danh, quản lý phiên bản, xác thực theo kiểu crowdsourcing là điều có ảnh hưởng lâu dài hơn so với việc chỉ nhanh gấp đôi. Trọng số model từ lâu đã được lưu chuyển theo cách này, hạ tầng code bắt kịp chỉ còn là vấn đề thời gian.
Nguồn tham khảo: blog chính thức của Hugging Face, CocoLoop, kho lưu trữ Hugging Face Hub; số lượng 207 kernel, 809 trường hợp kiểm thử, tốc độ trung bình hình học 2,57 lần và trung vị 1,90 lần, tỷ số thắng-thua 629-176-4 cùng mức tăng tốc từng kernel đều được đối chiếu theo công bố chính thức, phần tỷ lệ thắng và độ lệch phân phối là tính toán sơ bộ của biên tập viên.