maanHimself/OpenDLSS-NR
A Vulkan reimplementation of NVIDIA's DLSS 5 Neural Rendering network, bit-exact against the original.
OpenDLSS‑NR – NVIDIA DLSS 5 ニューラルレンダリングの Vulkan 再実装
これは何か
- C++20 と Vulkan で書かれた、NVIDIA DLSS 5 ニューラルレンダリング(NR)ネットワークの忠実でビット完全な再現です。NVIDIA が DLSS 5 build 310.8.0 で提供する同じ 71 ブロックの Swin‑ViT U‑Net を、テンソルコアで FP8(E4M3)演算を使用して実行します。
- リポジトリには、ブラウザで実行される純粋な WebGPU バージョン(テンソルコアなし、FP8 なし)と、ネットワークをオープンソースの Filament レンダラーに組み込むデモも含まれています。
なぜ重要か
- DLSS 5 の NR は、出力解像度を変更せずに(アップスケーラーではありません)、ディテールを追加し、トーンを補正し、肌の品質を向上させる生成型ニューラルレンダリングステップです。OpenDLSS‑NR により、研究者や開発者は同じモデルを自分のハードウェアで実験し、中間アクティベーションを検査し、パフォーマンスをベンチマークできます。
- すべての中間テンソルと最終画像は、プロプライエタリな実装とバイト単位で一致します。これはリバースエンジニアリングされた AI モデルでは珍しいことです。
主要コンポーネント
| コンポーネント | 提供内容 |
|---|---|
src/ |
ホスト側 C++20 コード:Vulkan セットアップ、モデルロード、重みレイアウト、CPU 参照実装、および dlss5vk コマンドラインツール。 |
shaders/ |
正確な FP8 GEMM、アテンション、MLP、その他のブロックを実装する GLSL カーネル。これらは参照パスです(融合なし)。 |
scripts/ptx/ |
高性能パス用に、融合操作とカウンタベースのチェーンを備えた低レベル PTX カーネル(mma.sync FP8 × FP16 を使用)を生成する Python ジェネレーター。 |
demo/ |
glTF シーンをロードし、ImGui コントロールを表示し、各フレームでネットワークを実行する(時間フィードバックループを含む)Filament ベースのビューアー。 |
ports/browser-webgpu/ |
ブラウザで同じ数値結果を再現する WebGPU ポート(ただし、512×512 で約 72 ms とかなり遅い)。 |
実行方法
- 前提条件 – Windows、必要な Vulkan 拡張機能を備えた NVIDIA Ada 世代 GPU(またはそれ以降)、Visual Studio 2022、Python 3、Node.js、および Vulkan‑Headers/GLSLang ツールチェーン(リポジトリが自動的に取得できます)。
- ツールの取得 –
scripts\fetch_tools.ps1(glslang、Volk、CMake、Ninja などを追加)。 - エンジンのビルド –
scripts\build.ps1がシェーダー、PTX をコンパイルし、build\dlss5vk.exeを生成します。 - オプションのデモ設定 – Filament を取得してパッチを適用し(
fetch_filament.ps1/build_filament.ps1)、デモをビルドします(build_demo.ps1)。 - 実行 –
dlss5vk.exe bench --model <model_dir> --width 768 --height 768で簡単なタイミングを測定。dlss5vk.exe parity …で参照フィクスチャと比較(ビット完全性テスト)。demo\dlss5-demo.exeでインタラクティブビューアーを起動(glTF をドラッグアンドドロップするか、内蔵シーンを選択)。
パフォーマンススナップショット(RTX 4070 SUPER、40 フレームの中央値、フレームごとのネットワーク全体):
| 解像度 | フレームあたりの時間 |
|---|---|
| 768×768 | 2.8 ms |
| 1920×1080 | 7.8 ms |
| 2560×1440 | 12.6 ms |
| 3840×2160 | 29.3 ms |
モデル処理
- リポジトリには 141 MiB の FP8 重みは含まれていません。ユーザーは、README で説明されている
manifest.jsonレイアウトに従ったモデルディレクトリを提供する必要があります。ローダーはマニフェストを検証し、パックされたバイトをカーネルが期待する行列形式に再レイアウトし、ブロック数が異なるモデルを拒否します。
検証と正確性
parityおよびverifyコマンドは、GPU 出力を NVIDIA 提供のキャプチャフィクスチャ(含まれていません)と比較します。比較はビット完全です。失敗は、ゼロ符号の違い、1 コードの偏差(8 ビットキャプチャの場合)、または完全な不一致として報告されます。PTX 生成カーネルと GLSL 参照ルートは、適切なスイッチを使用すると、これらのテストに合格できます。
チューニングノブ
- 環境変数(
DLSS5VK_UNFUSED、DLSS5VK_CHAIN、DLSS5VK_PTX_GEMMなど)を使用すると、高速な融合 PTX パスと低速ですがデバッグしやすい GLSL パスを切り替えたり、split‑K GEMM を有効/無効にしたり、バリア挿入を制御したりできます。数値的な同一性は維持されます。
制限事項
- NR ネットワークのみが実装されています。DLSS‑SR(超解像)ブランチはありません。
- 最近の Ada 世代 NVIDIA GPU と特定の Vulkan 拡張機能が必要です。古いハードウェアや非 Windows プラットフォームでは実行できません。
- モデル重みは別途取得する必要があり、NVIDIA のライセンスの対象となります。
ライセンス
- リポジトリ内のコードは MIT ライセンスです。サードパーティコンポーネント(Filament、glslang など)は
NOTICEにリストされています。
OpenDLSS‑NR は、低レベル PTX カーネル、参照 GLSL パス、すぐに実行できるデモを備え、NVIDIA の最新の生成型ニューラルレンダリング技術を研究するための透過的で再現可能なプラットフォームをコミュニティに提供します。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト