news 2026/5/9 17:44:34

CANN算子迁移指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN算子迁移指南

算子迁移指南

【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾(Ascend)芯片的轻量级、解耦式组件集合,旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件,未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion

函数部分

函数主体:

  1. cube/vector和函数部分分别使用__DAV_CUBE____DAV_VEC__宏进行隔离

函数名部分:

  1. 原有__global__标识替换为__spk__标识
  2. 函数名更新为其他具备判别性的函数名

函数参数部分:

  1. 统一修正为使用__gm__ uint64_t *param指针进行传递
  2. 通过(GM_ADDR)param[index]方式获取原有参数
  3. 结构体参数需要通过GET_STRUCT_PTR宏进行获取,注意获取到的内容为结构体指针

功能主体部分:

  1. 原有逻辑保持不变
  2. 注意对应的结构体部分转换为了tiling指针,无需再次取地址
  3. 函数结尾不需要再添加pipe_barrier(PIPE_ALL);,由框架统一处理

额外注意:

  1. 【Planing】目前纯V算子为保证直调使用,暂时使用内部方案FunLevelKType进行标识,后续会有更完善的方案【后续一定会删除】
  2. mix1:1和mix1:2算子需要区分mix_aic和mix_aiv两种类型,分别对应AIC和AIV的场景
  3. 【Planing】目前SK算子暂时没有使用模板写法,主要目前暂不能自动获取对应SK入口的函数名,后续会完善该部分
  4. 【Doing】目前8.3版本的cann包条件下不支持在sk框架中使用AscendC::printf, 后续的版本已定位并解决了这个问题

编译部分

  1. 使用ASC编译方式进行编译
  2. 需要增加ops的common路径,内置了迁移所需的辅助宏

SK框架部分

  1. 【Planing】目前在迁移完成后,需要在sk_task.cppg_sk_fun_map中手动增加函数名映射,以便框架能够正确获取函数地址
  2. SkBuildTask构建算子任务时,当前框架自动偏移了ffts,但后续的cann版本底层接口已完成偏移,无需框架完成,暂时为了兼容仍保留的该部分代码,后续会删除该部分逻辑

算子实例

算子实现&编译

同时写2个入口函数,一个global应用于单算子,一个aicore用于sk调用

// 默认打开了SuperKernel选项,但算子模式退出前自己加一个PIPE_ALL template<typename DTYPE_X, typename DTYPE_GAMMA> __global__ __aicore__ void rms_norm(GM_ADDR x, GM_ADDR gamma, GM_ADDR y, GM_ADDR rstd, RMSNormTilingData tiling) { { KernelRmsNormMergeN<DTYPE_X, DTYPE_GAMMA, RMSNormTilingData> op; op.Init(x, gamma, y, rstd, &tiling); op.Process(); } pipe_barrier(PIPE_ALL); } // aicore函数需要通过宏隔离一下,否则编译有问题(当前有bug,会导致编译1个aic,1个aiv) #ifdef __DAV_VEC__ extern "C" __aicore__ void rms_norm_half_half_sk(__gm__ uint64_t *param) { GM_ADDR x = (GM_ADDR)param[0]; // 参数需要额外处理一下,从单一的buffer中获取 GM_ADDR gamma = (GM_ADDR)param[1]; GM_ADDR y = (GM_ADDR)param[2]; GM_ADDR rstd= (GM_ADDR)param[3]; KernelRmsNormMergeN<half, half, __gm__ RMSNormTilingData> op; // tiling结构体需要带__gm__描述,不属于参数表了 __gm__ RMSNormTilingData *tilingdata = (__gm__ RMSNormTilingData *)(__gm__ uint8_t *)(param + 4); op.Init(x, gamma, y, rstd, tilingdata); op.Process(); } #endif

【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾(Ascend)芯片的轻量级、解耦式组件集合,旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件,未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion

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

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

Qwen3.5-9B-GGUF惊艳效果展示:通义千问3.5量化版长文本生成作品集

Qwen3.5-9B-GGUF惊艳效果展示&#xff1a;通义千问3.5量化版长文本生成作品集 1. 模型介绍与核心能力 1.1 技术背景 Qwen3.5-9B-GGUF是阿里云开源的Qwen3.5-9B模型的量化版本&#xff0c;采用GGUF格式进行优化。这个90亿参数的稠密模型基于创新的Gated Delta Networks架构&a…

作者头像 李华
网站建设 2026/5/9 17:41:39

从注意力机制到链式联想激活:构建可解释的通用决策AI架构

1. 项目概述&#xff1a;从“注意力”到“决策”的桥梁最近几年&#xff0c;深度学习的“注意力机制”火得一塌糊涂&#xff0c;从Transformer在NLP领域大杀四方&#xff0c;到Vision Transformer在CV领域攻城略地&#xff0c;几乎成了解决一切问题的“银弹”。但不知道你有没有…

作者头像 李华
网站建设 2026/5/9 17:40:24

AI智能体与遗传算法融合:构建政策模拟的数字沙盘

1. 项目概述&#xff1a;当AI代理遇上遗传算法&#xff0c;政策模拟进入“演化”时代最近在跟几个做公共政策研究和城市治理的朋友聊天&#xff0c;大家普遍有个痛点&#xff1a;政策制定前的模拟推演&#xff0c;成本太高&#xff0c;周期太长&#xff0c;而且结果往往“失真”…

作者头像 李华
网站建设 2026/5/9 17:40:12

为现有Python项目分钟级接入Taotoken大模型服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为现有Python项目分钟级接入Taotoken大模型服务 如果你正在维护一个Python项目&#xff0c;并希望快速引入大模型的智能能力&#…

作者头像 李华
网站建设 2026/5/9 17:39:24

KoalaClient:开源AI对话客户端部署与高效工作流集成指南

1. 项目概述&#xff1a;为什么我们需要一个更好的AI对话客户端 如果你和我一样&#xff0c;每天的工作流里已经离不开像ChatGPT、Claude这类大语言模型&#xff0c;那你肯定对官方网页版或者一些通用客户端的体验深有感触。官方界面功能单一&#xff0c;切换模型麻烦&#xf…

作者头像 李华
网站建设 2026/5/9 17:39:15

ISO 14229 UDS协议详解:从NRC编码表到诊断服务设计的底层逻辑

ISO 14229 UDS协议深度解析&#xff1a;NRC编码体系与诊断服务设计的工程哲学 当ECU对诊断仪回复"SID 7F"时&#xff0c;这个简单的十六进制数字背后隐藏着怎样的设计智慧&#xff1f;在汽车电子系统开发中&#xff0c;UDS协议的否定响应码(NRC)远非简单的错误代码表…

作者头像 李华