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

举报
dayao 发表于 2023/10/25 17:27:57 2023/10/25
【摘要】 从何入手开始学习AscendC算子?本篇笔记谈谈学习体会:建议先搭建CPU和NPU的环境,把例程跑起来,对AscendC算子有个直观的感受;然后再去学习理论知识,本文精选了几个学习资料,并推荐了学习顺序;继而通过模仿例程,进行算子开发实战。希望对想学习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参考”下的“AscenC API”矢量计算的内容,计算过程中涉及到临时变量的参考“API参考/内存管理与同步”的“TBuf”。

    ​    ​2、单算子API调用工程

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

    ​    ​3、核函数直接调用工程

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

    ​    ​具体修改过程与内容,可以参看:https://www.bilibili.com/read/cv27125634​。讲述了LeakyReLU算子的实现与调用测试。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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