ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

逆向解析Qwen-2.5_1.5B_Instruct_rai_1.8.0_npu_4K算子图:28层Transformer与GQA KV缓存的算子级实现

逆向解析Qwen-2.5_1.5B_Instruct_rai_1.8.0_npu_4K算子图:28层Transformer与GQA KV缓存的算子级实现 【免费下载链接】Qwen-2.5_1.5B_Instruct_rai_1.8.0_npu_4K项目地址https://ai.gitcode.com/hf_mirrors/amd/Qwen-2.5_1.5B_Instruct_rai_1.8.0_npu_4K点击查看免费下载Qwen-2.5_1.5B_Instruct_rai_1.8.0_npu_4K是 AMD 面向 Ryzen AI NPU 发布的 Qwen-2.5-1.5B 推理算子图模型基于 ONNX 格式 AWQ 4-bit 量化内置 28 层 Transformer 与 GQAGrouped Query AttentionKV 缓存专为 4K 上下文的端侧部署而优化。一、这个仓库到底交付了什么与其他模型仓库不同这里没有 Python 训练代码而是一份可直接加载的算子图部署包。核心文件如下文件作用model.onnx / model.onnx.dataONNX 算子图与分离权重数据config.json模型结构与 AWQ 量化配置算子图的图纸genai_config.jsonONNX Runtime GenAI 推理运行时配置dd_metastate_*.meta系列各分桶长度下的动态形状缓冲区元数据chat_template.jinja / tokenizer.json对话模板与分词器一句话总结它是 Quark 量化工具 → OGA Model Builder → NPU 后处理三步流水线在 Ryzen AI 上的最终产物详见 README.md。二、从 config.json 逆向 28 层 Transformer 的骨架打开 config.json就能读出整张算子图的建筑图纸2.1 主干维度小而深的结构num_hidden_layers: 28——28 层 Transformer每层内部由input_layernorm → Self-Attention → post_attention_layernorm → MLP四个算子子图串联hidden_size: 1536、intermediate_size: 8960、vocab_size: 151936hidden_act: silu 三路投影gate_proj/up_proj/down_proj即标准SwiGLU激活的 FFN 算子组合rope_theta: 1000000.0RoPE 位置编码算子采用百万级 base支撑max_position_embeddings: 32768的长上下文能力。layer_types字段列出了 28 次full_attention意味着每一层都是全注意力结构——没有滑动窗口稀疏化use_sliding_window: false这让算子图更规整利于 NPU 做算子融合。2.2 GQA 算子图12 个 Q 头共享 2 个 KV 头这是本模型算子级实现的关键点num_attention_heads: 12 ← Q 投影输出 12 个头 × head_size 128 num_key_value_heads: 2 ← K/V 投影只输出 2 个头算子图含义是q_proj将 1536 维隐层状态投影为 12×128而k_proj/v_proj仅投影为 2×128。推理时每个 Q 头与对应的 KV 头做分组共享KV 缓存内存量直接缩减为 MHA 的 1/6——这正是端侧 NPU 内存紧张的救命设计。三、GQA KV 缓存的算子级实现KV 缓存不是抽象概念而是以命名的张量端口显式出现在算子图输入输出中。genai_config.json 里写得很直白past_key_names: past_key_values.%d.key ← 输入端口 past_value_names: past_key_values.%d.value present_key_names: present.%d.key ← 输出端口 present_value_names: present.%d.value其中%d会展开为 0~27对应28 层、每层 2 个 KV 头的缓存张量。整个自回归生成循环因此变成Prefill 阶段一次性处理完整 prompt28 层各自把 K/V 写入present.X.key/valueToken 阶段每步只处理 1 个 token上一轮的present作为下一轮的past回灌进图注意力算子把新 K/V 追加进缓存后继续输出past_present_share_buffer: true—— 运行时复用同一块物理缓冲区做读写避免 4K 上下文下缓存翻倍占用。配套地kv_cache_post_rope: false见 config.json说明 RoPE 旋转在 KV 写入缓存之前完成缓存里存的是已旋转值——这决定了缓存端口可以直接被下一轮复用而无需二次旋转。四、AWQ 量化算子图中每个 Linear 的皮肤该仓库最大的工程看点是 config.json 中的quantization_config它描述算子图里所有矩阵乘法MatMul算子的量化形态配置项取值算子级含义quant_methodquarkAMD Quark 量化工具链产出权重 dtypeuint4每个权重仅占 4 bit体积约为 fp16 的 1/4group_size128每 128 个权重共享一组 scale精度与压缩率折中qschemeper_group 非对称scale/zero-point 按组独立计算round_methodhalf_even银行家舍入量化偏差更均匀激活bfloat16权重 int4、激活 bf16 的混合精度算子algo_config.scaling_layers则按 AWQ 原理列出了敏感算子分组q_proj/k_proj/v_proj共享input_layernorm的输入做灵敏度标定gate_proj/up_proj共享post_attention_layernorm——这是典型的按输入通道重要性给敏感权重保留高精度的 AWQ 策略。weight_format: real_quantized表示权重在图中真实解包为 4-bit而非运行时动态量化NPU 上省去了反量化开销。五、dd_metastate 文件族为 4K 上下文预分配的形状缓存仓库里那批dd_metastate_Llm_*文件是 NPU 后处理留下的动态形状账本按Prefill / Token两个阶段命名Prefill 侧以sequence_length_padded_128到sequence_length_padded_4096分桶128/256/512/…/4096例如 dd_metastate_Llm_Prefill_...sequence_length_padded_4096.metaToken 侧以attention_mask_padded_256到attention_mask_padded_4096分桶256/512/1024/2048/3072/4096例如 dd_metastate_Llm_Token_...attention_mask_padded_4096.meta。每个分桶含.fconst常量张量、.state状态与.meta/.super/.ctrlpkt形状元数据、超级图与控制包三类小文件。其作用是把长度从运行时动态值固化为有限个预编译档位。NPU 编译时只需针对 128~4096 这几个档位做算子调度优化运行时把实际长度向上取整到最近档位即可——这就是命名中 4K 的工程含义4096 是预分配的上下文上限档位而模型本身仍具备 32K 的 RoPE 位置能力。六、算子图如何跑起来NPU 执行链路genai_config.json 定义了整张算子图的执行方式输入端口input_ids、attention_mask、position_ids 28 组past_key_values输出端口logits 28 组present执行提供者为RyzenAI且hybrid_opt_token_backend: npu—— Token 阶段自回归解码的算子被混合优化到 NPU 上执行权重经external_data_file外部加载解码策略参数temperature 0.7、top_k 20、top_p 0.8与 generation_config.json 的repetition_penalty 1.1保持一致rai_config.json 按 Ryzen AI 版本1.6.0/1.7.0/1.7.1声明max_prompt_length上限 4096呼应 4K 部署定位。对话入口则由 chat_template.jinja 注入 Qwen 标准...角色模板tokenizer.json 与 vocab.json 提供 151936 词表的分词能力特殊 token 见 special_tokens_map.json。七、小结一张图看懂这个模型input_ids ──► Embedding(151936→1536) │ ┌───────▼────────┐ │ × 28 层 │ │ RMSNorm │ │ GQA Attention │◄── past_key_values.%d.key/value │ (12Q头:2KV头) │──► present.%d.key/value │ SwiGLU MLP │ └───────┬────────┘ RMSNorm ──► LM Head ──► logits ──► 采样(temp 0.7/top_k 20/top_p 0.8)逆向结论Qwen-2.5_1.5B_Instruct_rai_1.8.0_npu_4K 的算子图实现可以概括为——28 层全注意力 Transformer 12:2 的 GQA KV 缓存端口 AWQ uint4/group-128 量化 Linear 4K 分桶动态形状预分配四者叠加让 1.5B 模型得以在 Ryzen AI NPU 上以混合精度、近实时速度完成长上下文推理。对想研究端侧 LLM 算子级优化的同学来说这个仓库的 config.json、genai_config.json 与 dd_metastate 文件族就是绝佳的图纸值得逐个对照阅读。赞分享【免费下载链接】Qwen-2.5_1.5B_Instruct_rai_1.8.0_npu_4K项目地址https://ai.gitcode.com/hf_mirrors/amd/Qwen-2.5_1.5B_Instruct_rai_1.8.0_npu_4K点击查看免费下载相关推荐CANN ops-transformer 算子解析MhcPreBackward 反向梯度算子实现与 aclnn 调用指南CANN ops transformer 算子解析MhcPreBackward 反向梯度算子实现与 aclnn 调用指南 本指南以 mhc/mhc_pre_b算子库人工智能大模型深度学习CANNAscendCANN ops-transformer 算子解析NsaCompressWithCache 推理阶段 NSA KV 压缩算子实战指南CANN ops transformer 算子解析NsaCompressWithCache 推理阶段 NSA KV 压缩算子实战指南 本篇技术指南围绕 CAN算子库人工智能大模型深度学习CANNAscendCANN ops-transformer 算子解析aclnnScatterPaKvCacheWithKScale 的 FP8 KV Cache 与 K-Scale 原地更新实现CANN ops transformer 算子解析aclnnScatterPaKvCacheWithKScale 的 FP8 KV Cache 与 K Sca算子库人工智能大模型深度学习CANNAscend上一篇高级Dork写法Awesome-Google-Dorks多操作符组合构建高精度搜索表达式下一篇如何用React Medium Image Zoom打造专业图片画廊7个实用技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表