资讯动态

141 MiB权重怎么读?OpenDLSS-NR模型目录与E4M3 MMA碎片打包布局详解

发布时间:2026/10/23 1:46:29 来源:尧图企业网站定制
【免费下载链接】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 块 Swin / ViT 网络、FP8E4M3激活、141 MiB 的权重。它最大的门槛不在编译而在模型目录——权重不是常见的 ONNX / safetensors而是一堆按 tensor core 的 MMA 碎片顺序打包的 E4M3 字节。本文带你读懂 manifest.json 的结构、153 条 tensor 记录的组织方式以及 packedWeightIndex 背后的 E4M3 MMA 碎片打包布局。同一帧画面左关右开神经渲染WebGPU 移植版2048x1152。模型目录长什么样manifest.json 三要素仓库不提供权重你需要自备一个模型目录默认在 README 旁的models\nr也可用--model dir指定。目录的核心是manifest.json由 src/nr_model.cpp 的Model构造函数解析字段内容说明totals.blockCount71不是 71 块的模型会在加载时直接拒载stages[]11 个打包文件每条含id、file相对model/子目录、packedByteLength、sha256加载时逐文件校验大小与 SHA-256除非--no-verifytensors[]153 条记录每条blockN.layerM.parameter是某个 stage 文件里(stageOffset, byteLength)的一个切片一句话概括stage 是磁盘上的物理文件tensor 是逻辑切片。加载时 stage 被整块读入内存L78-L89153 条 tensor 记录则各自指向对应 stage 的字节区间零拷贝完成映射。 整个模型的加载耗时约几秒其中大头是 SHA-256 校验——这恰好说明 141 MiB 权重的完整性是加载流程的一部分而非可选步骤。一条记录里有什么FusedLayout的权重拼接顺序一条 tensor 记录不是一个矩阵而是一整层的所有权重首尾拼接FFN 权重、逐通道 f16 缩放向量、注意力先验、逐头 f32 缩放……顺序由 FusedLayout 定义。以 C 通道的窗口块为例摘自 docs/weights.md偏移字节数内容expand 0E·C·128专家或C·128FFN W1contractWeightsE·128·32C·C专家或128·CFFN W2 W3—16零填充ffnCosSkip2CFFN 残差缩放f16 逐通道qkv3C²融合 Q|K|V 投影head-majorrelativeheads·8192每头 64x64 的 f16 注意力先验scalealignUp(4·heads, 16)每头学到的 f32 注意力温度projectionC²注意力输出投影attnCosSkip2C注意力残差缩放官方文档给出了一条漂亮的自检逻辑FusedLayout里每个偏移都是前面形状之和这个和恰好精确复现每条 tensor 的byteLength——布局对不对算一遍就知道。不同块还有各自的变体block 0 在 W2 后插入16→32输入适配器preFusedLayout每个解码器阶段首块插入上采样矩阵upsampleFusedLayoutblock 70 追加32→4的 f16 头postFusedLayout512 通道块拆成 4 条 layer 记录ViT 块则把每头缩放放在 qkv 权重之前。核心E4M3 权重为什么按碎片打包这是全文的重点。docs/weights.md 开篇就点破权重不是按矩阵存的而是按 MMA 碎片存的。网络里每个 FP8 GEMM 都是一串16x16x32的 E4M3×E4M3→f16 协同矩阵乘法对应硬件指令mma.sync.aligned.m16n8k32.row.col.f16.e4m3.e4m3.f16。于是最顺路的存储顺序就是 B 操作数在寄存器里的碎片顺序最内层 512 字节 一对m16n8k32B 碎片16 列 × 32 个 k分布在 32 条 lane 上每条 lane 16 字节两个 8 列半区 × 两个 16-k 半区 × 4 字节往上是nGroup512 B、nHalf2048 B、nTile4096 B、kTileN·32B逐级卷叠。字节级索引公式在 packedWeightIndex 中只有几行位运算lane (n % 8)·4 (k % 16)/4 byteInLane ((n % 16)/8)·8 ((k % 32)/16)·4 (k % 4)直观理解lane 编号决定哪条 GPU 线程lane 内 16 字节决定这个线程拿到的 4 个 k × 4 个 n——和 tensor core 的取数路径完全对齐零重排即可喂给 MMA。加载时主机端会遍历这个碎片布局反向摊平成普通矩阵再上传 GPUfp8MatrixBytes默认[K/batchK][batchK/32][N][32]k32-tile-major保证一个 B tile 是连续的 16 字节对齐块配合协同矩阵加载tileMajor false时改为[K/batchK][N][batchK]N-major供单次乘法的 B 操作数使用。一个容易忽略的置换chained activation index每个 FP8 GEMM 的 A 操作数激活在每个 32 通道组内还有一个位旋转置换索引位 1..3 轮转0 1 2 3 4 5 6 7 8 …→0 1 8 9 2 3 10 11 4 5 12 …。运行时对激活做置换太贵于是 OpenDLSS-NR 把逆置换直接烘进了权重的 K 行加载时对每个权重矩阵的 k 行做 inversePackedInputIndex 重排内核就能按自然通道序加载 A。这在数学上成立的前提是置换始终不越出每个 16 个乘积的小组——正是 f16 累加的分组边界。构造函数里还有一条断言式检查置换必须可逆否则直接抛错。另外两种布局f16 矩阵与注意力先验数据布局说明16→32输入适配器、32→4头m16n8k16f16 碎片按 (k,n) 行主序 16x16 平铺两个矩阵是该平铺的两种退化形态1 个 k tile × 2 个 n tile2 个 k tile × 1 个 n tile所以 packedF16WeightIndex 是一个函数而非两套布局64x64 注意力先验16x16 碎片 tile两个 token 轴都按 4x4 物理序Model::relativeBias 把它改写为[head][64 自然序 query][64 物理序 key]——query 是S QKᵀ的 A 行自然序key 是 B 列物理序也是 softmax 的归约顺序缓存与生命周期重排只做一次所有重排在加载期完成后就固化为 device-local 缓冲按(tensor, offset, shape, batchK, layout)在Model::matrices_中缓存。重录整张图时重新请求的是同样的 key拿到的是同样的缓冲Model析构时统一销毁没有悬垂资源。这意味着141 MiB 的碎片解包与 SHA 校验只发生在加载那几秒帧循环里拿到的都是现成的连续矩阵。下一步想继续深入读什么文档回答什么问题docs/weights.md本文的完整版目录、全部布局与重排docs/network.md71 块图结构、输入 16 通道、padded field 规则docs/numerics.mdbit-exact到底指什么E4M3 发布点、F13 定点累加、softmax 归约树docs/execution.md241 次 dispatch 的调度、无 barrier 计数链docs/frame.mddemo 里从渲染帧到像素、再到时间回环跑通后可以用dlss5vk.exe bench --model dir --width 768 --height 768看性能用parity --model dir --fixture dir对原始实现的录制捕获做逐位比对——权重读对了一切才谈得上bit-exact。赞分享【免费下载链接】OpenDLSS-NRA Vulkan reimplementation of NVIDIAs DLSS 5 Neural Rendering network, bit-exact against the original.项目地址https://gitcode.com/gh_mirrors/op/OpenDLSS-NR点击查看免费下载相关推荐Changie开发者指南如何扩展和自定义变更日志模板的终极教程Changie开发者指南如何扩展和自定义变更日志模板的终极教程 Changie是一款强大的自动化变更日志工具专为开发者设计能够帮助团队高效管理项目发布流程TotalSegmentator 打包与发布流程详解pre-commit 检查、PyPI 发版与模型权重分发TotalSegmentator 打包与发布流程详解pre commit 检查、PyPI 发版与模型权重分发 本文基于仓库内的 package_managem医疗健康人工智能计算机视觉深度学习MCP 服务AI 技能DeepSeek-V3-W4A8-Pruing权重文件怎么读safetensors三分片结构与index索引完全解析DeepSeek V3 W4A8 Pruing权重文件怎么读safetensors三分片结构与index索引完全解析 初次接触 DeepSeek V3 W4A上一篇深入理解Lunr.js索引构建机制下一篇Node-fs-extra 项目常见问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑