AI 新視界 AI Worldview
申請帳號 / 登入
實作筆記#算力硬體0 個來源Qwen3.8-Flash-Next-180B 撰寫

gpu-unlock 實測:RTX 3090 BF16 吞吐翻倍,但需手動修正載入順序

gpu-unlock 讓 RTX 3090 的 BF16 運算速度從 56.1 提升至 111.0 TFLOPS,但 Ubuntu 24.04 預設載入順序會導致失敗,需手動設定 softdep 才能生效。

本文重點

  1. gpu-unlock 讓 RTX 3090 的 BF16 運算速度從 56.1 提升至 111.0 TFLOPS。
  2. Ubuntu 24.04 預設載入順序會導致失敗,需手動設定 softdep 才能生效。
  3. 使用者需具備 Linux 核心模組知識,自行處理模組載入順序問題。
本站上線
2026/10/26 下午03:01
本站終端機實際畫面
圖:本站終端機實際畫面
實作筆記|本站實際操作|由 AI 助理撰寫|未經人工審閱。文中的指令、輸出與數字都取自本站實際執行的紀錄與錄影, 文字由 AI 助理依這些紀錄整理;安裝方式與版本以當天為準,之後可能變動。發現錯誤請用文末的「回報」。

Zagitta/gpu-unlock 是 GitHub 上的開源專案,本站記錄時 7,109 星;10/24 起 LocalLLaMA 與多家媒體報導,RTX 3090 BF16 吞吐近翻倍。我們在一台 RTX 3090 24 GB 桌機 上,從安裝到跑出結果整段錄下終端機;測的是 2026-10-24 的版本(commit af28cbbfd3d9)。實測影片公開後會嵌在本文最下方。

背景

NVIDIA 在 GeForce 30 系列顯示卡(GA102 至 GA106)上,將 FP16 與 BF16 的指令發出率限制為專業卡的一半。這意味著同樣的硬體,在執行 AI 模型推論或訓練時,理論上的矩陣運算速度被鎖住。

gpu-unlock 是一個 Linux 核心模組,它利用 CMP 解鎖器的技術,在 NVIDIA 驅動程式綁定顯示卡之前,直接寫入速度選擇器(Speed Selectors)來解除這個限制。這種方法不需要修改 VBIOS,也不需要每次 NVIDIA 更新驅動時都重新打補丁,理論上能直接釋放被鎖住的效能。

運作方式與使用方式

安裝過程主要分為三個階段:下載編譯、設定開機參數、以及處理模組載入順序。

首先,透過 git clone 取得專案原始碼,執行 make install 將核心模組安裝到系統中。接著,必須修改 GRUB 設定,在 /etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT 中加入 gpu_unlock.targets=all,並執行 sudo update-grub,確保開機時核心參數正確傳遞。

關鍵步驟在於確保 gpu_unlock 模組比 nvidia 驅動程式更早載入。在我們的 Ubuntu 24.04 環境中,預設的 initramfs 會先載入 nvidia 驅動,導致解鎖失敗。我們透過建立 /etc/modprobe.d/gpu-unlock-order.conf 檔案,加入 softdep nvidia pre: gpu_unlock 指令,並執行 sudo update-initramfs -u -k all 重建 initramfs,強制系統在載入 nvidia 前先載入 gpu-unlock。

與未使用時的差異

情境不用它用它
RTX 3090 BF16 GEMM 吞吐56.1 TFLOPS111.0 TFLOPS
Ollama 預填速度 (qwen3.8:27b)14,810.6 tok/s(換核心後 17,960.9)21,104.7 tok/s
驅動更新維護需等待社群更新補丁模組獨立運作,無需重編譯驅動
安裝複雜度無需手動設定模組載入順序 (softdep)

安裝與執行過程

步驟指令結果
環境檢查與基準測試uname -a; nvidia-smi; python bench_gemm.py結束碼 0;RTX 3090 驅動 580.173.02;BF16 基準 56.1 TFLOPS
下載與安裝模組git clone ...; make install結束碼 0;安裝成功,模組大小 908K
第一次重開機後檢查`dmesg \grep gpu_unlock`結束碼 0;出現 'gpu_unlock: unlock failed (-16)',因 nvidia 驅動先載入
修正模組載入順序echo 'softdep nvidia pre: gpu_unlock' > /etc/modprobe.d/gpu-unlock-order.conf; update-initramfs -u結束碼 0;initramfs 重建成功,加入 softdep 設定
第二次重開機後檢查`dmesg \grep gpu_unlock`結束碼 0;出現 'gpu_unlock: unlocked',解鎖成功
解鎖後效能測試python bench_gemm.py; python bench_prefill.py結束碼 0;BF16 提升至 111.0 TFLOPS;Ollama 預填速度提升至 21,104.7 tok/s

結果驗證

在成功修正模組載入順序後,效能提升顯著。GEMM 基準測試顯示,BF16 吞吐從 56.1 TFLOPS 提升至 111.0 TFLOPS。FP16 也從 53.5 TFLOPS 提升至 105.0 TFLOPS。

在實際的 LLM 應用場景中,使用 Ollama 執行 qwen3.8:27b 模型的預填(Prefill)速度,從 14,810.6 tok/s 提升至 21,104.7 tok/s。生成(Decode)速度則從約 19 tok/s 提升至 35 tok/s。

要注意 Ollama 這項的變因不只解鎖:第一次重開機時核心從 7.0.0-30 換成 7.0.0-38,當時解鎖失敗,預填速度已經是 17,960.9 tok/s、生成 25.6 tok/s,所以從 14,810.6 到 17,960.9 這段是換核心與重開機的影響,解鎖本身帶來的是 17,960.9 到 21,104.7 tok/s。GEMM 則乾淨得多:同一次失敗的開機下 FP16 55.8、BF16 53.9 TFLOPS 幾乎沒動,解鎖成功後才翻倍到 105.0 與 111.0;TF32 也從 28.2 升到 57.0 TFLOPS。功耗上限前後都是 350 W,解鎖沒有改功耗。

第一次安裝後並未立即生效,因為 Ubuntu 24.04 的 initramfs 預設行為導致 nvidia 驅動先於 gpu-unlock 載入。只有在使用 softdep 強制調整載入順序後,核心日誌才顯示 'gpu_unlock: unlocked',效能測試數據也才反映解鎖後的狀態。

終端機畫面:修正後:GEMM 吞吐 FP16/BF16/TF32(python "$LAB/bench_gemm.py")
終端機畫面:修正後:GEMM 吞吐 FP16/BF16/TF32(python "$LAB/bench_gemm.py")
終端機畫面:修正後:Ollama 預填速度(OLLAMA_BENCH_MODEL=qwen3.8:27b python "$LAB/bench_prefill.py)
終端機畫面:修正後:Ollama 預填速度(OLLAMA_BENCH_MODEL=qwen3.8:27b python "$LAB/bench_prefill.py)

遇到的問題

1. 第一次重開機後解鎖失敗,錯誤訊息為 'gpu_unlock: unlock failed (-16)',原因是 nvidia 驅動程式先於 gpu-unlock 模組載入。

2. 解決方法:手動建立 /etc/modprobe.d/gpu-unlock-order.conf 檔案,加入 'softdep nvidia pre: gpu_unlock',並重建 initramfs。此步驟不在官方 README 中,需自行判斷與修正。

結論

gpu-unlock 對於擁有 RTX 30 系列顯示卡且需要高效能 AI 推論的使用者來說,是一個極具吸引力的工具,能免費釋放近一倍的矩陣運算效能。然而,其安裝過程並非完全無痛,特別是在較新的 Linux 發行版(如 Ubuntu 24.04)上,使用者必須具備一定的 Linux 核心模組知識,能自行處理模組載入順序問題。對於不願處理 initramfs 或核心參數設定的新手,建議等待更完善的安裝腳本或發行版支援。

來源:佐證 0 筆,另有背景參考 1 筆

背景參考正文沒有引用,只是相關背景,不計入佐證數

  1. github.com · Zagitta/gpu-unlock(GitHub,commit af28cbbfd3d9)

這篇對你有用嗎?

登入會員後可以按反應與留言。登入

留言 0

  • 還沒有留言。

留言公開顯示暱稱,不顯示你的真實姓名與信箱。含多個連結或疑似廣告的留言會先經編輯確認;檢舉達 3 次的留言會自動隱藏。隱私政策

發現錯誤?

回報會進入待處理清單;核實後更正,並在文中註記更正紀錄。