【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- -lan cpp -out $HOME/sample/AddCustom

其中对这些命令进行解释:
${INSTALL_DIR}为CANN软件安装后文件存储路径,根据实际环境进行替换。
-i:指定算子原型定义文件add_custom.json所在路径,请根据实际情况修改。
-c:ai_core-代表算子在AI Core上执行,为昇腾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,镜像为:

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

创建好之后,进入终端,下载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:
【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验_第2张图片

然后接着,你要找到${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

显示生成完成:

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

可以看到新生成的custom_opp文件夹里生成了以下文件:
【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验_第4张图片

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

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

./build.sh

报错:
【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验_第5张图片

显示没有这个头文件: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

编译部署成功:
【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验_第6张图片

在build_out文件夹下可以看到已经生成了run包
【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验_第7张图片

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

./custom_opp_euleros_aarch64.run

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

看到SUCCESS说明部署成功!

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

你可能感兴趣的:(python,服务器,linux)