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。
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”目录拷贝过来,进行修改与调试。
具体修改过程与内容,可以参看:https://www.bilibili.com/read/cv27125634。讲述了LeakyReLU算子的实现与调用测试。
- 点赞
- 收藏
- 关注作者
评论(0)