本文へ
ハクソク

世界を動かす技術を、日本語で。

OpenDLSS: NvidiaのDLSS 5ニューラルレンダリングネットワークのVulkan再実装

元記事: 原文(github.com)

概要

このプロジェクトは、NVIDIA DLSS 5 Neural Renderingネットワークの Vulkanによる再実装。 オリジナルとビット単位で一致 する精度を持ち、 71ブロックのSwin/ViTネットワーク を用いる。 Tensorコア上でFP8演算 を実行し、中間データも完全一致。 WebGPUによる ブラウザ実装 も含むが、TensorコアやFP8は未使用。 NVIDIAとは 無関係 であり、MITライセンス下で公開。

DLSS 5 Neural Rendering Vulkan再実装の特徴

  • NVIDIA純正DLSS 5 NR (バージョン310.8.0)のネットワークを Vulkanで再現
  • 71ブロックのSwin/ViT U-net 構造、6段階のプーリングレベル
  • FP8(E4M3)アクティベーション、 FP16で累積計算、重みは約141MiB
  • 生成型ニューラルレンダリングネットワーク として、既存フレームにノイズ注入・ディテール生成・トーンや構造の調整
  • アップスケーラではなく、入力と出力の解像度は同じ
  • 中間データ75箇所全てがオリジナルとバイト単位で一致 (最終画像だけでなく全ブロック境界も検証)

WebGPUポートについて

  • ports/browser-webgpu/ にて 独立したWebGPU実装
    • TensorコアやFP8は未使用、ブロック間の融合や連鎖もなし
    • ビット単位の一致は仕様レベルで保証
    • 512x512で72ms(Vulkan実装は同条件で2.7ms)

入出力・処理内容

  • 入力 :レンダリング済みフレーム、3チャンネルのガウスノイズ、前フレームの再投影出力、5つの条件スカラー
  • 出力 :ピクセルごとに4つのf32チャンネル(RGB残差+時系列ブレンドロジット)
  • デモ :LDRプロキシ画像を用い、NRオフ/オンの比較表示可能。glTFシーン対応

ビルドと実行方法

  • 必要環境 :Windows、NVIDIA Ada以降のGPU、VK_KHR_cooperative_matrix等のVulkan拡張対応ドライバ
  • 開発ツール :Visual Studio 2022(C++ x64)、git、Python 3(PTX生成用)、Node.js+npm(シーン変換用)、Pillow
  • ツールチェーン自動取得 :scripts\fetch_tools.ps1で依存ツール一括DL
  • ビルド手順 :
    • shaders, PTX, 実行ファイルのビルド
    • Filamentのパッチ適用・ビルド(デモ用)
  • 実行例 :
    • build\dlss5vk.exe bench --model <dir> --width 768 --height 768
    • build\dlss5vk.exe parity --model <dir> --fixture <dir>(ビット一致検証)

パフォーマンス

  • RTX 4070 SUPERでの1フレーム処理時間(最小値、40フレーム平均)
    • 768x768:2.8ms
    • 1920x1080:7.8ms
    • 2560x1440:12.6ms
    • 3840x2160:29.3ms

ソース構成

  • src/ :C++20によるVulkanコンテキスト、モデルロード、重み再配置、ネットワークグラフ、CPU参照実装
  • shaders/ :GLSLカーネル。協調行列FP8 GEMM、QKV+ウィンドウアテンション等
  • scripts/ptx/ :PythonによるPTXカーネル自動生成
  • demo/ :Filament統合デモ、glTFシーン、ImGui制御
  • ports/browser-webgpu/ :WebGPUによるビット一致実装

モデルディレクトリと検証

  • モデル構成 :manifest.jsonによるstages配列(id, ファイル名, サイズ, sha256)、tensors配列(名前、ブロック、レイヤー、パラメータ等)
    • E4M3重みをパックしたステージファイル
  • 検証用fixture :manifest.json+参照データ(入力、出力、中間データ等)
    • 欠損や不整合がある場合は即エラー
    • ビット一致、ゼロ符号違い、8bit誤差、ミスマッチを判定

チューニングスイッチと環境変数

  • デフォルトは最速・完全一致ルート
  • GLSL参照ルート(DLSS5VK_UNFUSED=1) や、各カーネル単位での切り替えも可能
  • バリア挿入、カウンタ連鎖の有無、PTXディレクトリ指定等 多彩な検証オプション
  • Khronosバリデーションレイヤー対応 (DLSS5VK_VALIDATION=1)

ライセンス・注意事項

  • MITライセンス (サードパーティはNOTICE参照)
  • NVIDIAとは一切無関係
  • NVIDIAのソフトウェア・重み・ヘッダー・取得方法等は一切含まれない
  • 利用モデルデータのライセンス遵守は利用者責任

参考ドキュメント

  • docs/network.md :ネットワーク全体グラフ
  • docs/numerics.md :数値的精度の詳細
  • docs/weights.md :重みデータのレイアウト
  • docs/execution.md :スケジューリング
  • docs/frame.md :デモのフレーム処理

本プロジェクトは、DLSS 5 Neural Renderingの 研究・検証・デモンストレーション を目的とした オープンソース実装。

NVIDIA公式のDLSS-SR(アップスケーリング用途)とは異なるネットワーク であり、 生成型レンダリング の挙動を高精度に再現する。

提供: ハクソク · 要約更新:

AIによる日本語要約です。内容は原文とあわせてご確認ください。

Hacker Newsの議論を読む

Hackerたちの意見

メインのREADMEがLLM生成だと、なんか興味が持てないのは俺だけかな?著者は自分が何をしたのか、どう使われるのかを書く時間がないの?

└

考えてみると、実際には著者は自分がやったこと(何もしてない)と、どう使われるのか(使われてない)を書いたんだよね。

└

それについては別に気にしてないよ。

└

事実が間違ってるのがもっと腹立つ。例えば、「git-ignored」の言及が二回もあるのはおかしい(リポジトリにないならなんで言うの?)し、間違ってる(実際にはリポジトリにある)からね。

└

READMEが90%以上AI生成で、しかも小説みたいに長かったら、絶対読まないし、作者も読んでないか書いてないって思うわ。残念ながら、そんなのはゴミだよ。作者がDLSSの内部を理解してない限り、深く説明するのは無理だし。

└

「コードがLLM生成のプロジェクトに対して、興味を失っているのは私だけ?」著者はプロジェクトのコードを書く時間がないの?最近のHNのプロジェクト発表について、私はこんな気持ちだよ。みんなモデルについて自慢してるけど、ボーグに置き換えられることを全うしない理由はないよね。

└

Slopは新しい言語で、読んで学ぶことができるよ。

└

彼らがやったこと それがLLM生成のコードじゃないと仮定するのは大胆だね。

└

同意。誰が書いたにせよ、オープンソースの実装には価値があると思う。結果がちゃんと検証されることを願ってる。

└

人間がそのコードを書いたと思ってるの?1ヶ月で?それが空気だと思ってるの?先入観に挑戦する時かもね。

└

その通り。コードは機械のためのものだから、動けば誰が書いたかはあまり気にしない。でも、ドキュメントやUXみたいな人間向けの部分について考えることすらできないなら、あまり興味がないな。なんか安っぽく感じるし(悪い意味で)、引いちゃう。

ジェンセン: 誰ももうコーディングなんて必要ない... プログラマー: OpenDLSS... ジェンセン: ちょっと待って!そんな風じゃない!(╯°□°)╯︵┻━┻

Hacker Newsで議論の続きを見る

同じ出典の記事