news 2026/10/22 7:02:10

如何读懂 dd_metastate 缓存:Llama-3.1-8B_rai_1.8.0_npu_4K 预填充/解码双阶段 NPU 状态文件完整解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何读懂 dd_metastate 缓存:Llama-3.1-8B_rai_1.8.0_npu_4K 预填充/解码双阶段 NPU 状态文件完整解析

【免费下载链接】Llama-3.1-8B_rai_1.8.0_npu_4K

项目地址:https://ai.gitcode.com/hf_mirrors/amd/Llama-3.1-8B_rai_1.8.0_npu_4K
点击查看免费下载

Llama-3.1-8B_rai_1.8.0_npu_4K是 AMD 面向 Ryzen AI(NPU)深度优化的 Llama 3.1 8B 大语言模型部署包,采用 UINT4 量化权重 + 4K 上下文支持。如果你下载过这个仓库,会发现根目录散落着 54 个以dd_metastate_开头的"神秘文件"——它们正是 NPU 运行 ONNX 模型所必需的预编译状态缓存,覆盖了 Prefill(预填充)和 Token(逐词解码)两个推理阶段。

本文带你完整解析这套 dd_metastate 缓存文件机制 🧩

一、dd_metastate 缓存是什么?

在 AMD OGA(Optimized Graph Architecture)部署流程中,ONNX 模型并不是运行时直接执行的。AMD 的模型构建工具会先把整个模型融合、扁平化并预编译为 NPU 硬件可高效执行的形态,产物就是这些dd_metastate_*文件:

组件作用
dd_metastate_*.meta算子图元数据(operator list、tensor_map、buffer 布局)
dd_metastate_*.stateNPU 状态表(state table)初始状态
dd_metastate_*.fconst扁平化常量缓冲——全部模型权重按 NPU 内存布局排布
dd_metastate_*.ctrlpkt控制包(control packet)占位,运行时动态填充
dd_metastate_*.super超级指令(super instruction)缓冲占位

💡 类比理解:如果把model.onnx比作"源代码",那么 dd_metastate 文件组就是"编译好的可执行文件 + 运行时状态",NPU 直接加载它们,跳过了大量运行时准备工作。

二、文件名速读:一次看懂 5 段命名规则

以一个真实文件为例(点击可打开仓库中对应文件):

dd_metastate_Llm_Token_Token_modellayers.0input_layernormMLADFRMSNORM_attention_mask_padded_384_.meta

片段含义
dd_metastate_固定前缀,标记"数据驱动状态缓存"
Llm_Prefill/Llm_Token_Token推理阶段:预填充 或 逐词解码
modellayers.0input_layernormMLADFRMSNORM融合块入口算子名——整个 32 层模型被扁平化为一个以 layer 0 的 input_layernorm(MLADFRMSNORM)为起点的单一子图
sequence_length_padded_N/attention_mask_padded_N动态形状标识,N 为 padding 后的长度
.meta.state.fconst.ctrlpkt.super文件类型(见上表)

同一形状会有 5 个扩展名的文件一一对应,因此:每阶段 = 若干形状 × 5 种文件。

三、双阶段差异:为什么 Prefill 和 Token 的形状集合不一样?

模型推理分两个阶段,对 NPU 而言它们的输入张量不同,所以分别预编译:

维度Prefill(预填充)Token(逐词解码)
形状标识sequence_length_padded_Nattention_mask_padded_N
覆盖形状128 / 256 / 512 / 768 / 1024 / 1536 / 2048 / 2304 / 3072 / 4096,共10 档384 / 512 / 1024 / 1280 / 1536 / 2048 / 2304 / 2560 / 2816 / 3072 / 3328 / 3584 / 3840 / 4096,共14 档
特点一次性处理整段 prompt,长度是 128 的倍数即可解码阶段每轮追加 1 个 token,需更细的 256 步长粒度

运行时的行为:应用把实际序列长度向上 padding 到最近的一档,然后加载对应的 dd_metastate 文件组执行。这就是为什么仓库里成百上千个文件——每一档都是一份独立的预编译产物。

🔍 这 14 档 Token 形状与 cache/Token_modellayers.0input_layernormMLADFRMSNORM_meta.json 中的dynamic_shape_list字段完全一致,可交叉验证。

四、各文件真实体积一览(来自 Git LFS 指针)

仓库中大文件以 Git LFS 指针存储,指针里记录了真实大小。以下为实际数据 📦

共享文件(每阶段各 1 份):

文件真实大小
dd_metastate_Llm_Prefill_...fconst约 3.80 GB
dd_metastate_Llm_Token_Token_...fconst约 3.77 GB
dd_metastate_Llm_Prefill_...state843 B
dd_metastate_Llm_Token_Token_...state1,049 B
全部 24 个.ctrlpkt/ 24 个.super0 B(占位,运行时填充)

.meta元数据(每形状 1 份):

  • Token 阶段:14 份大小几乎相同,均为约 2.36 MB——因为解码阶段输入恒为 1 个 token,元数据不随形状膨胀。
  • Prefill 阶段:从padded_128的28.6 MB线性增长到padded_4096的241.7 MB——元数据需要为整段 prompt 的每层中间张量(scratch buffer)预留布局,长度越长条目越多。

.fconst的 3.8 GB 体量可以佐证它承载了全部 UINT4 量化权重(约 8B 参数 × 0.5 字节 + scales/zeros/归一化层权重),这也解释了模型为什么能在 32 GB 内存的笔记本上流畅运行。

五、元数据里藏着什么?

cache/Token_modellayers.0input_layernormMLADFRMSNORM_meta.json(约 1.2 MB)是与 dd_metastate 配套的明文 JSON 元数据,其中包含 289 个算子节点,仅 5 种算子类型:

算子类型含义
MLADFRMSNORM入口 RMSNorm(融合版)
FlatRMSAddRMSNorm + 残差加法的融合算子
FLATMHA融合多头注意力(GQA)
FlatMLP融合 MLP(gate/up/down)
MladfMatMul扁平化量化矩阵乘

"Flat" 前缀正是 OGA 的核心思想:把 32 层 LLaMA 展开并融合成一条紧凑的算子链,最大限度减少 NPU 数据搬运。元数据中还能看到:

  • aux_info.is_llm: True与states: [[0, 1, 1]]:LLM 会话状态标记;
  • ext_buf_0(512 MB 外部缓冲):32 层 × 8 个 KV 头 × 4096 长度的 K/V 缓存区,正是 4K 上下文的物理载体;
  • 输入绑定attention_mask_padded、sin_cache_cos_cache_sliced(RoPE 缓存切片)等——与 genai_config.json 中context_length、config.json 的rope_scaling配置呼应。

六、实用要点清单 ✅

  1. 别删、别改:dd_metastate 文件组是 NPU 会话的"燃料",删掉任何一个都会导致模型无法加载。
  2. 需要 LFS 拉取:仓库中它们只是几十字节的 Git LFS 指针,必须用支持 Git LFS 的客户端 checkout 才能拿到 3.5 GB 级的真实数据。
  3. 形状对不上会报错:若运行时请求的长度不属于已预编译的档位(如 Token 阶段请求 200 长度会 padding 到 384 档),超出 4096 则超出本模型(_npu_4K版本)支持范围。
  4. 想自己复现?:该模型由 "Quark Quantization → OGA Model Builder → NPU 后处理(Full Fusion 4K context)" 三步生成,详见 README.md 的 Quick Start 与 rai_config.json(其中max_prompt_length按 Ryzen AI 驱动版本声明 2048/4096)。

七、30 秒速查表

你的疑问答案
一共有多少个 dd_metastate 文件?54 个(24 meta + 24 ctrlpkt + 24 super 中的配对关系 + 2 state + 2 fconst,按阶段计:Prefill 10 形状 + Token 14 形状,各 ×5 扩展名,其中 state/fconst 每阶段各 1)
最大的是什么?.fconst,约 3.8 GB,即整套量化权重
哪个文件决定"长度档位"?文件名中的_padded_N段
想看懂算子结构去哪看?cache/ 下的两份*_meta.json

理解了这个机制,你就不难看懂 AMD Ryzen AI 系列 OGA 模型仓库中任何一批dd_metastate文件了——"阶段 × 形状 × 5 种扩展名"的命名矩阵,就是全部秘密 🔑

【免费下载链接】Llama-3.1-8B_rai_1.8.0_npu_4K

项目地址:https://ai.gitcode.com/hf_mirrors/amd/Llama-3.1-8B_rai_1.8.0_npu_4K
点击查看免费下载
上一篇:浏览器图片格式转换终极指南:3分钟掌握Save Image as Type扩展
下一篇:128K超长上下文!MiniCPM5-1B-Claude-Opus-Fable5-V2-Thinking-GGUF本地部署攻略

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 6:58:20

评测前必读:使用BEV Decision Mix跑基准测试的10个常见误区

数据集人工智能 【免费下载链接】bev-decision 项目地址: https://ai.gitcode.com/hf_mirrors/avbiswas/bev-decision 点击查看 免费下载 BEV Decision Mix(bev-decision)是一个包含 15 万条英文决策数据的混合数据集,提供 CHOIC…

作者头像 李华
网站建设 2026/10/22 6:52:59

C语言:野指针

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/22 6:52:53

【OS】进程、线程、协程

长期补充,建议关注收藏! 目录总结进程与线程Windows系统Mac系统协程总结 特性进程线程协程内存空间独立的内存空间共享进程内存空间共享同一个线程内存空间资源拥有独立的资源共享进程资源共享线程资源开销创建、销毁和上下文切换开销较大较小&#xff…

作者头像 李华
网站建设 2026/10/22 6:49:16

迅为iTOP4412精英版之Android镜像的烧写

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华