【2023 CANN 训练营第二季】 AscendC 单算子工程踩坑
收藏回复举报
【2023 CANN 训练营第二季】 AscendC 单算子工程踩坑
新人帖
发表于2024-01-09 12:06:29
0 查看

CANN 训练营 AscendC 单算子工程踩坑记 

 

1. 环境搭建,没有开发板,modelarts线上的910环境买不起,win10下使用 VitualBox + ubuntu22.04 x86_64来搭建环境。 

 

2. 准备安装包:https://www.hiascend.com/document/detail/zh/canncommercial/700/envdeployment/instg/instg_0022.html 

 

3. 安装anaconda3 构建python虚拟环境: conda create --name cann python=3.8.11,激活虚拟环境:conda activate cann,3.8.11这个版本是参考了上面的文档选择的python版本 

 

4. pip install protobuf==3.20.3 指定安装版本,不能默认安装最新版本的protobuf,这没在文档中说明,踩坑过程发现 

 

5. 建议在root用户实践,不然会出现更多的问题,需要增加 ~/.bashrc内容:export USER=root ,否则安装toolkit会出现用户不匹配的问题 

 

p.s. 只要修改了 ~/.bashrc 文件,保存后便需要立即执行 source ~/.bashrc 使修改生效 

 

6. 参考第二条的文档,安装Ascend-cann-toolkit包并配置 ~/.bashrc: 

source /usr/local/Ascend/ascend-toolkit/set_env.sh 

export ASCEND_TENSOR_COMPILER_INCLUDE=/usr/local/Ascend/ascend-toolkit/latest/x86_64-linux/include 

注意,这里的x86_64要跟随自己的系统改变,可以去对应目录查看一下。 

 

7. 下载官方样例:git clone https://gitee.com/ascend/samples.git ,主要参考里面的operator目录内容,学习学习 

 

8. 参考样例以及课程内容,完成单算子工程的IR json文件编写,如:SinhCustom.json 

参考tensorflow的Sinh算子,实现AscendC算子Sinh,算子命名为SinhCustom,并完成aclnn算子调用。相关算法:sinh(x) = (exp(x) - exp(-x)) / 2.0

```json 

[ 

    { 

        "op": "SinhCustom", 

        "language": "cpp", 

        "input_desc": [ 

            { 

                "name": "x", 

                "param_type": "required", 

                "format": [ 

                    "ND" 

                ], 

                "type": [ 

                    "float16" 

                ] 

            } 

        ], 

        "output_desc": [ 

            { 

                "name": "y", 

                "param_type": "required", 

                "format": [ 

                    "ND" 

                ], 

                "type": [ 

                    "float16" 

                ] 

            } 

        ] 

    } 

] 

``` 

 

9. 使用msopgen工具生成单算子工程:

/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/bin/msopgen gen -i SinhCustom.json -c ai_core-Ascend310B -lan cpp -out SinhCustom 

 

P.S. 吐槽一下,这个芯片的型号到底有多少种,资料是真的少。 

 

10. cd进入生成的单算子工程目录,首先必须将CMakePresets.json的ASCEND_CANN_PACKAGE_PATH项目的value改成正确的目录:/usr/local/Ascend/ascend-toolkit/latest;然后再尝试编译单算子工程:./build.sh 

 

11. 讲道理就应该成功了,不讲道理的话就需要各位查资料排问题了,祝好运! 

 

12. 实现sinh算子...,这个就不多说了,参考课程内容,完成算子实现,编译通过即可  

【编译测试pass的图片传不上来。。。】

最后感叹一下,看课程理解上都是很顺畅:原来如此!理所应当!十分合理!

真到了实操的时候各种各样的问题会接踵而至,排错过程十分痛苦,体会了一下基本只有官方文档的新开发体验。

希望能在一个统一的IDE里开发CANN+MindSpore等华为全家桶技术栈,并且有各种智能提示,文档snippets,示范用例等。

目前的开发体验实在是有些难受。

这个帖子作为参与活动,也可作为个人的资料速查,这就是:学习->输出->学习->输出 模型么?大师我悟了 

本帖最后由 匿名用户 于 2024/01/10 21:24:35 编辑

我要发帖子