Dự án mã nguồn mở mở khóa hiệu năng FP/BF16 trên GPU Nvidia RTX 30 series
Một module nhân Linux mã nguồn mở mang tên gpu-unlock cho phép tăng gấp đôi tốc độ phát lệnh FP/BF16 FMA trên các card đồ họa Nvidia GA102, GA103, GA104 và GA106, đưa chúng tiến gần hơn tới phiên bản chuyên nghiệp. Thử nghiệm trên RTX 3090 Ti cho thấy hiệu năng BF16 tăng từ 87,5 lên 157,4 TFLOPS, trong khi cách cài đặt khá đơn giản và không cần vá lại driver mỗi lần Nvidia ra bản mới.

Trên các dòng card đồ họa GeForce RTX 30 series, Nvidia vốn giới hạn tốc độ phát lệnh cho các phép tính FP/BF16 FMA ở mức thấp hơn so với các mẫu card chuyên nghiệp dùng cùng vi xử lý. Một dự án mã nguồn mở mới trên GitHub mang tên gpu-unlock đang thu hút sự chú ý của cộng đồng khi tìm ra cách gỡ bỏ giới hạn này ngay ở tầng nhân hệ điều hành.
Gỡ giới hạn ngay trước khi driver Nvidia nạp
Dự án gpu-unlock 1.0.0 là một module nhân Linux kết hợp kỹ thuật V67/PLM của công cụ CMP unlocker với cách căn thời gian tiền driver của phương pháp UEFI. Module này chạy quá trình mở khóa, ghi các bộ chọn tốc độ — bao gồm SS0 0x88888888 (chọn tốc độ BF16 đầy đủ) và SS1 0x8 IMLA4 (4 bit) — rồi thực hiện FLR trước khi driver Nvidia nguyên bản nhận card.
Điểm khác biệt quan trọng: gpu-unlock không phải một ứng dụng UEFI, cũng không phải một bản driver Nvidia đã vá. Nhờ vậy, người dùng không cần mất công vá lại thủ công mỗi khi Nvidia phát hành phiên bản driver mới.
Hiệu quả của thủ thuật này là tăng gấp đôi tốc độ phát lệnh các phép FMA FP/BF16 chuyển thành toán tử FP32 trên các chip GA102, GA103, GA104 và GA106.
Con số thực tế trên RTX 3090 Ti
Kết quả đo đạc với phép nhân ma trận GEMM dense 8192³ ở mức công suất 450 W (lấy trung vị của năm lần đo, tích lũy FP32) cho thấy mức cải thiện đáng kể:
- FP16: từ 87,46 TFLOPS lên 118,39 TFLOPS
- BF16: từ 87,50 TFLOPS lên 157,41 TFLOPS
- TF32: từ 42,58 TFLOPS lên 82,61 TFLOPS
Đáng chú ý nhất là BF16 khi hiệu năng tăng gần 80%, tiệm cận ngưỡng lý thuyết mà các card chuyên nghiệp cùng kiến trúc có thể đạt được.
Đây là một trong những can thiệp phần mềm hiếm hoi có thể khai thác phần cứng vốn đã bị khóa bằng firmware, mà không cần đụng tới phần cứng vật lý.
Cài đặt và cấu hình
Quy trình cài đặt được thiết kế khá gọn. Người dùng chỉ cần nhân bản kho mã nguồn rồi chạy make install. Sau đó, thêm tham số gpu_unlock.targets=all vào dòng lệnh khởi động nhân (kernel command line), giữ nguyên các tùy chọn hiện có.
Cách thực hiện cụ thể tùy theo hệ điều hành:
- GRUB (Debian/Ubuntu/Mint): thêm tham số vào
GRUB_CMDLINE_LINUX_DEFAULTtrong/etc/default/grub, sau đó chạysudo update-grub. - GRUB (Arch/CachyOS): chỉnh sửa tương tự rồi chạy
sudo grub-mkconfig -o /boot/grub/grub.cfg. - Fedora/RHEL: chạy lệnh
sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all". - systemd-boot: thêm tham số vào dòng options trong mục boot entry (dùng
bootctl statusđể xem vị trí). - UKI hoặc entry tự sinh: thêm vào
/etc/kernel/cmdlinerồi tái tạo ảnh khởi động.
Dự án hỗ trợ ba định dạng đóng gói phổ biến là Arch (makepkg), Debian (dpkg) và RPM (dnf/rpmbuild), với các mục tiêu make install-arch, make install-deb và make install-rpm. Lệnh make install sẽ tự nhận diện bản phân phối thông qua /etc/os-release để chọn trình cài đặt phù hợp.
Cơ chế nạp qua initramfs
Các gói cài đặt sẽ đưa module gpu_unlock và firmware của nó vào initramfs, nạp tại đó trước khi driver Nvidia có thể nhận card. Module được chèn ngay trước nvidia trong danh sách MODULES với mkinitcpio, giúp giảm thiểu thời gian màn hình bị trống.
Với initramfs-tools và dracut, module được biên dịch cho mọi nhân đã cài có header đi kèm, và ảnh khởi động được tái tạo mỗi lần cài hoặc gỡ.
Module chỉ hoạt động khi dòng lệnh nhân chủ động bật (opt-in):
gpu_unlock.targets=all— mở khóa mọi card GA102/GA103/GA104/GA106 chưa được gán drivergpu_unlock.targets=0000:21:00.0— chỉ định một card cụ thể theo địa chỉ PCI- Có thể liệt kê nhiều địa chỉ, phân tách bằng dấu phẩy
Các card được mở khóa song song, mất khoảng một giây bất kể số lượng. Một card đã được driver nhận hoặc đã tắt nguồn sẽ bị bỏ qua. Card hiển thị (display card) cũng được hỗ trợ.
Lưu ý về chế độ ngủ và khôi phục
Suspend to RAM sẽ tắt nguồn card và đặt lại các bộ chọn tốc độ. Sau khi khôi phục, module tự động mở khóa lại mọi card đã mở khóa lúc khởi động, chạy trước notifier của Nvidia. Việc này cộng thêm khoảng một giây vào thời gian resume.
Người dùng có thể tắt tính năng này bằng tham số gpu_unlock.resume=0. Cần lưu ý rằng hibernation (ngủ đông) không được hỗ trợ.
Để kiểm tra kết quả, có thể dùng lệnh journalctl -k -b | grep gpu_unlock hoặc lspci -nnk -s 0000:21:00.0. Muốn ngừng mở khóa, chỉ cần xóa gpu_unlock.targets= khỏi dòng lệnh nhân.
Giấy phép và góc nhìn cho người dùng Việt Nam
Module nhân và phần đóng gói cục bộ phát hành theo giấy phép GPL-2.0-only. Phần payload sinh ra có nguồn gốc từ tham chiếu CMP được ghim phiên bản, trong khi firmware Nvidia vẫn tuân theo các điều khoản riêng của hãng.
Với cộng đồng người dùng GPU tại Việt Nam — đặc biệt là những ai làm việc với huấn luyện mô hình AI, suy luận BF16 hoặc các bài toán tính toán hiệu năng cao trên RTX 3090/3080 — dự án này mở ra triển vọng tận dụng tối đa phần cứng sẵn có mà không phải đầu tư thêm vào các dòng card chuyên nghiệp có giá cao gấp nhiều lần. Tuy nhiên, người dùng cần cân nhắc kỹ vì đây là thao tác can thiệp ở tầng thấp, có thể ảnh hưởng tới độ ổn định và điều kiện bảo hành của thiết bị.


