gpu unlock が取り戻すもの、取り戻さないもの
取り戻せるのは1つだけです。FP32 累積を使う FP16、BF16、TF32 の演算で、テンソルコアの発行レートが戻ります。これが gpu unlock を使う理由です。 [公式 README]
+65–87%
合成 GEMM の向上率
カードごと、純正の電力制限のまま。
[公式 README]
この分かれ目が判断のすべてです。プレフィル、ファインチューニング、画像生成は速くなります。チャットのデコードは速くなりません。
戻るもの
プレフィルとプロンプト処理 · 最初のトークンまでの時間 · LoRA と BF16 のファインチューニング · 画像生成 · FlashAttention カーネル。
変わらないもの
トークンのデコード · INT8、FP8、INT4 の推論 · ゲーム · 通常の FP32 CUDA 処理。
この分かれ目で、午後を費やす価値があるか決まります。以下の数値はここで測ったものではありません。範囲はすべてプロジェクト自身の公表値です。
gpu unlock がチップの中で戻すもの
FP16、BF16、TF32 の発行を司るレジスタブロックがあります。NVIDIA はそこにある8つの4ビット速度セレクタを、半分のレートのまま残しています。そのため同じダイでも、プロ向けの同型カードの半分のテンソルスループットしか報告しません。純正ドライバーには、そこから GeForce のテンソルコア性能をアンロックする手段がありません。セレクタは特権ビットの奥にあり、ドライバーはそのビットを立てられないからです。モジュールは heavy-secure コンテキストの内側から1回だけ書き込みます。セレクタを反転させ、カードをリセットします。すると未改変のドライバーが、フルスピードを報告するデバイスとしてカードを認識します。 [公式 README]
決め手は3つのレジスタで、いずれもプロジェクトの仕組み解説に書かれています。0x0082381c の SS0 には8つの4ビットセレクタがあります。DP、FFMA、FMLA16、FMLA32、IMLA0〜IMLA3 です。それぞれに1ビットのオーバーライドと3ビットのレートがあります。0x00823820 の SS1 は、もう1つ(IMLA4)を扱います。
コンシューマー向けカードでは、FP16、BF16、TF32 を司るフィールドが半分の値になっています。すべてのフィールドを「オーバーライド有効・フルレート」にすると、SS0 = 0x88888888、SS1 = 0x8 になります。
出荷時のまま(デフォルト)
0.5×SS0 = 0x00000001, SS1 = 0x00000001。FP16、BF16、TF32 のセレクタは半分のレートです。
書き込み後
1×SS0 = 0x88888888, SS1 = 0x8。全フィールドでオーバーライド有効、フルレートです。
デフォルトの PLM 値を見ると、ユーザー空間から書けない理由が分かります。0xffffff8f の下位は 1000 1111 です。下位4ビットは4つの特権レベルすべてに読み取りを許します。ビット7:4 が 1000 なので、書き込みは L3(heavy-secure コンテキスト)だけに許されます。ほかからのストアは黙って捨てられます。 [公式 README] その特権ビット1つのせいで、エクスプロイトが必要になります。
フラッシュは行いません。ドライバーのファイルも置き換えません。カード自身に変更は残りません。そのコンテキストの内側に1回のストアを通す書き込み連鎖は、次の節で説明します。
gpu unlock が柵の反対側から1回の書き込みを通す仕組み
リーク
デバッグ版ファームウェアの流出
NVIDIA はかつて、製品版イメージと一緒にデバッグ署名付きの Booter ファームウェアを出荷しました。デバッグ版は既知のテストキーを使うため、復号して中身を解析できました。オーバーフロー
スタックオーバーフロー
そこから出てきたものの1つが、SEC2 プロセッサの古典的なオーバーフローです。バッファをあふれさせて戻りアドレスを握れば、セキュアプロセッサは好きな連鎖をたどります。1回の書き込み
4バイトの書き込み1回
そこから得られたペイロード v67 にできる有用なことは1つだけです。選んだアドレスに4バイトを書き込むことです。連鎖
6回をつないで使う
recipes.c では、Ampere の連鎖は6回の書き込みです。フレームは 0x18 バイトで、スタックオフセット 0xff54 から始まり、0xffe4 から後片付けをします。この連鎖は、1回を PLM に届けるためにあります。[公式 README]
アンロック
柵が下りる
PLM が 0xFFFFFFFF になれば、ホストは通常の PCI コンフィグアクセスで2つの速度レジスタを設定できます。続いてファンクションレベルのリセットを行います。カードは、設定したばかりのレートを報告して戻ってきます。
Ada も同じ本体(書き込み連鎖の中身)を使い、アドレスだけをファームウェアのマップで置き換えます。0x686 は 0x1e02、0x1110 は 0x257e、0x84c8 は 0x7a02、0x81ee は 0x771e になります。 [公式 README]
この置き換えがあるため、新しい世代は小さなパッチでは済みません。実際に読める booter の中から、同等の書き込みを見つける必要があります。
カード別に見る gpu unlock の効果
RTX 3060 12 GB
+87%2751RTX 3060 Ti
+82%3768RTX 3070
+81%4072RTX 3080 10 GB
+73%65113RTX 3090
+65%75125RTX 3090 Ti (450 W)
+80%88157RTX 4070 Ti
+84%81150RTX 4080
+87%104193RTX 4090
+100%(ピーク)165329
データ待ち
変更前後の組が公表されていないカード
プロジェクトはカードごとに BF16 の組を1つ公表しています。この一覧にないボードは、推定せずに描画していません。
GeForce のテンソルコア性能をアンロックして実際に得られるものは、次の2つで決まります。1つは、処理がアンロックされた経路を通るかどうか。もう1つは、カードに許された電力がどれだけかです。
効果が出る処理
LLM のプレフィル / プロンプト
25–55%計算律速で、本来は無効化されている経路を使います。 [公式 README]
最初のトークンまでの時間
25–30%同じプレフィル処理を、時間の側から見た値です(増えるのではなく、短くなります)。 [公式 README]
LoRA と BF16 のファインチューニング
25–50%FP32 累積を使う大きな GEMM です。 [公式 README]
画像生成
30–55%各拡散ブロックの FP16 行列積です。 [公式 README]
動画生成(BF16)
15–20%同じ演算ですが、実行時間の多くをそれ以外が占めます。 [公式 README]
FlashAttention / SDPA
50–60%カーネルレベル。スケジューリングのオーバーヘッドを含みません。 [公式 README]
llama.cpp / Ollama
0–15%帯域律速で、主に長いコンテキストで効きます。 [公式 README]
トークンのデコード
なしメモリ律速です。発行レートは律速要因ではありません。 [公式 README]
INT8、FP8、INT4
なしこれらの経路はセレクタに触れません。 [公式 README]
ゲームと FP32 CUDA
なしテンソル演算ではありません。 [公式 README]
上限のうちどこまで残せるかは、電力制限で決まります。 [公式 README] 1枚の 3090 を、同じクロックで5つの電力制限で測った報告値です。
- RTX 3090 1枚、ワークロード1つ、電力制限5段階。報告された値で、 ここで再現したものではありません。 [issue #107]
250 W
- 報告された向上率
- +25%
275 W
- 報告された向上率
- +35%
300 W
- 報告された向上率
- +42%
350 W
- 報告された向上率
- +48%
375 W
- 報告された向上率
- +50%
4090 の例では、テンソルコアより先に電力が尽きます。行列積のピークは +100%、PyTorch の matmul は 0%〜5% です。 [issue #218]
どちらも、手元のマシンでの約束ではありません。公表されているエンドツーエンドの測定はこの2つだけで、どちらも同じことを示します。上限はレジスタではなくカードの側にあります。
自分のカードは gpu unlock の一覧にあるか
Ampere (RTX 30)
51 IDs安定
長期間のユーザー報告が積み上がっている唯一の世代です。
Ada (RTX 40)
17 IDs試験的
動作します。4090 ではテンソルコアより先に電力が尽きます。
Turing (RTX 20)
19 IDs試験的
公開されている失敗報告のうち3件が、同じエラーで終わっています。
GA100 (A100)
—未掲載
ソースにはファミリーがありますが、デバイスIDがありません。A100 は対象外です。
GA107 (RTX 3050)
—パッチ待ち
コミュニティのパッチはありますが、未マージのままです。アップデート後も残るとは考えないでください。
Blackwell (RTX 50)
—未対応
FAQ では実現は難しいとされています。booter の世代が変わったためです。
- 安定cards[] にあり、報告も一致
- 試験的cards[] にあり、報告は少ない
- パッチ待ちコミュニティのみ
- 未対応現時点で手段なし
対応リストは cards[] にある87個の PCIデバイスIDです。3世代に分かれています。モデル名は判定の基準になりません。1つの名前が2つのダイにまたがることがあります。 [公式 README] この一覧にないカードは、箱の表示がどうであれロックされたままです。PCIデバイスIDごとの一覧は gpu unlock の対応状況 にあります。Turing の行の背景にある3件の失敗報告は issue #242、issue #247、issue #248 です。
2つの例外には個別の記事があります。RTX 50 シリーズの対応と Blackwell のサポート と、RTX 3050 の対応と GA107 パッチの状況 です。
次に読むページ
このサイトの残りは3つのページです。どれもこのページには含めていません。
- gpu unlock のインストール手順:始める前の3つの確認、4つのパッケージ経路、カードを対象にするパラメータ。
- gpu unlock の対応状況:87個のデバイスIDと、Ampere、Ada、Turing に関する報告の内容。
- -16 のページ:モジュールより先にドライバーがカードを掴んだときの意味。
gpu unlock が実際に失敗するとき
- -16
ドライバーが先にカードを掴んだ
-16 EBUSY:デバイスにすでに所有者がいます。
- -2
ファームウェアが入らなかった
-2 ENOENT:イメージにペイロードがありません。
- -110
ウォームリブートはコールドブートではない
-110 ETIMEDOUT:カードが応答しなくなります。
- ログなし
モジュールが動かなかった
ログの行がまったく出ない:gpu unlock がイメージに入っていません。
エラーコードはあと2つあり、どちらも手元では直せません。-19 ENODEV は Turing のペイロード不一致です。-22 EINVAL は一部の GA106 ボードでのアラインメント不一致です。 [公式 README] Turing と GA106 の行は、issue #242 と issue #184 の失敗報告によるものです。
-110 のケースは、始める前に読む価値があります。物理的に電源を切るまで、カードが使えないままになることがあるからです。再起動では解消しません。 [issue #23]
gpu unlock で起きうる問題と、元に戻す方法
- 元に戻せるものと戻せないものを、ここにまとめます。
カードのファームウェア
- コールドブート後の状態
- 未変更です。カーネルパラメータを外せば元の状態に戻ります。
プローブ途中で失敗したカード
- コールドブート後の状態
- 電源を切るまで応答しなくなります。上の -110 のケースです。
保証
- コールドブート後の状態
- 不明です。どちらとも判断できる公開の証拠はありません。
ロールバック
- カーネルコマンドラインから
gpu_unlock.targetsパラメータを外します。次のコールドブートでカードを取り戻せます。 - ファイルを消すのではなく、パッケージをアンインストールしてください。モジュールと initramfs(起動時に読み込まれる小さなファイルシステム)の drop-in はパッケージが管理しています。
- 実行後にファームウェアが落ち着かないときは、再起動ではなく電源を切ってください。モジュールは次の電源投入まで DMA バッファを保持します。
失敗のパターン、ロールバックの手順、模倣サイトとリポジトリの見分け方
gpu unlock ではないもの3つ
- vGPU のアンロックではありません。 vGPU のツールは、1枚の物理カードを VM 用の仮想 GPU に分割します。課題もコードも別物です。「gpu unlock」の検索結果の多くはこちらです。
- LHR の回避ではありません。 LHR は一部のカードで Ethereum のハッシュレートを制限します。テンソルの発行レートとは関係ありません。
- VBIOS の改造ではありません。 何もフラッシュしません。VBIOS をバックアップして書き換えさせる手順は、別のものを扱っています。しかも危険です。
gpu unlock の公式ソースがある場所
リポジトリが1つあるだけです。公式サイトもトークンもインストーラーもありません。VERSION(この確認時点では 2.0.0)を読み、主張の根拠ファイルを最後に触ったコミットを読んでください。サードパーティのページで見たほかのバージョン番号は、未検証として扱ってください。
ライセンスは少し分かりにくいので、正確に書きます。README と licenses/ 以下のファイルによると、カーネルモジュールとローカルのパッケージは GPL-2.0-only です。生成されるバッファは、固定された CMP のリファレンスに由来します。リポジトリのルートに LICENSE ファイルがないため、GitHub のライセンス欄は null になります。これは配置の問題で、別のライセンスというわけではありません。
gpu unlock でよくある質問
アンロック後にドライバーを入れ直す必要はありますか?
いいえ。モジュールはドライバーより先に動き、カードをそのまま引き渡します。カーネルが変わったら initramfs を作り直してください。古いカーネルと一緒にモジュールも消えてしまいます。
モデルのトークン生成は速くなりますか?
いいえ。デコードはメモリ律速です。プレフィル、最初のトークンまでの時間、ファインチューニングは速くなります。会話の速度は変わりません。
元に戻せますか?
カーネルパラメータを外し、initramfs を作り直して、コールドブートします。カード自体は一度も変更していません。
ノートPC でも動きますか?
動くこともありますが、信頼性は下がります。多くのノートPC はアイドル時にディスクリート GPU の電源を切り、そのときにアンロックが黙ってリセットされます。プロジェクトは結果を「まちまち」としています。
NVIDIA が後から塞ぐことはありますか?
答えを公表した人はいません。プロジェクトの FAQ でも触れていません。この点を挙げたスレッドにも、メンテナーの返信はありません。
確認日 バージョン 2.0.0コミット 1fc6d62