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)。 |
如何运行
- 先决条件 – 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 提供的捕获测试数据(未包含)进行比较。比较是位元精确的;失败会报告为零符号差异、单码偏差(对于 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 路径,以及可直接运行的演示。
相关
- 项目
- 项目
- 项目
- 项目