gpu-unlock、RTX 3090 TiのBF16 GEMMを157.41 TFLOPSへ引き上げ

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側の条件に従います。

この記事の固有名詞

コメント (0)

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

コメントを書く

2000文字以内