【免费下载链接】Llama-3.2-3B-Instruct_rai_1.8.0_npu_16K
本文深入解析Llama-3.2-3B-Instruct在 AMD Ryzen AI 平台上的OGA 混合推理流水线。该模型经过 Quark 量化、ONNX 图优化和 NPU Token Fusion 编译三重处理,实现了 16K 上下文长度下 CPU 与 NPU 的高效协同推理,是 AMD 为 APU 端侧部署打造的完整工程实践案例。
📦 这个模型仓库到底是什么?
Llama-3.2-3B-Instruct_rai_1.8.0_npu_16K并非原始模型,而是 AMD 基于 Meta 的 Llama-3.2-3B-Instruct 进行的一整套端侧优化产物。
简单来说,它回答了一个核心问题:
如何让一个 3B 参数的大语言模型,在 AMD Ryzen AI 处理器(CPU + NPU 异构架构)上流畅运行 16K 上下文推理?
答案就是仓库名中暗示的三个阶段:量化(rai_1.8.0)→ OGA 混合推理(npu)→ 16K Token Fusion(16K)。
📌 详细说明见 README.md
🔧 三大流水线阶段:从原始权重到 NPU 可执行
整个优化流水线可以看作一条"加工厂",原始模型是原材料,最终产出是 NPU 可直接执行的推理图。
阶段一:Quark 量化 — 用 1/4 的体积保留精度
量化是体积缩减的第一步。该模型采用了 Meta 的Quark量化工具,具体策略如下:
| 量化维度 | 具体参数 | 说明 |
|---|---|---|
| 算法 | AWQ(Activation-aware Weight Quantization) | 根据激活分布自适应缩放,保护重要通道 |
| 权重精度 | UINT4 | 权重从 16-bit 压缩到 4-bit,体积缩小约 4 倍 |
| 分组大小 | Group 128 | 每 128 个权重共享一组缩放因子,平衡精度与压缩率 |
| 激活精度 | BFP16(Bfloat16) | 激活值保持 16-bit,避免推理精度损失 |
| 对称性 | 非对称(Asymmetric) | 独立处理正负偏移,提升小模型精度 |
这些配置完整记录在 config.json 的quantization_config字段中。其中scaling_layers定义了 AWQ 对q_proj、k_proj、v_proj、o_proj、gate_proj、up_proj、down_proj七类线性层的缩放关系,确保每一层量化都在正确的输入分布上计算缩放因子。
💡为什么选 AWQ?对于 3B 这样的小型模型,AWQ 相比简单的均匀量化能更好地保留注意力头的精度,同时保持 NPU 友好的 UINT4 格式。
阶段二:OGA Model Builder — 构建混合推理 ONNX 图
OGA(ONNX Graph Assembly)是 AMD Ryzen AI 工具链的核心组件,负责将量化后的 PyTorch 模型转换为面向异构执行的 ONNX 推理图。
这一步产出两类关键产物:
ONNX 计算图(model.onnx)
- 包含算子融合后的推理图结构
- 权重存储在外置数据文件 model.onnx.data 中
- 图内算子已被融合优化(如
MLADFRMSNORM融合算子),减少 CPU 调度开销
NPU 编译二进制(model.pb.bin)
- Ryzen AI NPU 提供商的专用执行格式
- 通过
external_data_file参数挂载到 ONNX Runtime 的 NPU Session - 由 Token Fusion 编译器生成(见下阶段)
📌 推理图的输入输出接口定义在 genai_config.json 中:输入为input_ids+attention_mask+ 历史past_key_values,输出为logits+ 更新的present.*KV 缓存。
阶段三:NPU Token Fusion — 16K 上下文编译
这是整个流水线中最"硬核"的一步。NPU 的算力虽然强大,但执行模型与 CPU 截然不同——它需要静态编译、预分配内存、固定输入形状。
Token Fusion 编译器针对不同的attention_mask长度,分别编译了专用推理图,对应仓库中一系列dd_metastate_*文件:
dd_metastate_Llm_Token_Token_..._attention_mask_padded_256_.meta dd_metastate_Llm_Token_Token_..._attention_mask_padded_512_.meta dd_metastate_Llm_Token_Token_..._attention_mask_padded_1024_.meta dd_metastate_Llm_Token_Token_..._attention_mask_padded_2048_.meta dd_metastate_Llm_Token_Token_..._attention_mask_padded_3072_.meta dd_metastate_Llm_Token_Token_..._attention_mask_padded_4096_.meta dd_metastate_Llm_Token_Token_..._attention_mask_padded_16384_.meta每个长度档位(256 → 16384)对应一组三元文件:
| 文件后缀 | 作用 |
|---|---|
.meta | NPU 状态表的元数据描述(算子列表、张量形状、执行顺序) |
.ctrlpkt | 控制包(Control Packet),NPU 调度器用于控制数据流和同步 |
.super | 超级指令块,预编译的 NPU 微码指令 |
以 cache/Token_modellayers.0input_layernormMLADFRMSNORM_meta.json 为例,可以清晰看到融合算子MLADFRMSNORM的输入张量、权重常量、输出张量及pdi_id(Platform Design ID)等 NPU 硬件级属性。
本质:Token Fusion 将动态的 ONNX 图"烘焙"为 NPU 可直接执行的静态二进制,每个序列长度档位一个独立编译产物,运行时按实际长度选择最近的档位执行。
⚡ 混合推理(Hybrid OGA)是怎么工作的?
"混合"是这个方案最核心的设计思想:CPU 和 NPU 各干各擅长的事。
Prefill 阶段 → CPU
当用户输入一段提示词(Prompt),模型需要一次性处理所有 token 并计算完整的 KV 缓存。这个阶段的特征是计算密集、序列并行,非常适合 CPU 的宽向量单元。
genai_config.json中的关键参数:
chunk_size: 4096— 每次预填充处理 4096 个 tokenhybrid_opt_chunk_context: 1+hybrid_opt_chunk_context_threshold: 1— 开启分块上下文处理
这意味着一个 8K 的 Prompt 会被拆成两个 4K 的 chunk,逐块送入 CPU 计算,避免一次性占用过多内存。
Token 生成阶段 → NPU
Prefill 完成后,进入逐 token 自回归生成。此时每步只需计算单个新 token,计算量小但迭代次数多(可能达数千步),对延迟极其敏感。
NPU 在此阶段的优势:
hybrid_opt_token_backend: npu— 明确指定 token 生成由 NPU 执行hybrid_opt_max_seq_length: 4096— NPU 单次处理的最大序列长度fusion_opt_io_bind_kv_cache: 1— KV 缓存绑定在 NPU 高速内存中,避免每步跨总线拷贝
📌 推理搜索策略(temperature 0.6、top_p 0.9、top_k 50)同样定义在 genai_config.json 的search段中。
整体数据流
用户 Prompt │ ▼ ┌─────────────────────────┐ │ CPU (Ryzen x86 核心) │ ← Prefill:分块处理,构建 KV Cache │ chunk_size = 4096 │ └────────────┬────────────┘ │ KV Cache 写入 NPU 绑定内存 ▼ ┌─────────────────────────┐ │ NPU (XDNA 加速器) │ ← Token 生成:逐 token 自回归 │ max_seq = 4096/步 │ └────────────┬────────────┘ │ ▼ 生成结果 (≤ 16384 tokens)📐 16K 上下文:参数背后的设计
名字中的16K并非随意标注,它对应 genai_config.json 中max_length: 16384——即最大生成 16384 个 token。
而模型本身的上下文能力远不止于此:
| 参数 | 值 | 含义 |
|---|---|---|
context_length | 131072(128K) | 模型架构支持的最大上下文窗口 |
max_position_embeddings | 131072 | 位置编码的最大范围 |
max_length(生成) | 16384(16K) | 实际部署中限定的最大生成长度 |
rope_scaling.factor | 32.0 | RoPE 外推缩放因子(llama3 类型) |
rope_scaling.original_max_position_embeddings | 8192 | 原始训练时的位置编码范围 |
💡RoPE 缩放:Llama-3.2-3B-Instruct 原始训练时最大位置为 8192,通过llama3类型的 RoPE 缩放(factor=32),将位置编码范围扩展到 131072,从而支持长上下文推理。
rai_config.json还记录了不同 Ryzen AI SDK 版本(1.3.1 ~ 1.7.1)对应的max_prompt_length上限(2048 ~ 4096),确保 Prompt 长度与 SDK 能力匹配。
📂 仓库文件结构速览
| 文件 / 目录 | 作用 |
|---|---|
| model.onnx + model.onnx.data | OGA ONNX 推理图 + 外置量化权重 |
| model.pb.bin | NPU 编译二进制(Token Fusion 产物) |
| model.bin | 模型辅助二进制 |
dd_metastate_*(21 个文件) | NPU 状态表:各长度档位的元数据、控制包、超级指令 |
| cache/ | Token 图编译缓存(txn_bins.zip包含 NPU 可执行二进制包) |
| genai_config.json | ONNX Runtime GenAI 推理配置(混合推理参数核心) |
| config.json | HuggingFace 模型配置 + Quark 量化策略 |
| orig_params.json / params.json | 原始/当前模型结构参数(28 层、3072 隐层、GQA 8 KV 头) |
| rai_config.json | 各 SDK 版本的 Prompt 长度上限 |
| generation_config.json | 采样参数(temperature 0.6、top_p 0.9) |
| tokenizer.json / tokenizer.model | 分词器(FastTokenizer + SentencePiece) |
| chat_template.jinja | 对话模板(Jinja2) |
| special_tokens_map.json | 特殊 token 映射(<|begin_of_text|>、<|eot_id|>) |
| USE_POLICY.md | Meta Llama 3.2 可接受使用政策 |
| LICENSE.txt | MIT 许可证(AMD 修改部分) |
🚀 快速上手
在 AMD Ryzen AI 设备上部署该模型,需要Ryzen AI SDK 1.8.0及以上版本。基本流程:
- 获取模型:从模型仓库下载全部文件(含 LFS 大文件)
- 加载推理引擎:通过 ONNX Runtime GenAI 加载 model.onnx,配置 RyzenAI Provider 指向 model.pb.bin
- 执行推理:调用
generate()方法,引擎自动完成 Prefill(CPU)→ Token 生成(NPU)的混合调度
📖 完整的 Quick Start 和 API 示例请参考 AMD Ryzen AI 官方文档中的Hybrid OGA章节。
⚠️ 注意:
rai_config.json表明 Prompt 长度受 SDK 版本限制(最高 4096),超长 Prompt 需使用 1.6.0+ 版本。
✅ 关键技术参数一览
| 维度 | 参数 |
|---|---|
| 源模型 | Llama-3.2-3B-Instruct(Meta) |
| 架构 | 28 层 Transformer,hidden_size 3072,24 注意力头 / 8 KV 头(GQA),head_dim 128 |
| 词表大小 | 128,256 |
| 量化 | AWQ / UINT4 / Group 128 / BFP16 激活 |
| 最大上下文 | 131,072(128K,RoPE 缩放 ×32) |
| 最大生成长度 | 16,384(16K) |
| Prefill 分块 | 4,096 tokens/chunk |
| 推理后端 | CPU(Prefill)+ NPU(Token 生成) |
| 目标硬件 | AMD Ryzen AI(XDNA NPU) |
| SDK 版本 | Ryzen AI SDK 1.8.0 |
总结
Llama-3.2-3B-Instruct_rai_1.8.0_npu_16K是一个端到端的工程化产物,完整展示了大模型从云端权重到端侧 NPU 推理的全链路优化路径:
- Quark 量化把 3B 模型压到 UINT4,体积缩小 4 倍
- OGA Model Builder将量化模型转为融合算子 ONNX 图,定义 CPU/NPU 分工
- Token Fusion按序列长度档位编译 NPU 专用二进制,绑定 KV 缓存到 NPU 内存
- 16K 上下文通过分块 Prefill + RoPE 外推实现,兼顾吞吐与长度
这套流水线并非玩具实验,而是 AMD 在 Ryzen AI APU 上实现实用级端侧 LLM 推理的参考实现。对于希望理解 NPU 部署细节、或需要将自研模型适配到 Ryzen AI 平台的开发者,这个仓库中的每个配置文件和编译产物都是极佳的"解剖样本"。
【免费下载链接】Llama-3.2-3B-Instruct_rai_1.8.0_npu_16K
相关推荐
6个实用技巧:提升Llama-3.2-3B-Instruct_rai_1.8.0_npu_16K推理速度与生成质量
6个实用技巧:提升Llama 3.2 3B Instruct_rai_1.8.0_npu_16K推理速度与生成质量 Llama 3.2 3B Instruct_
从model.onnx到NPU执行:Llama-3.2-1B-Instruct_rai_1.8.0_hybrid的ONNX Runtime GenAI混合推理链路完整解剖
从model.onnx到NPU执行:Llama 3.2 1B Instruct_rai_1.8.0_hybrid的ONNX Runtime GenAI混合推理链
Llama-3.2-3B-Instruct_rai_1.8.0_hybrid 运行原理解析:从ONNX计算图到Ryzen AI NPU推理的完整旅程
Llama 3.2 3B Instruct_rai_1.8.0_hybrid 运行原理解析:从ONNX计算图到Ryzen AI NPU推理的完整旅程 Llama
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考