RTX 30シリーズのAI性能が最大2倍に?話題の「gpu-unlock」を解説

[PR]記事内のアフィリエイトリンクから収入を得る場合があります
  • URLをコピーしました!

GitHubで公開された「gpu-unlock」というオープンソースのツールが海外で大きな話題になっています。GeForce RTX 30シリーズで、AI処理に使うBF16/FP16の行列演算が最大でほぼ2倍に速くなるという触れ込みで、公開から短期間でGitHubのスターは6,800を突破。WccftechやNotebookcheckといった海外の大手テックメディアも相次いで記事にしています。

この記事では、gpu-unlockとは何なのか、どんな仕組みで速くなるのか、そして試す前に知っておきたい注意点をまとめます。

目次

gpu-unlockとは

gpu-unlockは、開発者Zagitta氏が公開したLinux用のカーネルモジュールで、対象はAmpere世代(GA102/GA103/GA104/GA106)のRTX 30シリーズとなっています。

RTX 30シリーズのGeForceは、同じチップを使うプロ向けカード(RTX A6000など)と比べて、TensorコアでのFP16/BF16演算(FP32での累積)の命令発行レートが半分に絞られています。ハードウェアとしては同じ能力を持っているのに、製品として制限がかかっているわけです。gpu-unlockはこの制限を外し、プロ向けカードと同じ発行レートで動かせるようにします。

VBIOSの書き換えやハードウェアの改造は不要で、NVIDIAのドライバも公式のものをそのまま使えます。ドライバを更新するたびにパッチを当て直す必要がないのも、このツールが支持されている理由のひとつです。

仕組み:ドライバより先に動く

プロジェクトのベースになっているのは、マイニング向けCMPカードの制限を解除する「CMP unlocker」で見つかった手法です。gpu-unlockはそれを、NVIDIAドライバが読み込まれる前のブート直後に実行する形にまとめ直しました。

具体的には、モジュールをinitramfsに組み込んでおき、起動の早い段階でGPU内部の「speed selector」と呼ばれる設定値を書き換えます。その後、Function Level Reset(FLR)でカードをリセットし、普通のNVIDIAドライバにカードを引き渡します。ドライバから見ると、最初から制限のないカードがつながっているように見えるわけです。

ドライバが一度カードを掴んでしまうと、もう切り替えることはできず、起動した後からモジュールを手動で読み込んでも効果がないのはこのためです。

どれくらい速くなるのか

理論上は、FP16/BF16の行列演算がほぼ2倍になります。READMEやコミュニティからは、次のようなベンチマーク結果が報告されています。

カード

演算

解除前(TFLOPS)

解除後(TFLOPS)

RTX 3090 Ti(450W)

BF16

87.5

157.4

RTX 3090

BF16

77.5

129.6

RTX 3090

TF32

40.2

69.8

ただし、実際のアプリでの伸びはもう少し控えめです。READMEによると、密行列のGEMMで+25〜80%程度という報告が多いようです。電力制限の影響も大きく、225Wに絞られたカードでは伸びが最も小さかったそうです。

効果が出やすいのは、行列演算が中心の処理で、ComfyUI Wikiの検証では、RTX 3090 Tiでの画像生成が最大60%ほど速くなったと報告されています。ローカルLLMでも、プロンプトを読み込むprefillの部分やFlashAttentionは速くなります。

一方、LLMがトークンを生成するdecodeの部分は、ほとんど変わりません。decodeは演算性能よりもメモリ帯域がボトルネックになるためです。INT8の処理も対象外です。なお、解除の前後で計算結果がビッ

試す前に知っておきたい注意点

試す前に知っておきたい注意点として、本家のツールはLinux専用であるということがあります。Windows向けの実験的な移植版も存在しますが、特定の1台で起動できたという段階です。

また、画面出力に使っているカードでは、リセットからnvidia-drmが立ち上がるまで、画面が真っ暗になります。スリープら復帰すると解除状態が戻るため復帰まで1秒ほど時間がかかり、ハイバネーションには対応していません。

GPUの内部設定を直接書き換える非公式のハックで、試すのは自己責任となります。

導入の流れ

対応しているディストリビューションは、Arch系(CachyOS含む)、Debian/Ubuntu系、Fedora/RHEL系です。ブートローダはGRUBとsystemd-bootに対応しています。

インストールするには、リポジトリをクローンしてmake installを実行します。ビルド中にファームウェアをダウンロードするのでネット接続が必要です。

git clone https://github.com/Zagitta/gpu-unlock
cd gpu-unlock
make install

インストールしただけでは有効にならず、カーネルパラメータにgpu_unlock.targets=allを追加して初めて動きます。特定のカードだけを対象にしたい場合は、lspci-Dで調べたPCIアドレスを指定できます。

  • GRUB (Debian/Ubuntu/Mint): add it inside GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub, then run sudo update-grub.
  • GRUB (Arch/CachyOS): same edit, then run sudo grub-mkconfig -o /boot/grub/grub.cfg.
  • Fedora/RHEL: run sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all".
  • systemd-boot: append it to the options line in your boot entry (bootctl status shows its location).
  • UKI / generated entries: add it to /etc/kernel/cmdline and regenerate

再起動後にjournalctl-k-b | grep gpu_unlockでログを確認し、解除できたかを確かめます。元に戻したいときは、このパラメータを消すだけです。

RTX 3090/3090 Ti/3080/3070/3060 12GBでは解除できたという報告があります。一方、OEM版のRTX 3080 Ti 20GBでは、処理は通ったものの半速のままだったそうです。

まとめ

gpu-unlockは、発売から数年たったRTX 30シリーズに眠っていた演算性能を引き出すツールです。ドライバを改造せず、起動直後に設定を書き換えるだけという手軽さもあって、一気に注目を集めました。

ただし、恩恵を受けられるのは、Linuxで画像生成や学習、LLMのprefillなど行列演算中心の処理を回す人です。ゲームやLLMのチャット用途では、体感できるほどの変化は期待しにくそうです。手元にRTX 30シリーズがあってLinux環境を用意できるなら、サブマシンで試してみる価値はありそうです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次