当前位置: 首页 > news >正文

CANN Add算子Kernel执行样例

目录结构介绍

【免费下载链接】cann-recipes-harmony-infer本项目为鸿蒙开发者提供基于CANN平台的业务实践案例,方便开发者参考实现端云能力迁移及端侧推理部署。项目地址: https://gitcode.com/cann/cann-recipes-harmony-infer

├── AddKernelInvocation │ ├── cmake // 编译工程文件 │ ├── input // 存放脚本生成的输入数据目录 │ ├── output // 存放算子运行输出数据和真实数据的目录 │ ├── scripts │ │ ├── acl.json // acl配置文件 │ │ ├── gen_data.py // 验证输出数据和针织数据是否一致的验证脚本 │ │ ├── verify_result.py // 真值对比文件 │ │── add_custom.cpp // 算子kernel实现,暴露给main.cpp调用 │ │── CMakeLists.txt // 编译工程文件 │ │── data_utils.h // 数据读入写出函数 │ │── main.cpp // 主函数,调用算子的应用程序,含CPU域及NPU域调用 │ ├── run.sh // 编译运行算子的脚本

替换自定义算子

如果将该样例工程替换为自己的算子实现,需要修改以下内容 1.add_custom.cpp为核函数实现,整个文件都要替换成新算子实现 此外,在以下文件中搜索 “迁移算子修改点” 2.run.sh 根据实际算子名,修改FILE_NAME属性 3.scripts/gen_data.py 需自定义生成输入数据的内容(Shape/数据类型/算子的输入参数数量) 4.main.cpp 调用add_custom.cpp中的符号 读数据的逻辑

代码实现介绍

本调用样例中实现的是固定shape为8*2048的Add算子。

  • kernel实现
    Add算子的数学表达式为:

    z = x + y

    计算逻辑是:Ascend C提供的矢量计算接口的操作元素都为LocalTensor,输入数据需要先搬运进片上存储,然后使用计算接口完成两个输入参数相加,得到最终结果,再搬出到外部存储上。

    Add算子的实现流程分为3个基本任务:CopyIn,Compute,CopyOut。CopyIn任务负责将Global Memory上的输入Tensor xGm和yGm搬运到Local Memory,分别存储在xLocal、yLocal,Compute任务负责对xLocal、yLocal执行加法操作,计算结果存储在zLocal中,CopyOut任务负责将输出数据从zLocal搬运至Global Memory上的输出Tensor zGm中。具体请参考add_custom.cpp。

  • 调用实现

    1. CPU侧运行验证主要通过ICPU_RUN_KF CPU调测宏等CPU调测库提供的接口来完成;
    2. NPU侧运行验证主要通过使用<<<>>>内核调用符来完成。

    应用程序通过ASCENDC_CPU_DEBUG 宏区分代码逻辑运行于CPU侧还是NPU侧。

运行样例算子

  • 打开样例目录

    cd $HOME/ops/AddKernelInvocation
  • 配置环境变量

    这里的$HOME需要替换为本仓根目录

    export ASCEND_INSTALL_PATH=$HOME/Ascend/ascend-toolkit/latest
  • 样例执行

    bash run.sh -r [RUN_MODE] -v [SOC_VERSION]
    • RUN_MODE:编译方式,sim(NPU仿真)。
    • SOC_VERSION:KirinX90 或者 Kirin9030。

    示例如下。

    bash run.sh -r sim -v KirinX90

【免费下载链接】cann-recipes-harmony-infer本项目为鸿蒙开发者提供基于CANN平台的业务实践案例,方便开发者参考实现端云能力迁移及端侧推理部署。项目地址: https://gitcode.com/cann/cann-recipes-harmony-infer

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

http://www.jsqmd.com/news/782965/

相关文章:

  • CANN/cann-recipes-infer:Kimi-K2-Thinking NPU推理
  • IT疑难杂症诊疗室:从蓝屏到勒索软件全攻略
  • 三步解锁QQ音乐加密文件:qmc-decoder让你的音乐真正自由播放
  • 深度剖析Go语言,一文告诉你为什么大厂开始增加Go的招聘量
  • AI与Web3.0融合:技术路径、挑战与实践指南
  • 小红书内容采集终极指南:5种高效下载方案全解析
  • 网络交换芯片:从25.6T到51.2T的技术演进与挑战
  • XUnity Auto Translator:如何在5分钟内为任何Unity游戏添加多语言支持
  • CANN/ops-cv双三次上采样梯度算子
  • CANN ops-math clamp算子
  • CANN/hccl:自定义通信算子 - 点对点通信
  • CANN/GE添加控制输入API
  • 如何通过数据分析功能解锁数据深度洞察?
  • 如何高效使用Mermaid Live Editor:5个提升技术文档质量的专业技巧
  • 从三星泄密事件看企业AI安全:LLM数据风险与社会中心AI框架
  • XHS-Downloader:小红书内容采集与批量处理的专业级解决方案
  • 购买域名多少钱一个?大家一般都在哪个平台购买?
  • CANN/atvoss加法运算符API文档
  • Oracle数据库开发最佳实践:构建高效、可维护的应用程序
  • CANN/pyasc Gatherb数据收集API
  • IEDM 2013深度解析:相变存储器的可靠性挑战与产业转向
  • 别把 SFT 里的 `packing` 当成白捡吞吐的开关:TRL 里 `bfd`、`bfd_split`、`wrapped` 真正卖掉的不是同一种东西
  • 62.RTOS调度原理
  • CANN/AMCT大模型Cast量化
  • CANN/sip信号处理加速库CalOperation
  • CANN/hixl LLM-DataDist数据结构
  • 6G时代零接触式普适AI即服务架构:融合区块链与DRL的自动化AI交付
  • cann/runtime其他接口API文档
  • 顶会论文模块复现与二次创新:二次创新:将 DETR 的查询式检测头蒸馏进 YOLOv11,打造混合式 Anchor-free 头
  • 模型诊断:从冲突集到命中集,构建高效故障定位系统