
2026/10/24 18:58
Nvidia 3000 シリーズ GPU の FP/BF16 命令発行レートについて
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
消費者向け GPU 最適化における最も重要な進展は、「GPU unlock」バージョン 1.0.0 のリリースであり、これは Nvidia GA102–GA106 カードの FP/BF16 インスルークション発行速度をプロフェッショナル版と同等にするために設計された Linux カーネルモジュールである。以前の手法が複雑なドライバーパッチングや UEFI 修飾を必要としたのに対し、本ツールは標準的な NVIDIA ドライバーがロードされる前に initramfs を介して自身を注入し、ドライバより前のタイミングで動作する。これは CMP アンロックアの V67/PLM 技術を組み合わせているが、パッチ付きドライバーや UEFI アプリケーションではないため、新バージョンのたびに手動でのパッチングが必要なくなる。このモジュールは、RTX 3090 Ti、3080、3070 などの消費者向け GPU で Fused Multiply-Add(FMA)速度を実質的に 2 倍にし、BF16 GEMM パフォーマンスを 70% 以上向上させる。特定の性能向上率は +68% から +81% の範囲である。これらの改善は、クリティカルな AI タスクを直接加速し、LLM のプリフィル速度(+14–36%)や FlashAttention を通じたディフュージョンモデルのパフォーマンスを向上させる。一方、テキストデコード(INT8)はビット同一の出力を保ちながら影響を受けない。インストールには、GitHub からクローンして
make installを実行し、GRUB または systemd-boot を介して特定のカーネルコマンドライン引数(例:gpu_unlock.targets=all)を追加する必要がある。モジュールは mkinitcpio や dracut といったディストリビューション固有のフックを通じて自動的にロードされる。ユーザーは注意すべき点は、RAM スリープからの復帰後にパフォーマンスがリセットされ(再アンロックには約 1 秒が必要)、デフォルトでは混合された PCI ID が無視されることである。本ソフトウェアは GPL-2.0-only ライセンスの下で動作し、消費者ハードウェア上でプロフェッショナルグレードの計算速度を達成するためのアクセスしやすい手段を提供している。支援は Buymeacoffee または暗号通貨アドレスを通じて利用可能である。本文
GPU Unlock 1.0.0:RTX 30 シリーズの FP16/BF16 パフォーマンス解放ガイド
NVIDIA GeForce RTX 30 シリーズ(GA102/GA103/GA104/GA106 アーキテクチャ)において、データセンター向けプロフェッショナルカードに匹敵する FP16/BF16 インストラクション発行レート を解放する Linux カーネルモジュールです。
技術概要と主な利点
本ツールは、UEI アプローチによるタイミング制御と CMP unlocker の V67/PLM 技術を統合したものです。
- 未変更の NVIDIA ドライバ対応:パッチ済みドライバや UEFI アプリケーションではなく、標準的な NVIDIA ドライバを使用可能です。
- 自動アンロック処理:カーネルモジュールが NVIDIA ドライバがカードをバインドする前に実行します。
- 速度選択レジスタ(SS0 に
、SS1 に0x88888888
)を書き込みます。0x8 IMLA4 - その後 FLR(フルリセット)を行います。
- 速度選択レジスタ(SS0 に
- メンテナンス性の向上:NVIDIA が新しいドライバーバージョンをリリースするたびに手動でパッチを適用する必要がありません。
パフォーマンス改善の目安
GA102、GA103、GA104、GA106 アーキテクチャを搭載したカードにおいて、FP16/BF16 FMA 演算からのデータ転送速度は約2 倍に向上します。
データタイプ別の性能比較 (TFLOPS)
| 入出力 (DataType) | アンロック前 | アンロック後 |
|---|---|---|
| FP16 | 87.46 | 118.39 |
| BF16 | 87.50 | 157.41 |
| TF32 | 42.58 | 82.61 |
テスト済みカードと互換性情報
以下のテーブルはユーザーの報告結果に基づくものです。モジュールは
kernel/gpu_unlock/main.c にリストされた全 GeForce ID をサポート対象としていますが、実機での動作確認は以下に限定されます。
対応チップとモデル一覧
| チップ (Chip) | カード名 / モデル | PCI ID | アンロック結果 | BF16 GEMM 向上率 | 報告数 |
|---|---|---|---|---|---|
| GA102 | RTX 3090 Ti | 10de:2203 | 成功 | +68〜80% | #1 |
| GA102 | RTX 3090 | 10de:2204 | 成功 | +25〜67% | #5, #9, #10, #17, #25, #27, #33 |
| GA102 | RTX 3080 Ti 20 GB (OEM) | 10de:2205 | 成功 (BF16 は半速維持) | — | #28 |
| GA102 | RTX 3080 10 GB | 10de:2206 | 成功 | +70〜73% | #14 |
| GA102 | RTX 3080 20 GB (メモリアップグレード) | 10de:2206 | 成功 | +56〜59% | #10, #15 |
| GA104 | RTX 3070 | 10de:2484 | 成功 | +73〜81% | #10, #12 |
| GA104 | RTX 3070 Ti | 10de:2482 | 未テスト (UEFI ポートで Windows アップグレード時有効) | — | #32 |
| GA106 | RTX 3060 12 GB | 10de:2504 | 成功 | 約 +80% | #13, #31 |
| GA103 | 任意のモデル | 10de:2414 | 報告なし | — | — |
重要事項と注意点
- 比較条件: 示された数値はベンチマークに基づくスループットですが、測定条件が異なるため直接の比較には注意が必要です。
- 電力制限: パワールimit が 225W に設定されていても最小限の改善 (+25%) を記録します。
- ワークロード別影響:
- LLM プリフィル/拡散モデル: マトリクス演算集約型ワークロードで特に向上が見られます(LLM プリフィル: +14〜36%、FlashAttention 等)。
- LLM デコード/INT8 演算: メモリ帯域幅制限または INT8 演算主体の場合は速度にほとんど影響しません。
- データ整合性: アンロック前後の出力データはビット単位で同一であることが確認されています。
- マルチ GPU/仮想化: 1 台 PC に 4 カード以上搭載、表示用カード、または
を経由した VM パススルー (#17 など) でも動作を確認しています。vfio-pci
インストール方法
以下のコマンドを実行してインストールを開始してください。
git clone https://github.com/Zagitta/gpu-unlock cd gpu-unlock make install
カーネル起動コマンドラインの設定: 既存のオプションを維持しつつ、カーネル起動コマンドラインに
gpu_unlock.targets=all を追加する必要があります。OS により設定方法が異なります。
- GRUB (Debian/Ubuntu/Mint)
# /etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT に "gpu_unlock.targets=all" を追加 # 編集後実行 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
- 起動エントリーのオプション行に追加してください(
で場所を確認)。bootctl status
- 起動エントリーのオプション行に追加してください(
- UKI / 生成されたエントリー
に追加し、起動イメージを再構築してください。/etc/kernel/cmdline# mkinitcpio UKI の場合 sudo mkinitcpio -P
ローカルでのビルド
ビルドプロセスは HTTPS でピン留めされた NVIDIA/CachyOS 入力を使用し、SHA-256 チェックを実行します。ファームウェアはビルドディレクトリとバイナリパッケージ内にのみ生成されます。
インストールのワンステップ実行
以下のコマンドは依存関係のインストールとパッケージの構築を一括で行います(sudo パスワード入力が必要)。
make install # ディストリビューション自動検出 (Arch / Debian / Fedora) make install-arch # Arch: makepkg -sif make install-deb # Debian/Ubuntu: apt-get build-dep, dpkg-buildpackage... make install-rpm # RHEL/Fedora/CentOS: dnf builddep, rpmbuild...
- 検出ロジック:
はmake install
を参照して自動的に適切なインストーラーを選択します。/etc/os-release - パッケージ出力位置:
- Debian パッケージ:
build/deb - RPM パッケージ:
build/rpm
- Debian パッケージ:
- 入力ファイルのキャッシュ: NVIDIA の入力は
にキャッシュされます(~/.cache/gpu-unlock/inputs
で生成)。make inputs
を使用する際など、ネットワーク接続なしでクリーンなビルド環境(sbuild など)を作る場合はdpkg-buildpackage
環境変数を指定してください。GPU_UNLOCK_INPUTS
- アーカイブ:
コマンドは Debian ソースパッケージとmake dist
を生成しますが、NVIDIA のアーカイブやファームウェアを含みません。.nosrc.rpm
ブートフローとオンデマンド設定 (Opt-in)
モジュールとファームウェアは initramfs に配置され、NVIDIA ドライバがカーネルをバインドする前にロードされます。
各種 initramfs システムの構成
- mkinitcpio:
/etc/mkinitcpio.conf.d/zz-gpu-unlock.conf
セクション内でMODULES
をgpu_unlock
の直前に挿入します。nvidia- 表示用カードが真っ白になる時間を最小限に抑えます。
- initramfs-tools:
/usr/share/initramfs-tools/modules.d/gpu-unlock.conf - dracut:
/usr/lib/dracut/dracut.conf.d/gpu-unlock.conf
注意:
softdep nvidia pre: ルールは使用されていません。kmod は最初に読んだ softdep nvidia の行のみを尊重するため、他のパッケージルールとの競合に注意が必要です。
オンデマンド設定オプション (カーネル起動コマンドライン)
このモジュールは、コマンドライン引数なしの場合は何もしません。以下の形式で指定できます:
: すべての GA102/3/4/6 カードをアンロックします(デフォルト)。gpu_unlock.targets=all
: 指定された PCI アドレスのみ。gpu_unlock.targets=0000:21:00.0
: カンマ区切りのアドレスリスト。gpu_unlock.targets=0000:21:00.0,0000:22:00.0
PCI アドレスの形式:
が出力する完全な名称を使用(例:lspci -D
)。0000:21:00.0- 文字大小に依存しない 16 進数です。
- GPU の番号付けや表示ロールとは無関係です。
動作特性:
- 並列処理: カードは並列にアンロックされ、全てのカードにあっても約 1 秒で完了します。
- スキップ条件: バインド済みまたは電源オフのカードはスキップされます。
- 初期化: ボードファームウェアによるバスマスターリング(Supermicro X11 など)は最初にクリアされます。既に初期化されたカードへのアクセスは拒否されます。
- 表示用カード: 正常に動作します。リセット直前は画面が真っ白になりますが、
が引き継ぐまで続きます。nvidia-drm
休止状態 (Suspend) と ハイベーン (Hibernate)
Suspend to RAM (メモリへの休止)
- カードは電源オフとなり、速度選択レジスタがリセットされます。
- 再開時:モジュールはブート時と同様に全てのカードを再度アンロックします。
- サスペンド・ノティファイヤーは、NVIDIA の標準 (
) より少し前に動作します。NVreg_UseKernelSuspendNotifiers=1 - これにより再起動までの時間が約 1 秒増加します。
- サスペンド・ノティファイヤーは、NVIDIA の標準 (
- 電源が維持された状態: アイドル休止時のカードは引き続きアンロックされており、単に読み取られるのみです。
Hibernation (ハイベーン)
- 現時点では未対応です。
機能の無効化とトラブルシューティング
カーネル起動コマンドラインで以下の設定を有効にすると再開時の処理をスキップできます:
gpu_unlock.resume=0- または
に/sys/module/gpu_unlock/parameters/resume
を書き込む。0
状態の確認コマンド
# ログを確認する journalctl -k -b | grep gpu_unlock # PCI デバイス情報 (例) lspci -nnk -s 0000:21:00.0
アンロックの停止
- カーネル起動コマンドラインから
を削除してください。gpu_unlock.targets= - ワンオフ(一時的な)ブートの場合:ブートローダーのエディット画面で引数を削除します。
- パッケージを削除しても、モジュールと initramfs のドロップインは残っている場合があります。
ファームウェアが止まらない場合: モジュールログを確認し、必要に応じて電源を切り再起動してください。DMA バッファーの保持により、ファームウェアが継続使用されている可能性があります。
ライセンス情報
- カーネルモジュール & ローカルパッケージ化: GPL-2.0 専用ライセンス。
- 生成されたペイロード: パッチ済み CMP リファレンスから派生しています。
- NVIDIA ファームウェア: NVIDIA の独自利用条件の下で動作します。
- 詳細なクレジット表記については
およびfirmware/NOTICE.md
を参照してください。licenses/
スポンサーのお願い
開発者の維持と GPU 購入に寄与していただけますと幸いです! <3
クロネート方法
- Buy Me a Coffee: https://buymeacoffee.com/zagitta
- Ethereum (ETH):
0xf4eee937937f92038D70B16AbD7736D8a53a1c5c - Bitcoin (BTC):
bc1qwpkwp70fn76z3s4kg2l9y3j4kst95twcznuugf - Solana (SOL):
8Rih6HY7V4LcdjYHz4iSffT4fTniqw5CACaBigSVxNYu