OpenDLSS-NR:NVIDIA DLSS 5 神經渲染的 Vulkan 重實現(位元精確)
TL;DR
OpenDLSS‑NR 在 Vulkan 上重現 NVIDIA 的 DLSS 5 神經渲染網路,並實現 位元精確 的輸出,與原始 71 個 block 的 Swin/ViT 模型每一個中間張量完全一致,且在 RTX 4070 SUPER 上每 1080p 幀的執行時間低於 10 ms。
此專案提供的內容
- 精確的網路複製 – 71 個 transformer block(六個池化層級),與 DLSS‑NR build 310.8.0 完全相同,使用 FP8(E4M3)激活與 FP16 累加。所有 75 個 block 边界皆與原始版本位元對位完全一致。
- 原生 Vulkan 實作 – C++20 主機程式、GLSL 參考核心,以及手寫的 PTX 核心,充分利用 NVIDIA 協作矩陣 FP8 GEMM、cp.async ring 與無障礙計數器鏈接。
- WebGPU 備用方案 – 第二個移植版本可在瀏覽器中執行相同網路,無需張量核心或 FP8,達到功能上的等效性(位元精確性由規格定義,而非硬體)。
- 示範應用程式 – 將網路整合至修補過的 Filament 渲染器,提供 ImGui 控制介面與 glTF 模型資料庫。
- 開源工具鏈 – 提供腳本以取得 Vulkan headers、glslang、PTX 產生器與 Filament;無需完整 Vulkan SDK。
網路架構概覽
此模型為一 U‑Net,由位移窗格 transformer block 組成,頂部為全域 ViT。主要規格如下:
| 屬性 | 值 |
|---|---|
| Blocks | 71(75 個 block 邊界) |
| Transformer 類型 | Swin‑window + ViT |
| 精度 | FP8(E4M3)激活,FP16 累加 |
| 權重大小 | 141 MiB |
| 輸入 | 低動態範圍代理幀、三個高斯雜訊通道、重新投影的前一幀輸出、五個條件標量 |
| 輸出 | 每像素四個 f32 通道:RGB 殘差 + 時間混合 logits |
此網路 不會升頻;它會重新渲染相同解析度的幀,加入細節並調整色調。
建置、執行與驗證流程
- 取得工具鏈 –
scripts\fetch_tools.ps1下載 glslang 16.6.0、Vulkan‑Headers v1.4.363、Volk、CMake 3.31 與 Ninja 1.13。 - 編譯 –
scripts\build.ps1建構著色器、PTX 與dlss5vk.exe驅動程式。 - 準備 Filament 示範 –
scripts\fetch_filament.ps1與scripts\build_filament.ps1克隆 Filament v1.77.0,套用運動向量修補,並建構示範二進位檔。 - 執行 –
build\dlss5vk.exe bench --model <dir> --width 768 --height 768測量效能;parity檢查與測試範本的位元精確性;verify執行逐核心二分搜尋。 - 模型提供 – 使用者需提供包含
manifest.json與打包的 E4M3 權重檔案的資料夾;本倉儲 不 提供權重。
性能數值(RTX 4070 SUPER)
整個網路每幀執行 241 次分派。40 幀的中位時間如下:
| 解析度 | 每幀時間 |
|---|---|
| 768×768 | 2.8 ms |
| 1920×1080 | 7.8 ms |
| 2560×1440 | 12.6 ms |
| 3840×2160 | 29.3 ms |
GPU 頻率降頻可能使中位數上升數百分點;表格所列為最小值,以確保公平比較。
如何確保精確性
- 對照模式 –
dlss5vk parity --fixture <dir>對照 NVIDIA 原始實作所捕獲的參考輸出。驗證每一個 block 邊界上的所有張量。 - 數值合約 –
docs/numerics.md檔案定義四種驗證結果:位元精確(通過)、零值符號(可接受)、在一個碼字內(8 位元捕獲容差),以及 不匹配。 - 逐核心驗證 –
verify需要測試範本包含 block‑0 的參考與輸入特徵,允許對任何差異進行細粒度二分搜尋。 - 可切換路徑 – 環境變數(例如
DLSS5VK_UNFUSED=1)讓開發者以 GLSL 參考核心取代 PTX 核心,同時保持輸出一致性,對除錯或無 FP8 支援的硬體非常有用。
社群見解(Hacker News)
「與原始版本位元精確對照——這到底是什麼魔法?太令人印象深刻了!」 – TheJCDenton
「1080p 下幾乎 8 ms,似乎非常昂貴;原始版本是否也消耗這麼多渲染預算?」 – flohofwoe
「我驚訝它沒有將 z‑buffer 作為輸入;對神經渲染來說,這似乎很有用。」 – Lerc
「沒有權重的話,這有什麼用?NVIDIA 是針對每款遊戲提供模型;單一通用模型可行嗎?」 – franticgecko3
這些評論突顯了兩個常見主題:位元層級對照的技術成就,以及關於效能影響與預訓練權重可取得性的實務疑問。
局限與缺失項目
- 無 DLSS‑SR 支援 – 此倉儲僅實作神經渲染(NR)路徑;超解析度變體尚未包含。
- 權重為外部提供 – 使用者必須自行取得或產生 E4M3 權重檔案;倉儲不包含任何 NVIDIA 的專有權重。
- 時間歷史僅在示範中存在 –
dlss5vk工具處理單一幀,無歷史;示範使用重新投影的前一幀輸出以確保時間穩定性。 - 硬體需求 – 需要具備 Vulkan 擴充功能
VK_KHR_cooperative_matrix、VK_NV_cooperative_matrix2、VK_EXT_shader_float8與VK_NV_cuda_kernel_launch的 Ada 世代 NVIDIA GPU。
為何這很重要
OpenDLSS‑NR 證明,一個複雜且專有的 AI 加速圖形流程,可以在開源 Vulkan 中忠實重現,促進獨立研究、跨平台實驗(包括 WebGPU),以及透明的效能基準測試。此專案嚴謹的對照測試為神經渲染的可重現性設立了新標準。
開始使用清單
- 硬體 – NVIDIA Ada 世代 GPU(RTX 40 系列或更新),並具備所需的 Vulkan 擴充功能。
- 工具鏈 – Windows、Visual Studio 2022(C++ x64)、Git、Python 3、Node.js/npm、Pillow。
- 克隆倉儲 –
git clone https://github.com/maanHimself/OpenDLSS-NR.git。 - 執行取得腳本 – 在
scripts/中執行 PowerShell 腳本。 - 提供模型 – 放置包含
manifest.json與打包權重檔案的資料夾;設定--model <dir>或DLSS5VK_MODEL。 - 執行示範 –
build\dlss5vk.exe bench …或雙擊示範可執行檔。
授權
此倉儲以 MIT 授權釋出;第三方元件列於 NOTICE 檔案中。
Sources
相關
- 專案
- 專案
- 專案
- 專案
- 專案