一起昇腾(1):Ascend C算子开发环境

前言

2025 年元旦快乐!新年新气象,就从 2025 年第一篇文章开始写起吧!这是一个系列文章,「一起昇腾」是针对昇腾 NPU CANN 的,「一起昇思」是针对 MindSpore 的。随着国内外环境的变化,我从今年开始对于国产算力还是非常关注,包括华为昇腾 NPU、燧原 GCU、太初元碁等等,尽快参与进来占一个坑。

本来这篇文章应该是在半年前发出的,但是那会儿在参加琶洲算法大赛,后面又把精力转移到开源项目、开源社区上,所以一直拖到了现在。接触 Ascend C 算子开发是通过「昇腾AI原生创新算子挑战赛S1赛季」参与的,我当时的成绩是 40 分:

S1 赛季决赛门槛是 50 分,实际上只要能进入决赛就自动获得优秀奖,S1 赛季的题目整体不高,以入门和中档题目为主,所以还是很可惜的。目前比赛进行到了 S3 赛季,后续文章会挑一些赛题出来重新做一遍。

启智社区

启智社区是一个非常不错的开发社区,它和各地的算力中心合作,有很多国产算力可以使用,每天都可以领积分,免费用一段时间,比如昇腾 NPU 是 2 积分/小时,如果每天启动一次调试任务,可以领取 10 积分,约等于 5 小时的免费使用时间。

1、创建项目

2、创建云脑任务

3、安装 CMake

CMake 版本必须大于 3.16,否则算子编译会失败。

cd /home/ma-user/work/
wget https://cmake.org/files/v3.31/cmake-3.31.3-linux-aarch64.tar.gz
tar -xzvf cmake-3.31.3-linux-aarch64.tar.gz
sed -i '$a export PATH=/home/ma-user/work/cmake-3.31.3-linux-aarch64/bin:$PATH' ~/.bashrc
source ~/.bashrc

4、安装 CANN

启动调试任务的镜像是默认有一个 CANN 的,这一步可选,但是推荐是安装当前最新的版本,截止当前最新的 CANN 社区版是 8.0.0.alpha003:

wget -O Ascend-cann-toolkit_8.0.0.alpha003_linux-aarch64.run https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C20SPC703/Ascend-cann-toolkit_8.0.0.alpha003_linux-aarch64.run?response-content-type=application/octet-stream
chmod +x Ascend-cann-toolkit_8.0.0.alpha003_linux-aarch64.run
./Ascend-cann-toolkit_8.0.0.alpha003_linux-aarch64.run --full --quiet
sed -i '$a source /usr/local/Ascend/ascend-toolkit/set_env.sh' ~/.bashrc
source ~/.bashrc

5、编译算子

Ascend910B 对应的是 SOC_VERSION 这个参数,可以通过 npu-smi 命令获取 Name 的值,加上 Ascend 前缀:

cd /home/ma-user
git clone https://gitee.com/ascend/samples.git
cd /home/ma-user/samples/operator/ascendc/0_introduction/1_add_frameworklaunch
export ASCEND_INSTALL_PATH=/usr/local/Ascend/ascend-toolkit/latest
bash install.sh -v Ascend910B

6、安装算子

算子编译好后需要安装:

cd CustomOp/build_out/
./custom_opp_euleros_aarch64.run

7、测试

cd /home/ma-user/samples/operator/ascendc/0_introduction/1_add_frameworklaunch/AclNNInvocation
bash run.sh

运行输出:

INFO: acl executable run success!
error ratio: 0.0000, tolrence: 0.0010
test pass

总结

本文我使用了启智社区的昇腾开发环境作为例子,当时我参赛的时候更多使用的是 openEuler x86_64 虚拟机环境作为开发的,当然这也导致了后续做迁移的时候造成了一些时间上的耽误,因为在 CPU 域和 NPU 域调试还是不太一样,而这里是借助了 Ascend C 的「孪生调试」的特点:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容