OpenDLSS-NR 的 71 个 Block 网络地图:6 级 U-net、Swin 位移窗口与 ViT 瓶颈完整解析

发布时间:2026/10/23 7:22:40
OpenDLSS-NR 的 71 个 Block 网络地图:6 级 U-net、Swin 位移窗口与 ViT 瓶颈完整解析
【免费下载链接】OpenDLSS-NRA Vulkan reimplementation of NVIDIAs DLSS 5 Neural Rendering network, bit-exact against the original.项目地址https://gitcode.com/gh_mirrors/op/OpenDLSS-NR点击查看免费下载OpenDLSS-NR 是 NVIDIA DLSS 5 Neural Rendering神经渲染网络的 Vulkan 重新实现与官方原版 bit-exact逐位一致。本文将带你绘制这张由 71 个 Block 组成的网络地图6 级 U-net 分辨率金字塔、Swin 位移窗口注意力机制以及位于底部的 ViT 全局注意力瓶颈并解释它为什么是生成式渲染器而不是超分辨率放大。 先认识 OpenDLSS-NR它到底在做什么一句话DLSS-NR 不是超分它是重渲染。网络接收引擎已经画好的一帧一个低动态范围 proxy 代理图 3 通道高斯噪声 上一帧重投影的历史 5 个条件标量输出同样是原始分辨率但细节由注入的噪声生成出来同时按 style 设置调整色调、结构与皮肤质感。这个仓库的几个关键事实与 DLSS-NR 310.8.0 相同的 71-block Swin / ViT 网络在 tensor core 上跑 FP8E4M3 激活 FP16 累加权重共 141 MiB中间结果也一致所有 75 个 block 边界逐字节匹配原版而不是只有最终图片对得上每条跨越 kernel 边界的值都是 E4M3 字节或 IEEE half——网络的身份就是这一连串舍入序列因此 bit-exact 意味着匹配舍入顺序而非误差上界完整的文档入口在 docs/README.md网络图全貌在 docs/network.md️ 网络总览71 个 Block 的分布地图整个网络是一个带位移窗口的 Transformer U-net底部放一个全局 ViT。71 个 Block 按下采样—瓶颈—上采样对称排布通道数随深度翻倍再折回阶段Block 编号通道数分辨率级别作用全分辨率入口032原始 field输入适配 第一个窗口块编码器 L01–4321/2窗口注意力编码器 L15–8641/4窗口注意力编码器 L29–141281/8窗口注意力编码器 L315–222561/16窗口注意力编码器 L423–305121/32窗口注意力ViT 瓶颈31–3810241/64全局注意力解码器 L4→L039–69512→32逐层上采样与编码器 skip 连接全分辨率出口7032原始 field输出 head每个编码器 stage 与同级的解码器 stage 之间通过 skip connection 相连下采样是 2x2 池化 通道翻倍 GEMM上采样是通道减半 GEMM 最近邻 2x 放大再叠加 skip 的缩放。分辨率金字塔是怎么算出来的网络要求6 次整除减半后解码器能精确落回编码器尺寸因此输入图像会先被 pad 成一个field补零填充场。比如有效尺寸填充后 fieldlevel 0 → level 5512x512576x512288x256 → 12x81920x10801920x1152960x576 → 32x20这个填充不只是内存对齐——它决定了哪些 token 存在是算术的一部分。规则细节见 docs/network.md 的 The padded field 一节。 解剖一个 BlockFFN → QKV → 窗口注意力 → 投影每个 Block 的数据流按发布顺序state x (E4M3) ├─ FFN(x) ─────────────┐ ├─ x * ffnScale ──→ ()→ y ──→ 发布为 E4M3 │ │ └─ Proj(WindowAttention(QKV(y))) ─┐ y * attnScale ───────────────→ ()→ out要点只有三个两次缩放 skipffnScale和attnScale是逐通道学习的 f16 向量skip 不是事后相加而是作为首个矩阵乘的累加操作数种进累加器——因为舍入位置不同结果也不同FP8 GEMM 是 prologue 而非 epilogue正因 skip 要先进累加器残差处理必须放在乘法链开头一个微妙不对称32 通道的 Block 用 FFN 的原始 f16结果做注意力 skip更宽的 Block 用其E4M3 发布值——两种都被原生实现固定了FFN 的形态随通道数变化这也是理解权重布局的关键通道数 CFFN 结构32稠密32→128→32第一层后 SiLU64 / 128 / 256C/32条并行专家路径各C→128→32拼回 C 后接一个C→C的 W3 层无路由不是 MoE是分组瓶颈 FFN5128 条 64 宽分支64→256→64仅 256 宽中间层有 SiLU512→512收缩层1024ViT稠密1024→4096→1024 Swin 位移窗口4 个相位而不是通常的 2 个窗口注意力的基本单元是8x8 token 的窗口。为了让窗口看到边界外的信息Swin 风格的做法是移动窗口网格。这个网络用了4 个相位而非通常交替的 2 个——把对角偏移拆成 x、y 两个轴phase窗口原点偏移0(0, 0)1(-4, -4)2(-4, 0)3(0, -4)两条容易忽略的规则相位按 Block 推进且解码器接着编码器的计数继续。例如 L2 有 6 个编码器块相位 0,1,2,3,0,1它的 6 个解码器块就从相位 2 开始。全分辨率级别上block 0 用相位 0block 70 用相位 1越界窗口不裁剪负原点或伸出边缘的窗口其域外 token 是零向量key/value 贡献为零但它们的prior 0分数仍进入 softmax 分母——这不是近似把它们 mask 掉会得到不同的结果注意力本身用的是缩放余弦注意力q、k 先做 f16 余弦归一化再乘逐头学习的 f32 温度logit 变为有界余弦相似度——这正是 FP16 累加器加 3 位尾数权重能跑通的原因也解释了为什么 softmax 前没有 max 减除。指数函数不用超越函数而是 half 位操作技巧把仿射值 clamp 后左移位域指数位一步得到exp(s)差一个 softmax 会除掉的比例常数。 ViT 全局注意力真正的瓶颈Block 31–38 是 1024 通道的 8 个 ViT Block工作在 level 51/64 分辨率上对全部 token 做全局注意力而窗口块只看 8x8。它和窗口块有 4 处猜不到的差异差异点窗口块ViT 块attention prior每头学习的 64x64 偏置无Q 缩放q * norm * learnedq * norm * sqrt(32) * learned三次独立的 half 乘法平方和归一化fma(v, v, f16(high²))半精度路径低位平方用 f32高位平方先舍入到 half 再求和softmax权重先归一化再乘 P V权重不归一化倒数事后乘到 value 累加器上且分母要扣掉 padding 行的exp(0)它的指数位技巧常数也不同有效 clamp 范围约 [-3, 3]窗口是 [-6, 6]。token 数 pad 到 64 的倍数padding 行有零 K/V 并拿到同样的exp(0)权重由上述分母修正移除。由于 level 5 尺寸很小1080p 下仅 32x20全局注意力的token 数不多但1024 通道的稠密1024→4096→1024FFN是整张网络最重的部分加上全 token 打分矩阵构成了性能瓶颈——这也是 PTX 路径为它专门做了 split-K 与流式变体的原因见 docs/execution.md。 输入 16 通道 → 输出 4 通道输入16 个 f32 通道按序3 通道高斯噪声Box-Muller用padding 后坐标哈希→ 常数 1 → proxy 颜色居中(c-0.5)/8→ 重投影的历史输出 → style id/128 → 局部色调 → 结构/皮肤/自动 mask 三元组 → 0。有效矩形之外的采样是镜像而非 clamp但噪声哈希仍用 padded 坐标。输出headblock 70 的原始 f16 输出经32→4f16 GEMM 得到通道 0–2RGB 残差neural clamp(proxy rgb/4, 0, 1)通道 3时间混合 logitweight clamp(sigmoid(logit) * blendScale, 0, 1)与重投影历史做 lerp这个 4 通道的 head 是网络生成与记忆之间的逐像素仲裁者——遮挡等复杂情况就交给它自己的混合权重处理。完整帧管线proxy、运动向量、历史重建、合成在 docs/frame.md。 进一步阅读关键文件清单内容路径设计总纲表示、不变量、无推导清单docs/README.md网络全图block 结构、窗口相位、field 规则docs/network.mdbit-exact 契约舍入、softmax、E4M3 发布docs/numerics.md模型目录与权重布局153 条张量记录docs/weights.mdVulkan 执行、kernel 集合、无 barrier 链式调度docs/execution.md帧管线从渲染图到像素docs/frame.md网络图录制71 个 Block 的组装src/nr_graph.cpp模型加载与权重重排布src/nr_model.cppCPU 参考实现bit-exact 的算术移植src/reference.cppGLSL 参考 kernel 集shaders/PTX 快速路径生成器Swin 算术只写一次scripts/ptx/Filament 实时 demo含时间历史回路demo/✅ 小结OpenDLSS-NR 的价值在于把一张黑盒网络彻底摊开71 个 Block、6 级 U-net、4 相位 Swin 位移窗口、8 个 ViT 全局瓶颈块——每一处结构、每一个常数、每一种舍入顺序都被文档化为被原生实现指定的语义或本实现的优化选择。配合parity工具的逐字节比对这是理解 DLSS 5 神经渲染最完整的公开解剖图。赞分享【免费下载链接】OpenDLSS-NRA Vulkan reimplementation of NVIDIAs DLSS 5 Neural Rendering network, bit-exact against the original.项目地址https://gitcode.com/gh_mirrors/op/OpenDLSS-NR点击查看免费下载相关推荐突破算力瓶颈Swin Transformer窗口注意力机制详解突破算力瓶颈Swin Transformer窗口注意力机制详解 你是否还在为Transformer模型的高计算复杂度而困扰当处理高分辨率图像时传统Tran人工智能深度学习计算机视觉预训练swin_s3_small_224.ms_in1k背后原理Swin Transformer移位窗口注意力机制图解swin_s3_small_224.ms_in1k背后原理Swin Transformer移位窗口注意力机制图解 一句话认识这个模型 swin_s3_s突破图像上色瓶颈DeOldify中U-Net架构与ResNet骨干网络的革命性设计突破图像上色瓶颈DeOldify中U Net架构与ResNet骨干网络的革命性设计 你是否好奇老照片上色工具如何精准还原历史色彩为何有些算法会产生模糊边缘或人工智能深度学习计算机视觉媒体生成图像处理上一篇Remotely远程脚本执行详解自动化管理100设备的秘密下一篇Nexa SDK模型格式转换教程GGUF到Nexa格式的完整流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考