Dự án mã nguồn mở gpu-unlock do nhà phát triển Zagitta đăng lên GitHub đã thu hút khoảng 8.100 sao và hơn 850 lượt fork chỉ trong khoảng một tuần. Việc nó làm rất cụ thể: gỡ giới hạn tốc độ của các lệnh FP16/BF16 Tensor Core trên card đồ họa GeForce RTX 30, không cần flash lại VBIOS và cũng không sửa driver của NVIDIA.
Các card GeForce dùng kiến trúc Ampere chỉ chạy nửa tốc độ ở loại lệnh nhân ma trận với đầu vào nửa độ chính xác và cộng dồn FP32. Mục tiêu của gpu-unlock là nhân đôi tốc độ phát lệnh này, áp dụng cho bốn nhân GA102, GA103, GA104 và GA106.
Cách thực hiện
gpu-unlock là một mô-đun nhân Linux. Tác giả mô tả nó là sự kết hợp giữa kỹ thuật V67/PLM từ công cụ mở khóa card đào CMP với thời điểm can thiệp “trước khi driver được nạp” của giải pháp UEFI trước đây. Mô-đun hoàn tất việc mở khóa trước khi driver NVIDIA tiếp quản card, ghi vào bộ chọn tốc độ rồi thực hiện một lần reset mức chức năng (FLR).
Lợi ích là chi phí bảo trì thấp. Đây không phải chương trình UEFI cũng không phải driver đã vá, nên mỗi khi NVIDIA phát hành driver mới, người dùng không phải vá lại.
Điều kiện kiểm thử RTX 3090 Ti mà tác giả công bố là GEMM dày đặc 8192³, công suất 450 W, cộng dồn FP32, lấy trung vị của năm lần đo:
| Độ chính xác đầu vào | Trước khi mở khóa | Sau khi mở khóa |
|---|---|---|
| FP16 | 87,46 TFLOPS | 118,39 TFLOPS |
| BF16 | 87,50 TFLOPS | 157,41 TFLOPS |
| TF32 | 42,58 TFLOPS | 82,61 TFLOPS |
Mức tăng BF16 do người dùng báo cáo khác nhau tùy từng card: RTX 3070 từ 73% đến 81%, 3080 10GB từ 70% đến 73%, 3060 12GB khoảng 80%, 3090 nằm trong khoảng 25% đến 67%, trong đó giá trị thấp nhất đến từ một card có giới hạn công suất 225 W. Các con số này đến từ bài đo riêng của từng người báo cáo nên không thể so sánh trực tiếp với nhau.
Khi áp dụng vào tác vụ thực tế
Những khâu nặng về phép toán ma trận sẽ nhanh lên rõ rệt: giai đoạn prefill khi suy luận mô hình lớn được báo cáo tăng 14% đến 36%, mô hình khuếch tán và FlashAttention cũng được hưởng lợi. Việc sinh từng token của mô hình lớn bị giới hạn bởi băng thông VRAM, còn các tác vụ INT8 đi theo một đường khác, nên hai loại này về cơ bản không đổi. Những người dùng đã so sánh đầu ra cho biết kết quả tính toán trước và sau khi mở khóa giống nhau từng bit.
Vì vậy, mức “tăng gần tám phần mười sức mạnh” chủ yếu là đỉnh lý thuyết. Khi chạy chat với mô hình lớn cục bộ hằng ngày, thay đổi dễ nhận thấy nhất là việc đọc các prompt dài nhanh hơn, còn tốc độ ra chữ thay đổi không nhiều. Hiện chưa có thử nghiệm độc lập nào về ảnh hưởng đến tốc độ khung hình khi chơi game.
Với người chơi card cũ tại Trung Quốc
Trong cộng đồng triển khai cục bộ ở Trung Quốc, RTX 3090 đã qua sử dụng và RTX 3080 20GB độ lại VRAM luôn là lựa chọn đáng tiền. Bảng tương thích của dự án có hẳn một dòng “RTX 3080 20 GB (độ lại VRAM)” với mức tăng được báo cáo từ 56% đến 59%, cho thấy các card độ cũng hưởng được lần mở khóa này.
Rào cản nằm ở hệ điều hành. Mô-đun hiện chỉ hỗ trợ Linux, cung cấp gói cài đặt cho họ Arch, Debian/Ubuntu và Fedora, và cần được bật rõ ràng trong tham số khởi động nhân; nạp thủ công sau khi máy đã khởi động sẽ không có tác dụng. Người dùng Windows chỉ có thể dùng bản chuyển UEFI của cộng đồng, chẳng hạn 3070 Ti hiện mới chỉ được xác nhận trên hướng này.
Tác giả cũng liệt kê khá nhiều hạn chế:
- Sau khi treo vào RAM, card sẽ được mở khóa lại, mất thêm khoảng 1 giây; chế độ ngủ đông không được hỗ trợ;
- Card đang nối màn hình sẽ bị đen màn hình ngắn khi reset để mở khóa;
- Với một số card mà firmware không dừng lại được, cần ngắt nguồn rồi thử lại;
- RTX 3080 Ti bản OEM sau khi mở khóa vẫn chạy BF16 ở nửa tốc độ, còn GA103 chưa có báo cáo.
Dự án được mở nguồn theo giấy phép GPL-2.0. README không bàn đến việc thay đổi giới hạn tốc độ xuất xưởng của card có ảnh hưởng đến bảo hành hay không, và NVIDIA hiện cũng chưa có phản hồi công khai; người dùng định thử trên máy chính cần tự cân nhắc.
Nguồn tham khảo: README của dự án gpu-unlock, GameApps.hk, CocoLoop; số sao và fork được đối chiếu với dữ liệu kho GitHub, TFLOPS và các khoảng mức tăng theo từng mẫu card được đối chiếu với bảng benchmark trong README.