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로 훨씬 느림).

실행 방법

  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 제공 캡처 픽스처(포함되지 않음)와 비교합니다. 비교는 비트 정확합니다. 실패는 0 부호 차이, 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의 최신 생성형 신경 렌더링 기술을 연구하기 위한 투명하고 재현 가능한 플랫폼을 커뮤니티에 제공합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트