首页 > 其他分享 >【2023 · CANN训练营第一季】——Ascend C算子沙箱实验

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

时间:2023-05-31 12:00:43浏览次数:61  
标签:自定义 CANN 2023 Ascend ST 算子 沙箱 op

前言: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

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

2、CANN版本

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

3、算子开发包

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

二、算子实现分析

 C算子。

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


一)配置环境

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

二)下载代码包

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

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

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

三)代码分析及补全

1、kernel侧代码

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

        1)算子类——init()

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

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

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

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

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

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

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

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

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

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

2、host侧代码

/ai_core/op_host/add_tik2.cpp中。

        1)算子原型注册:

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

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

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

        3)Tiling实现与注册:

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

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

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


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

四)UT测试

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

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

        运行指令:

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

        运行结果:

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

五)编译部署

1、算子包打包

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

        cd $HOME/cann_op_contrib/

        ./pack.sh

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

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

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

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

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

六)ST测试

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

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

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

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

2、配置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

执行结果:

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


标签:自定义,CANN,2023,Ascend,ST,算子,沙箱,op
From: https://blog.51cto.com/u_15485447/6385902

相关文章

  • SSO2.0 11-20230530
           ......
  • 【2023-05-30】我的父亲
    20:00如果把一个人的一生比作一本书,我们也不会以书的页数来判断书的深度,通常我们只会看这本书所包含内容的丰富程度,人的一生也是如此。                                            ......
  • python的peft包导入PeftModel时报importerror-cannot-import-name-unknown-location
    一般出现这种问题的原因是该版本的peft包中没有PeftModel,这种情况都需要降级。我验证了以下,我实在alpaca-lora项目中使用peft,alpaca-lora的项目大概在2个月以前更新,而peft包实在最近更新的4.0版本,而2个月以前peft还是2.0版本,所以我果断把peft降到2.0版本,然后问题就解决了。......
  • 2023-05-31 小程序本地图片加载不出来
    具体表现为:http://127.0.0.1:端口号/__pageframe__/uni_modules/static/logo.png原因:前端代码里对图片使用了../来引用路径,http://127.0.0.1:端口号识别不了该文件路径孤儿导致。解决方案:去除../引用,比如原来的../../../static/logo.png改为/static/logo.png。最后的话:en,不一定......
  • 在 Net Core 开发中如何解决 Cannot access a disposed object 这个问题
    一、简介NetCore跨平台项目开发多了,总会遇到各种各样的问题,我就遇到了一个这样的问题,不能访问Cannotaccessadisposedobject错误,经过自己多方努力,查阅资料,终于找到了解决办法,引发这个问题的原因大多数是多次读取请求Body流造成的,需要换一种获取请求Body流方法,不能使......
  • solidworks笔记20230531
    CreatingaNewPipeorTubePart帮助里面规定的属性如下:$PRP@PipeIdentifier$PRP@SpecificationOuterDiameter@PipeSketchInnerDiameter@PipeSketchNominalDiameter@FilterSketch$PRP@PipeIdentifier$PRP@Specification......
  • 2023第三届生物医学与生物信息工程国际学术会议 (ICBBE 2023) 南京
    2023第三届生物医学与生物信息工程国际学术会议(ICBBE2023)20233rdInternationalConferenceonBiomedicineandBioinformaticsEngineering会议时间:2023年6月16-18日会议地点:中国·南京截稿日期:2023年6月15日稿件反馈:投稿后1-2周内检索类型:EI,Scopus第三届生物医学与生......
  • 2023-05-31 如何解决小程序的session_key泄露问题
    前言:微信小程序在接口检测出session_key泄露的bug,要求去除请求和响应中的session_key。排查:前端无法直接处理该问题,问题定位到后端,是后端接口返回了该session_key字段,由此被微信检测出来,被微信认为不安全所致。解决方案:后端接口不返回该字段即可。参考资料:https://developers.w......
  • 重新发明轮子:创意过程是 2023 年唯一重要的商业纪律
    ​时下全球经济放缓,很多企业业务都陷入了增长瓶颈,如何突破?今天我们来聊聊一般业务突破的3种方式:发现一片新的蓝海,迅速杀入占领生态位(快);发现结构性红利机会,大量投入杀出优势(敢);深刻理解行业,洞察关键点,结合企业优势,建立长期优势(巧)。01发现一片新的蓝海,迅速杀入占领生态位(快)......
  • .NET周报 【5月第4期 2023-05-27】
    国内文章C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地之openai接口平替https://www.cnblogs.com/gmmy/p/17430613.html在上一篇文章中我们大致讲述了一下如何通过词嵌入向量的方式为大语言模型增加长期记忆,用于落地在私域场景的问题。其......