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

【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验

一、自定义算子工程介绍与创建

自定义算子工程是一个包含用户编写的host侧和kerne|侧算子实现文件的,用于编译和安装自定义算子run包的工程框架。

CANN软件包中提供了工程创建工具msopgen,开发者可以输入算子原型定义文件生成Ascend C算子开发工程。
需要编写AddCustom算子的原型定义json文件以及运行以下代码

${INSTALL_DIR}/python/site-packages/bin/msopgen gen -i $HOME/sample/add_custom.json -c ai_core-<soc_version> -lan cpp -out $HOME/sample/AddCustom

其中对这些命令进行解释:
${INSTALL_DIR}为CANN软件安装后文件存储路径,根据实际环境进行替换。
-i:指定算子原型定义文件add_custom.json所在路径,请根据实际情况修改。
-c:ai_core-<soc_version>代表算子在AI Core上执行,<soc_version>为昇腾AI处理器的型号。比如我的AI处理器型号为910B,那么我这里写Ascend910B。
-lan: 参数cpp代表算子基于Ascend C编程框架,使用C++编程语言开发。
-out:生成文件所在路径,可配置为绝对路径或者相对路径,并且工具执行用户对路径具有可读写权限。若不配置,则默认生成在执行命令的当前路径。

使用msopgen工具生成AddCustom算子的开发命令之后,会在$HOME/sample目录下生成算子工程目录AddCustom,工程中包含算子实现的模板文件,编译脚本等,如下所示:

AddCustom
├── build.sh         // 编译入口脚本
├── cmake 
│   ├── config.cmake
│   ├── util        // 算子工程编译所需脚本及公共编译文件存放目录
├── CMakeLists.txt   // 算子工程的CMakeLists.txt
├── CMakePresets.json // 编译配置项
├── framework        // 算子插件实现文件目录,单算子模型文件的生成不依赖算子适配插件,无需关注
├── op_host                      // host侧实现文件
│   ├── add_custom_tiling.h    // 算子tiling定义文件
│   ├── add_custom.cpp         // 算子原型注册、shape推导、信息库、tiling实现等内容文件
│   ├── CMakeLists.txt
├── op_kernel                   // kernel侧实现文件
│   ├── CMakeLists.txt   
│   ├── add_custom.cpp        // 算子核函数实现文件 
├── scripts                     // 自定义算子工程打包相关脚本所在目录

二、自定义算子工程样例演示

我是在ModelArts环境下创建了一个notebook,镜像为:

4d729b0eae05fa0aa7b24724f92ad10.png

创建好之后,进入终端,下载samples代码仓库:
进入到op_dev目录,这个目录就是一个自定义算子交付目录

cd samples/cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op/acl_invocation/op_dev

然后通过msopgen这个工具生成,生成之前可以运行以下命令,看看自己的AI处理器型号:
npu-smi info
我的结果如下,Ascend910B:
image.png

然后接着,你要找到${INSTALL_DIR}这个位置,也就是CANN软件安装后文件存储路径,我的为:/usr/local/Ascend/ascend-toolkit/7.0.RC1,默认是路径可能都是这个,

接着就可以运行msopgen命令:

/usr/local/Ascend/ascend-toolkit/7.0.RC1/python/site-packages/bin/msopgen gen -i add_custom.json -c ai_core-Ascend910B2 -lan cpp -out ./custom_opp

显示生成完成:

image.png

可以看到新生成的custom_opp文件夹里生成了以下文件:
image.png

我们主要关注CMakePresets.json里面“ASCEND_CANN_PACKAGE_PATH”是否和你安装的CANN路径对应,一般默认都是对应的。

下面进行自定义算子工程编译:

./build.sh

报错:
image.png

显示没有这个头文件:register/tilingdata_base.h

设置环境变量 ASCEND_TENSOR_COMPILER_INCLUDE:

export ASCEND_TENSOR_COMPILER_INCLUDE=/usr/local/Ascend/ascend-toolkit/7.0.RC1/aarch64-linux/include

然后执行./build.sh

编译部署成功:
image.png

在build_out文件夹下可以看到已经生成了run包
image.png

接下来部署自定义算子包:

./custom_opp_euleros_aarch64.run

image.png

看到SUCCESS说明部署成功!

以上就是Ascend C自定义算子工程的演示。


http://www.kler.cn/a/154739.html

相关文章:

  • Flutter:Widget生命周期
  • 部署Apache Doris
  • 路漫漫其修远兮,吾将上下而求索---第一次使用github的过程记录和个人感受
  • NodeJS 百度智能云文本转语音(实测)
  • 【3D Slicer】的小白入门使用指南八
  • Android CCodec Codec2 (二一)InputBuffers
  • Three.js的THREE.LOD如何加载gltf模型
  • 华为鲲鹏+银河麒麟V10编译FreeSWITCH1.10.9
  • 配置typroa上传图片到gitee
  • 环境部署的学习笔记(Docker)
  • css所有属性介绍
  • 数据结构-二叉树(2)
  • 159.库存管理(TOPk问题!)
  • 戴尔科技推出全新96核Precision 7875塔式工作站
  • 数据结构(超详细讲解!!)第二十五节 树与森林
  • Nginx实现多虚拟主机配置
  • MySQL海量数据配置优化教程
  • 通过两个css属性提升长列表渲染效率
  • Hdoop学习笔记(HDP)-Part.10 创建集群
  • Linux驱动开发学习笔记1《字符设备驱动开发》
  • VT-VRPA2-1-1X/V0/T5控制4WRE6比例方向阀放大板
  • Wordpress自动定时发布怎么开通-Wordpress怎么自动发布原创文章
  • 4-Docker命令之docker pause
  • react-native实践日记--6.ReactNative 项目版本升级,0.61到0.72升级的问题记录(二)
  • 锂电涂布机设备健康管理:降低运维成本的关键
  • pygame实现贪吃蛇小游戏