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

举报
dayao 发表于 2023/05/31 13:23:52 2023/05/31
【摘要】 CANN 训练营的Ascend C算子课程,以在线课程的方式提供了一个沙箱实验环境。这将有助于帮助开发者了解Ascend C算子开发的软、硬件环境;熟悉自定义Ascend C算子的开发流程和关键代码;同时也可以了解到自定义算子包的实际部署情况。

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

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

https://www.hiascend.com/zh/edu/experiment/operation/Tik_xl

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

https://www.hiascend.com/zh/developer/courses/detail/1627494761683783682

一、系统环境

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/cann_op_contrib/community/tests/add_tik2/st/add_tik2.json -soc Ascend910A -out $HOME/out

执行结果:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。