2023CANN训练营第2季——谈谈AscendC算子学习体会

前言:

        AscendC算子是2023年第2期CANN训练营的高阶班课程,也有很多学习资料。从何入手,什么样的学习路径适合新人快速入门?本篇笔记谈谈学习体会:建议先搭建CPU和NPU的环境,把例程跑起来,对AscendC算子有个直观的感受;然后再去学习理论知识,本文精选了几个学习资料,并推荐了学习顺序;继而通过模仿例程,进行算子开发实战。希望对想学习AscendC算子开发,还没有动手的小伙伴有所裨益。

一、例程跑起来

        昇腾gitee的sample仓(https://gitee.com/ascend/samples),Ascend C算子例程在下述两个目录中:

1)samples/operator目录下,有“AddCustomSample”和“LeakyReLUCustomSample”两个例程。

2)samples/ cplusplus / level1_single_api / 4_op_dev / 6_ascendc_custom_op目录下,例程按调用方式组织。

 

1、CPU运行环境搭建——免费的华为云Modelartsde的CodeLab,仅支持CPU模式

https://www.hiascend.com/forum/thread-0235128261452483095-1-1.html

2、NPU运行环境搭建——建议使用这种方式,既可以验证CPU模式,也可以验证NPU模式

https://www.bilibili.com/read/cv26991439/ 

3、运行例程:

        建议先运行samples/operator目录下AddCustomSample的例程。

1)简单核函数调用CPU方式,进入“kernel_direct_call”目录,阅读该目录下的“README.md”

cd ./kernel_direct_call
bash run.sh ascend910B1 cpu

2)简单核函数调用NPU方式——需要NPU环境

cd ./kernel_direct_call
bash run.sh ascend910B1 npu_onboard

3)单算子API(aclnn方式)调用方式——需要NPU环境

cd ./aclnn_online_model
bash run.sh

二、理论学起来

        按自己的学习经验,建议按下列顺序去学习。

1、首推闫长江老师的“昇腾CANN全新算子编程体系解密”https://www.bilibili.com/video/BV1Ao4y1F7wj/

        短短26分钟的视频,将AscendC的设计理念、核心概念、硬件基础,深入浅出,婉婉道来。这个视频值得多刷:小白一定要先听一遍,对后面的深入学习非常有帮助;学习一段时间后,再回过头看一遍,还会有新的体会和收获。

 

2、官方的文档

        建议先看一边,了解个大致的目录结构和内容的组织方式,以后遇到问题能快速的对应到文档。技术在不停迭代,文档也在不断更新。当前版本时7.0.RC1.alpha003。

https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/70RC1alpha003/operatordevelopment/ascendcopdevg/atlas_ascendc_10_0001.html

 

3、本次训练营的课程

这个课程和官方文档是紧密结合的。

 

第一章课程link:https://www.hiascend.com/developer/courses/detail/1691696509765107713

第二章课程link:https://www.hiascend.com/developer/courses/detail/1696414606799486977

 

4、上期训练营的课程

        B站“昇腾AI开发者”的合集“合集·CANN训练营2023年度第一季”里有4个视频。里面的内容对小白可能有难,建议在完成前面3项学习后,再听一遍这个课程,相信很多概念就会清晰起来。对算子开发会有更直接、更接近实战的感受和理解。

https://space.bilibili.com/1190614918/channel/collectiondetail?sid=1201995

 

三、实战搞起来

        纸上得来终觉浅,最终还是要落实到实际的算子开发中去,可以从“改”例程开始。建议以“samples/operator/AddCustomSample”作为参考例程。

        AddCustomSample算子下面有3个目录:算子工程、单算子API调用工程、核函数直接调用工程。

 

        1、算子工程

        使用msopgen工具,根据算子原型定义json文件生成算子工程,然后修改host侧和kernel侧的算子实现代码。 数据的输入、输出、切分可以参考例程进行修改;计算逻辑,通过查询官网手册的“API参考”下的“Ascend C API”矢量计算的内容;计算过程中涉及到临时变量的参考“API参考/内存管理与同步”的“TBuf”。

        2、单算子API调用工程

        直接将"AddCustomSample"工程的“aclnn_online_model”拷贝过来,进行修改与调试。

        3、核函数直接调用工程

        直接将"AddCustomSample"工程的“kernel_direct_call”目录拷贝过来,进行修改与调试。

        具体修改过程与内容,可以参看:2023·CANN训练营第二季——跟着sample仓例程,动手写(改)自己的AscendC算子 - 哔哩哔哩。讲述了LeakyReLU算子的实现与调用测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值