【2023 · CANN训练营第一季】——Ascend C算子沙箱实验

130 阅读2分钟

前言: CANN 训练营的Ascend C算子课程,以在线课程的方式提供了一个沙箱实验环境。这将有助于帮助开发者了解Ascend C算子开发的软、硬件环境;熟悉自定义Ascend C算子的开发流程和关键代码;同时也可以了解到自定义算子包的部署路径及部署后的各类文件。

在线试验地址: 在线实验>基于昇腾CANN的Ascend C算子开发

www.hiascend.com/zh/edu/expe…

配套课程地址: CANN训练营2023年第一季_TIK C++算子开发入门

www.hiascend.com/zh/develope…

一、系统环境

1、硬件芯片:昇腾910A

2、CANN版本

3、算子开发包

二、算子实现分析

    ​    ​沙箱实验,实现的是动态shape的add的Ascend C算子。

**
**

一)配置环境

二)下载代码包

样例工程关键目录和文件的用途如下所示:

三)代码分析及补全

1、kernel侧代码

    ​    ​实现代码在算子工程的/ai_core/op_kernel/add_tik2.cpp中。

    ​   ​1)算子类——init()

    ​ ​2)算子类——process()及3个基本任务CopyIn,Compute,CopyOut

    ​    ​基于矢量编程范式,将核函数的实现分为3个基本任务:CopyIn,Compute,CopyOut。Process函数中通过如下方式调用这三个函数。

    ​    ​CopyIn: 使用DataCopy接口将GlobalTensor数据拷贝到LocalTensor;使用EnQue将LocalTensor放入VecIn的Queue中。

    ​   ​Compute: 使用DeQue从VecIn中取出LocalTensor;使用Ascend C算子接口Add(2级接口)完成矢量计算;使用EnQue将计算结果LocalTensor放入到VecOut的Queue中。

    ​    ​CopyOut: 使用DeQue接口从VecOut的Queue中取出LocalTensor;使用DataCopy接口将LocalTensor拷贝到GlobalTensor上。

2、host侧代码

    ​    host侧算子实现开发,包括算子原型注册、Shape推导等函数实现与注册、Tiling实现与注册和信息库配置。实现代码在算子工程的/ai_core/op_host/add_tik2.cpp中。

​    ​1)算子原型注册:

    ​    ​​2)Shape推导等函数实现与注册:

    ​    ​3)Tiling实现与注册:

​    ​4)信息库配置及算子注册:

四)UT测试

 ​UT的本质是使用内核调用符测试CPU模式下的Ascend C算子的用例,在算子工程UT测试目录下的add_tik2_ut.cc文件,增加CPU侧算子调用代码如下:

    ​    ​运行指令:

    ​    ​    ​cd $HOME/cann_op_contrib/ ./build.sh -u tikcpp

    ​    ​运行结果:

五)编译部署

1、算子包打包

    ​    ​进入cann_op_contrib算子工程目录,执行算子包打包脚本,命令如下:

    ​    ​cd $HOME/cann_op_contrib/

    ​    ​./pack.sh

    ​    ​打包成功后,会在当前目录下创建output目录,并在output目录下生成自定义算子安装包CANN_OP_CONTRIB_linux-aarch64.run。

2. 自定义算子安装包部署

    ​    ​以运行用户执行如下命令,安装自定义算子包。

    ​    ​cd $HOME/cann_op_contrib/output

    ​    ​./CANN_OP_CONTRIB_linux-aarch64.run --install

    ​    ​命令执行成功后,自定义算子包中的相关文件会部署当前环境中。默认安装路径是tool-kit的“opp/vendors/”目录下,沙箱中的路径为:

/usr/local/Ascend/ascend-toolkit/latest/opp/vendors

        目录结构与自定义TBE算子基本一致,在算子实现代码部分,多了cpp格式的实现代码。

六)ST测试

    ​    ​ST的本质是创建ACL应用程序测试NPU模式下的Ascend C算子用例,将开发好的算子,编译好后,打包成自定义算子包,部署到系统中。

    ​    ​通过msopst工具,将用户定义的ST测试配置的*.json生成单算子的om文件,使用AscendCL接口加载单算子模型文件并执行单算子om文件,验证算子执行结果的正确性。

1、在算子工程ST测试目录下的add_tik2.json增加测试用例

2、配置ST测试用例编译所需环境变量

    ST测试的实质是,使用AscendCL接口加载单算子模型文件并执行,所以生成并编译ST测试用例前需要配置AscendCL应用编译所需的环境变量,如下所示:

export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest

export NPU_HOST_LIB=/usr/local/Ascend/ascend-toolkit/latest/runtime/lib64/stub

3、使用msopst工具,生成并执行ST测试用例

cd /usr/local/Ascend/ascend-toolkit/latest/python/site-packages/bin/

./msopst run -i HOME/cannopcontrib/community/tests/addtik2/st/addtik2.jsonsocAscend910AoutHOME/cann_op_contrib/community/tests/add_tik2/st/add_tik2.json -soc Ascend910A -out HOME/out

执行结果: