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/ 基于 Filament 的查看器,可加载 glTF 场景、显示 ImGui 控件,并在每一帧运行网络(包括时间反馈循环)。
ports/browser-webgpu/ WebGPU 移植版本,可在浏览器中重现相同的数值结果,但速度较慢(512×512 时约 72 ms)。

如何运行

  1. 先决条件 – Windows、具备所需 Vulkan 扩展的 NVIDIA Ada 世代 GPU(或更新)、Visual Studio 2022、Python 3、Node.js,以及 Vulkan‑Headers/GLSLang 工具链(存储库可自动获取这些)。
  2. 获取工具 – scripts\fetch_tools.ps1(添加 glslang、Volk、CMake、Ninja 等)。
  3. 构建引擎 – scripts\build.ps1 编译着色器、PTX,并生成 build\dlss5vk.exe。
  4. 可选演示设置 – 获取并修补 Filament(fetch_filament.ps1 / build_filament.ps1),然后构建演示(build_demo.ps1)。
  5. 运行 –
    • 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 提供的捕获测试数据(未包含)进行比较。比较是位元精确的;失败会报告为零符号差异、单码偏差(对于 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 为社区提供了一个透明、可重现的平台,用于研究 NVIDIA 最新的生成式神经渲染技术,包括低级 PTX 内核、参考 GLSL 路径,以及可直接运行的演示。

相关

  • 项目
  • 项目
  • 项目
  • 项目