nlzy/turing-unlock
Unlock full speed FP16 tensor core of NVIDIA Turing GPUs
これは何?
NVIDIA TU102 GPU(RTX 2080 Ti のチップ)のフルスピードFP16テンソルコアを解放するLinuxカーネルモジュールです。
何をするの?
デフォルトでは、GPUはテンソルコアを低い速度で動作させます。このモジュールは、2つのハードウェア速度セレクタ(SS0とSS1)を特定の値に書き込み、ファームウェアのミューテックス(ACRミューテックス3)も解放します。その後、GPUは通常の起動シーケンスを経ますが、テンソルコアは最大定格速度で動作できるようになります。
どうやって動くの?
モジュールは低レベルのGPUレジスタを直接操作します。SS0を 0x88888888 に、SS1を 0x8 に設定し、ファームウェアロックを解放します。これはGPUの起動プロセス中、NVIDIAドライバがロードされる前に行われます。モジュールはTU102チップ(RTX 2080 Tiなど)でのみ動作し、Dell RTX 2080 Ti 22GBでNVIDIAドライバ575.51.03(プロプライエタリとオープンの両方)でのみテストされています。
インストール
プロジェクトディレクトリで make install を実行します。これにより、Linuxディストリビューションが自動検出され、適切なパッケージがビルド/インストールされます。特定のパッケージタイプを強制することもできます:
make install-archはArch用make install-debはDebian/Ubuntu用make install-rpmはFedora/RHEL用
インストールせずにパッケージをビルドするだけなら、make arch、make deb、または make rpm を使用します。ビルドは2つのNVIDIAファームウェアファイル(固定バージョンとSHA-256チェック付き)をダウンロードし、~/.cache/turing-unlock/inputs にキャッシュします。make inputs で事前にダウンロードするか、INPUTS= でキャッシュディレクトリを変更できます。
アンロックを有効にする
モジュールはデフォルトでは何もしません。どのGPUをアンロックするかを指定するカーネルコマンドラインオプションを追加する必要があります。turing_unlock.targets=all で互換性のあるすべてのカードをアンロックするか、PCIアドレスを指定します(例:turing_unlock.targets=0000:21:00.0)。複数のアドレスをカンマで区切って指定できます。完全なPCIアドレスは lspci -D で取得します。
ブートローダ設定(GRUB、systemd-boot、UKIなど)にオプションを追加し、再起動します。起動後、journalctl -k -b | grep turing_unlock でカーネルログを確認し、動作したかどうかを確認します。
起動順序
インストールパッケージは、モジュールとそのファームウェアをinitramfsに配置し、NVIDIAドライバの前にロードされるようにします。モジュールは、すでにドライバがあるか電源がオフのカードをスキップします。また、複数のTU102カードが存在する場合も処理します(一度に1つずつ実行)。必要に応じて、NVIDIAドライバがバインドする前にPCIeリセット(FLR)を実行します。成功時はカードはリセットされません。失敗時はリセットが発生し、ディスプレイドライバが引き継ぐまで画面が真っ暗になることがあります。
パフォーマンス
READMEには、250WのRTX 2080 TiでのFP16行列乗算(FP32累積付き)のベンチマーク結果が含まれています。数値はアンロック後に大幅な高速化を示し、NVIDIAが主張する理論上のピーク(56.9 TFLOPS)を超えることもあります。例えば、行列サイズ2048では、パフォーマンスは55.7 TFLOPS(ピークの97.9%)から91.4 TFLOPS(ピークの160.6%)に向上しました。
リスクと警告
READMEは明確に警告しています:「テンソルコアは非常に高い電力を消費します。フルスピードにアンロックするとハードウェアが損傷する可能性があります。自己責任で使用してください。」また、GPUファームウェアが正しく停止しない場合、モジュールはエラーをログし、次の電源オフまでDMAバッファを保持します。再試行する前にマシンの電源をオフにしてください。
ライセンス
モジュールとパッケージングコードはGPL-2.0-onlyです。NVIDIAファームウェアファイルは独自のライセンスを保持します(firmware/NOTICE.md と licenses/ を参照)。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト