Zagittaは、NVIDIA GeForce RTX 3000シリーズのFP/BF16命令発行レートをプロ向け相当に引き上げるLinuxカーネルモジュール「GPU unlock 1.0.0」をGitHubで公開しています。RTX 3090 Tiの密行列GEMMでは、BF16が87.50 TFLOPSから157.41 TFLOPSに向上しました。
何が新しいか
このモジュールは、CMP unlockerのV67/PLM手法とUEFI方式のプリドライバー・タイミングを組み合わせています。未改変のNVIDIAドライバーがカードへバインドする前に速度セレクター(フルBF16レートを選ぶSS0 0x88888888 と4ビットのSS1 0x8 IMLA4)を書き込み、FLRを実行します。UEFIアプリケーションでもパッチ済みNVIDIAドライバーでもないため、NVIDIAが新しいドライバーを出すたびに手動でパッチを当てる必要がありません。効果はGA102/GA103/GA104/GA106でのFP/BF16 FMA(FP32累積)の命令発行速度の倍増です。リポジトリのスター数は2.1k、フォーク数は246です。
ベンチマーク
RTX 3090 Ti、450 W、dense 8192³ GEMM、FP32累積、5サンプルの中央値です。
| 入力 | 解除前 | 解除後 |
|---|---|---|
| FP16 | 87.46 TFLOPS | 118.39 TFLOPS |
| BF16 | 87.50 TFLOPS | 157.41 TFLOPS |
| TF32 | 42.58 TFLOPS | 82.61 TFLOPS |
ユーザー報告によるBF16 GEMMの向上幅は次のとおりです。各報告のベンチマーク条件が異なるため直接比較はできず、電力制限の影響が大きく、最低値の+25%は225 W制限のカードによるものです。
| チップ | カード | 結果 |
|---|---|---|
| GA102 | RTX 3090 Ti | +68–80% |
| GA102 | RTX 3090 | +25–67% |
| GA102 | RTX 3080 Ti 20 GB(OEM, GA102-250) | 解除は完了するがBF16は半分のレートのまま |
| GA102 | RTX 3080 10 GB | +70–73% |
| GA102 | RTX 3080 20 GB(メモリ換装) | +56–59% |
| GA104 | RTX 3070 | +73–81% |
| GA104 | RTX 3070 Ti | 本モジュールでは未検証(WindowsのUEFI移植版では動作) |
| GA106 | RTX 3060 12 GB | 約+80% |
| GA103 | 全般 | 報告なし |
報告では、LLMプリフィル(+14–36%)、拡散処理、FlashAttentionが高速化しました。メモリ帯域律速のLLMデコードとINT8処理はほぼ変わりませんでした。出力を比較した報告では、解除前後でビット単位で同一でした。1台に最大4枚、ディスプレイ出力中のカード、vfio-pciでVMにパススルーしたカードでの報告もあります。
導入手順
Linux上で次を実行します。
git clone https://github.com/Zagitta/gpu-unlock
cd gpu-unlock
make install
make install は /etc/os-release からArch、Debian/Ubuntu、Fedora/RHEL系を判定します。明示的に make install-arch / make install-deb / make install-rpm も選べます。その後、カーネルコマンドラインに gpu_unlock.targets=all を追加します。
- GRUB(Debian/Ubuntu/Mint):
/etc/default/grubのGRUB_CMDLINE_LINUX_DEFAULTに追加しsudo update-grub - GRUB(Arch/CachyOS): 同様に編集し
sudo grub-mkconfig -o /boot/grub/grub.cfg - Fedora/RHEL:
sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all" - systemd-boot: ブートエントリのoptions行に追加
- UKI/生成エントリ:
/etc/kernel/cmdlineに追加し、ブートイメージやエントリを再生成(例:sudo mkinitcpio -P)
特定カードのみ対象にする場合は、lspci -D 形式の完全なPCIアドレスを gpu_unlock.targets=0000:21:00.0 のように指定し、複数はカンマ区切りにします。結果は journalctl -k -b | grep gpu_unlock と lspci -nnk -s 0000:21:00.0 で確認できます。停止するにはカーネルコマンドラインから gpu_unlock.targets= を削除します。
動作上の注意
- 対象は未バインドのGA102/GA103/GA104/GA106カードのみです。起動後に手動でロードしても、nvidiaがバインド済みのカードには何もしません。
- ディスプレイ用カードは、リセットからnvidia-drmが引き継ぐまで画面が消えます。
- サスペンド(RAM)で速度セレクターがリセットされるため、レジューム時に再解除し、所要時間が約1秒増えます。
gpu_unlock.resume=0で無効化できます。ハイバネーションは対象外です。 - カーネルモジュールとローカルパッケージングはGPL-2.0-onlyです。生成ペイロード由来のNVIDIAファームウェアはNVIDIA側の条件に従います。

まだコメントはありません。