RTX 30シリーズのBF16アンロックでComfyUIが最大60%高速化
オープンソースのLinuxカーネルモジュールがRTX 30カードのFP/BF16発行レートを復元します。ある3090 TiではComfyUIのBF16グラフが31〜60%高速化し、INT8はほぼ変化しません。
このカードファミリーは何年も前からソフトウェアによる制限を抱えています。コンシューマー向けのGA102、GA103、GA104、GA106チップは、同じシリコンでありながら、FP/BF16の融合積和演算をFP32へ発行するレートがプロ向けの兄弟製品の半分に抑えられています。gpu-unlock は nvidia がロードされる前にその上限を引き上げる速度セレクタを書き込むため、残りのスタックは未改造のまま動作します。
モジュールが変更する内容
このプロジェクトは2つの以前のアプローチを組み合わせています。CMPアンロッカーのV67/PLM手法と、UEFI方式のドライバ読み込み前のタイミングです。具体的には、NVIDIAドライバがカードをバインドする前に、モジュールは完全なBF16レートを選択する速度セレクタSS0 0x88888888 と、IMLA4用の4ビットSS1 0x8 を書き込み、その後FLRを実行して終了します。UEFIアプリケーションでもパッチ適用済みドライバでもなく、作者が強調するのはまさにこの性質です。NVIDIAが新しいドライババージョンを出すたびにやり直すパッチは存在しません。
READMEにはその効果が明記されています。これらの4つのチップファミリーにおいて、FP/BF16のFMAからFP32への命令発行レートを2倍にします。このモジュールは、カーネルコマンドラインで gpu_unlock.targets= を指定してオプトインしない限り何も行いません。指定は all かPCIアドレスのリストで、カードが何枚あっても約1秒で並行してアンロックされます。
数値の実態
プロジェクト自身の参照測定は、450 WのRTX 3090 Tiで実行した密な8192³ GEMMで、FP32累積による5サンプルの中央値です。
BF16は87.5から157.4 TFLOP/sへ、TF32は42.6から82.6へとほぼ倍増する一方、FP16の伸びは87.5から118.4と小さめです。READMEはこの変化を、データ型ごとの内訳を示さずにFP/BF16のFMAからFP32への発行レートが2倍になると説明しているため、公開されている表がこの内訳に関する唯一の測定値です。
リポジトリのREADMEにまとめられたユーザーによる互換性報告は、残りのスタックもカバーしています。
| カード | 結果 | BF16 GEMMの向上率 |
|---|---|---|
| RTX 3090 Ti | アンロック成功 | +68〜80% |
| RTX 3090 | アンロック成功 | +25〜67% |
| RTX 3080 10 GB | アンロック成功 | +70〜73% |
| RTX 3080 20 GB | アンロック成功 | +56〜59% |
| RTX 3070 | アンロック成功 | +73〜81% |
| RTX 3060 12 GB | アンロック成功 | 約+80% |
| RTX 3080 Ti 20 GB (OEM) | アンロックは完了するがBF16は半分のレートのまま | なし |
| RTX 3070 Ti | このモジュールでのテストなし | なし |
READMEは、これらの数値が各報告独自のベンチマークに由来するものであり、直接比較はできないと明言しています。主な交絡要因は電力上限です。最も低い3090での+25%は、225 Wに制限されたカードによるものです。
ComfyUIでの測定
このサイトにとって有用なテストはGEMMではなく生成です。RTX 3090 Tiの独立したオーナーであるu/under-_-null氏は、標準ドライバとアンロック済みドライバで同じグラフを実行し、画像またはクリップあたりの中央時間を公開しました。BF16パイプラインでは最大60%高速化し、INT8ではほぼ変化しませんでした。
| モデルと精度 | 標準 | アンロック | 向上率 |
|---|---|---|---|
| MOSS-Image SFT BF16 | 71.98 s | 45.40 s | +58.6% |
| Qwen-Image 2.1 Turbo BF16 | 8.51 s | 5.41 s | +57.2% |
| Z-Image Turbo BF16 | 6.79 s | 4.35 s | +56.1% |
| FLUX.1 dev FP8チェックポイント | 31.96 s | 20.66 s | +54.6% |
| Krea 2 Turbo BF16 | 15.65 s | 10.70 s | +46.3% |
| MiniMax H3 BF16 (動画と音声) | 253.27 s | 158.05 s | +60.2% |
| LTX-2.5 distilled BF16 (動画と音声) | 70.81 s | 60.63 s | +16.8% |
| MOSS-Image SFT INT8 | 27.31 s | 27.23 s | +0.3% |
| Qwen-Image 2.1 Turbo INT8 | 3.92 s | 3.75 s | +4.6% |
| MiniMax H3 INT8 ConvRot | 155.07 s | 118.21 s | +31.2% |
注目すべき点は2つあります。向上は発行レートが重要なBF16の処理に集中しており、INT8量子化のパスはほぼ影響を受けません。したがって、すでにINT8 ConvRotチェックポイントを使っているユーザーが得られるのは数%であって60%ではありません。同じ報告の中で、INT8 ConvRotのMiniMax H3だけは31%と例外で、他のINT8の行を大きく上回っています。
出力の忠実性は維持されました。同じ報告では、アンロック時と標準時の静止画生成を150回ずつ照合し、デコード後のRGBピクセルが完全に一致したとしています。リポジトリ内の他の互換性報告も同様で、これは精度の変更ではなく発行レートの変更であることと整合します。
要件とリスク
試す前に押さえておくべき詳細は、すべてプロジェクトのドキュメントに記載されています。
- Linux専用。 モジュールはインストール済みのカーネルヘッダーに対してビルドされ、mkinitcpio、initramfs-tools、dracutのいずれかでインストールされます。Arch、Debian、Fedora向けのパッケージターゲットがあります。
- カードごとにオプトイン。
gpu_unlock.targets=allはバインドされていないすべてのGA10xカードをアンロックします。それ以外の場合はlspci -Dが出力する形式でPCIアドレスを列挙します。すでにドライバに初期化されたカードは拒否されます。 - コールドブート。 起動後に手動でモジュールをロードしても、
nvidiaがすでにバインドしたカードには効果がありません。 - サスペンドの扱い。 速度セレクタは電源断でリセットされるため、
gpu_unlock.resume=0で無効化しない限り、モジュールはサスペンド通知を介してレジューム時に再アンロックします。ハイバネーションには対応していません。 - ディスプレイ用カードでも動作します。リセットから
nvidia-drmが引き継ぐまでの間、コンソールはブランクになります。 - すべてのカードが反応するわけではありません。 OEMのRTX 3080 Ti 20 GBはアンロックが完了してもBF16は半分のレートのままで、GA103に関する報告はまだありません。
別のコミュニティプロジェクト impacifist/Windows-GPU-UNLOCK は、この手法をWindowsユーザー向けにUEFI方式へ移植したものです。オリジナルのプロジェクトの一部ではなく、ここでは検証していません。
入手方法
- モジュール: Zagitta/gpu-unlock。リポジトリ上のバージョンは1.0.0で、互換性テーブルとファームウェア抽出コードが含まれます。
- ベンチマークスレッド: RTX 30シリーズのアンロックに関する議論 と RTX 3090 TiのComfyUI報告。
- Windows移植版: impacifist/Windows-GPU-UNLOCK。
コメント
GitHubでサインインしてディスカッションに参加しましょう。