gpu unlock:GeForce の残り半分を取り戻す

NVIDIA は GeForce にも、プロ向けの同型カードと同じテンソルブロックを載せています。ただし発行レートは半分で、純正ドライバーはそれを変えられません。gpu unlock は、それを変えるコミュニティ製のカーネルモジュールです。書き込みが許された唯一のコンテキストから1回だけ書き込み、カードをリセットします。あとは未改変のドライバーが、フルスピードを報告するデバイスとしてカードを認識します。仕掛けはこれだけです。電力制限を超えることはできません。箱の名前から期待されるすべてのカードに対応するわけでもありません。vGPU や LHR のアンロックではなく、何もフラッシュしません。

  • 10de:2200RTX 3090 / 3080 class安定
  • 10de:2203RTX 3090 / 3080 class安定
  • 10de:2204RTX 3090 / 3080 class安定
  • 10de:2205RTX 3090 / 3080 class安定
デバイスIDがわからないときは、1つのコマンドで確認できます対応表をすべて見る

gpu unlock が取り戻すもの、取り戻さないもの

取り戻せるのは1つだけです。FP32 累積を使う FP16、BF16、TF32 の演算で、テンソルコアの発行レートが戻ります。これが gpu unlock を使う理由です。 [公式 README]

+65–87%

合成 GEMM の向上率

カードごと、純正の電力制限のまま。

[公式 README]

0%

トークンのデコード

3090 で 76.4 → 76.2 tok/s。誤差の範囲です。

[issue #107]

この分かれ目が判断のすべてです。プレフィル、ファインチューニング、画像生成は速くなります。チャットのデコードは速くなりません。

  • 戻るもの

    プレフィルとプロンプト処理 · 最初のトークンまでの時間 · 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。全フィールドでオーバーライド有効、フルレートです。

概念図であり、実測値ではありません。棒はフルレートのまま残ったセレクタの数で、スループットではありません。アドレスとデフォルト値は、プロジェクトの文書にあるレジスタ表の GA102 の値です。

デフォルトの PLM 値を見ると、ユーザー空間から書けない理由が分かります。0xffffff8f の下位は 1000 1111 です。下位4ビットは4つの特権レベルすべてに読み取りを許します。ビット7:4 が 1000 なので、書き込みは L3(heavy-secure コンテキスト)だけに許されます。ほかからのストアは黙って捨てられます。 [公式 README] その特権ビット1つのせいで、エクスプロイトが必要になります。

フラッシュは行いません。ドライバーのファイルも置き換えません。カード自身に変更は残りません。そのコンテキストの内側に1回のストアを通す書き込み連鎖は、次の節で説明します。

gpu unlock が柵の反対側から1回の書き込みを通す仕組み

  1. リーク

    デバッグ版ファームウェアの流出

    NVIDIA はかつて、製品版イメージと一緒にデバッグ署名付きの Booter ファームウェアを出荷しました。デバッグ版は既知のテストキーを使うため、復号して中身を解析できました。
  2. オーバーフロー

    スタックオーバーフロー

    そこから出てきたものの1つが、SEC2 プロセッサの古典的なオーバーフローです。バッファをあふれさせて戻りアドレスを握れば、セキュアプロセッサは好きな連鎖をたどります。
  3. 1回の書き込み

    4バイトの書き込み1回

    そこから得られたペイロード v67 にできる有用なことは1つだけです。選んだアドレスに4バイトを書き込むことです。
  4. 連鎖

    6回をつないで使う

    recipes.c では、Ampere の連鎖は6回の書き込みです。フレームは 0x18 バイトで、スタックオフセット 0xff54 から始まり、0xffe4 から後片付けをします。この連鎖は、1回を PLM に届けるためにあります。

    [公式 README]

  5. アンロック

    柵が下りる

    PLM が 0xFFFFFFFF になれば、ホストは通常の PCI コンフィグアクセスで2つの速度レジスタを設定できます。続いてファンクションレベルのリセットを行います。カードは、設定したばかりのレートを報告して戻ってきます。

Ada も同じ本体(書き込み連鎖の中身)を使い、アドレスだけをファームウェアのマップで置き換えます。0x686 は 0x1e02、0x1110 は 0x257e、0x84c8 は 0x7a02、0x81ee は 0x771e になります。 [公式 README]

この置き換えがあるため、新しい世代は小さなパッチでは済みません。実際に読める booter の中から、同等の書き込みを見つける必要があります。

カード別に見る gpu unlock の効果

変更前変更後0–330 TFLOPS
  • RTX 3060 12 GB

    +87%
  • RTX 3060 Ti

    +82%
  • RTX 3070

    +81%
  • RTX 3080 10 GB

    +73%
  • RTX 3090

    +65%
  • RTX 3090 Ti (450 W)

    +80%
  • RTX 4070 Ti

    +84%
  • RTX 4080

    +87%
  • RTX 4090

    +100%(ピーク)
純正の電力制限での合成 BF16 GEMM。プロジェクトの公表値です。9行はすべて 0–330 TFLOPS の同じスケールで表示しています。合成 GEMM は最良のケースです。棒は上限として見てください。 約束ではありません。 [公式 README]

データ待ち

変更前後の組が公表されていないカード

プロジェクトはカードごとに 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つも含みません。

上限のうちどこまで残せるかは、電力制限で決まります。 [公式 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 が実際に失敗するとき

エラーコードはあと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