開源模組解鎖 RTX 30 的 BF16,算力增近八成

Open source illustration: hands joining branches to a shared node tree

開發者 Zagitta 在 GitHub 上釋出的開源專案 gpu-unlock,一週左右累積了約 8100 個星標、850 多個 fork。它做的事情很具體:解除 GeForce RTX 30 系列顯示卡在 FP16/BF16 Tensor Core 指令上的速率限制,既不刷寫 VBIOS,也不修改輝達驅動程式。

GeForce 版 Ampere 顯示卡在「半精度輸入、FP32 累加」這類矩陣乘法指令上只以一半速率運行,gpu-unlock 的目標是把這條指令的發射速率加倍,涵蓋 GA102、GA103、GA104、GA106 四顆核心。

運作原理

gpu-unlock 是一個 Linux 核心模組,作者形容它結合了 CMP 礦卡解鎖器的 V67/PLM 技術,以及先前 UEFI 方案「在驅動程式載入前動手」的時機。模組會在輝達驅動程式接管顯示卡之前完成解鎖,寫入速度選擇器,再執行一次功能層級重置(FLR)。

這樣做的好處是維護成本低。它既不是 UEFI 程式,也不是打過補丁的驅動程式,輝達每推出一版新驅動,使用者不必再重新打一次補丁。

作者提供的 RTX 3090 Ti 測試條件為 8192³ 稠密 GEMM、450 W 功耗、FP32 累加,取五次取樣的中位數:

輸入精度解鎖前解鎖後
FP1687.46 TFLOPS118.39 TFLOPS
BF1687.50 TFLOPS157.41 TFLOPS
TF3242.58 TFLOPS82.61 TFLOPS

使用者回報的 BF16 提升幅度因卡而異:RTX 3070 為 73% 到 81%,3080 10GB 為 70% 到 73%,3060 12GB 約 80%,3090 介於 25% 到 67%,最低值來自一張功耗上限 225 W 的顯示卡。這些數字來自各回報者自己的基準測試,不能直接橫向比較。

落到實際負載上

矩陣運算密集的環節會明顯變快,大型語言模型推論的預填充階段據報提升 14% 到 36%,擴散模型與 FlashAttention 也能受益。大型語言模型的逐詞生成受記憶體頻寬限制,INT8 負載走的則是另一條路徑,這兩類基本上不變。比對過輸出的使用者回報,解鎖前後的運算結果逐位元一致。

因此「算力增八成」主要是理論峰值。日常執行本地大型語言模型聊天,體感最明顯的是長提示詞讀入更快,出字速度變化不大。至於遊戲幀率是否受影響,目前沒有獨立測試。

對中國二手卡玩家而言

在中國的本地部署圈子裡,二手 3090 和記憶體改裝的 3080 20GB 一直是高性價比的選擇。專案的相容表中就有一列「RTX 3080 20 GB(記憶體改裝)」,回報提升 56% 到 59%,顯示改裝卡也能享受這次解鎖。

門檻在作業系統。模組目前僅支援 Linux,提供 Arch、Debian/Ubuntu、Fedora 系的安裝套件,必須在核心開機參數中明確啟用;開機後再手動載入無效。Windows 使用者只能參考社群的 UEFI 移植版,例如 3070 Ti 目前只在那條路線上驗證過。

作者列出的限制也不少:

  • 睡眠至記憶體後會重新解鎖,多花約 1 秒,不支援休眠;
  • 解鎖重置時,接著螢幕的顯示卡會短暫黑屏;
  • 個別顯示卡的韌體停不下來時,須先斷電再重試;
  • OEM 版 3080 Ti 解鎖後 BF16 仍是半速,GA103 尚無回報。

專案以 GPL-2.0 授權開源。改變顯示卡出廠限速是否影響保固,README 並未討論,輝達目前也沒有公開回應,打算在主力機上嘗試的使用者需自行權衡。

參考來源:gpu-unlock 專案 README、香港手機遊戲網 GameApps.hk、CocoLoop;星標與 fork 數量以 GitHub 儲存庫資料核對,TFLOPS 數據及各型號提升區間以 README 基準表核對。