华为开发者空间-赋能昇腾 AI CANN 算子开发

举报
JaneConan 发表于 2025/07/20 23:01:25 2025/07/20
【摘要】 1、实验介绍1.1、实验平台介绍本实验详细描述了如何在华为开发者空间 AI NoteBook 上搭建昇腾 Ascend C 算子开发环境,并开发一个AddCustom 自定义算子。1.1.1、华为开发者空间简介华为开发者空间官网地址:https://developer.huaweicloud.com/space 在华为开发者空间,每位注册的开发者都将享有年度内数百小时的云主机使用权,配备5G...

1实验介绍

1.1实验平台介绍

本实验详细描述了如何在华为开发者空间 AI NoteBook 上搭建昇腾 Ascend C 算子开发环境并开发一个AddCustom 自定义算子

1.1.1、华为开发者空间简介

华为开发者空间官网地址https://developer.huaweicloud.com/space 

在华为开发者空间,每位注册的开发者都将享有年度内数百小时的云主机使用权,配备5GB云存储容量和定制化的场景模拟沙箱,辅以丰富详实的技术培训课程和专业认证资料,确保开发者能够无缝接入并持续拓展自己的技能树。该空间特别设计了以华为云CodeArts IDE为中心的全方位开发工具生态,整合了鲲鹏、昇腾、鸿蒙等核心生态的开发资源,提供广泛的开源软件库、实用开发插件,全面覆盖从代码托管到应用运维的各个阶段,极大地提升了开发效率和应用构建的便捷性。

加入华为开发者空间,开发者将额外收获如下关键支持:

应用全周期管理:一站式服务涵盖应用构建、存档、验证、配置等环节,助力开发者高效完成云端应用搭建。

沃土云创计划:多维度激励方案,鼓励开发者探索新技术边界,推动创新应用的孵化与发展。

生态共建激励:设立开源贡献、市场线索共享等奖励机制,激发开发者参与生态建设的热情,共享成长成果。

个性化技术支持:通过多种渠道如工单系统、云声反馈、问题跟踪等,为开发者提供及时的技术指导和解决方案,确保项目顺利推进。

1.1.2、华为开发者空间 AI NoteBook 简介

 

华为开发者空间 AI NoteBook 是基于华为云 ModelArts JupyterLab NoteBook 虚拟环境。

ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成,及端--云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期AI工作流。

华为开发者空间 AI NoteBook 地址

https://developer.huaweicloud.com/space/devportal/notebook-tool 

AI NoteBook 支持通过 JupyterLab 工具在线打开 Notebook ,开发基于昇腾的Ascend C算子

具体操作流程如下图所示:

 

  

 

AI NoteBook 给用户提供了组预置镜像,用户可以直接使用预置镜像创建 Notebook 实例,在实例中进行依赖安装与配置后,保存为自定义镜像,可直接用于Ascend C算子开发 

 

 

 

AI NoteBook 平台中预置的基础镜像: 

引擎类型

版本名称

Ascend-Powered-Engine

NPU basic  1 * NPU 910B

8v CPU  24GB

euler2.9-py310-torch2.1.0-cann8.0-openmind0.9.1

euler2.9-py3.8-torch2.1.0-cann8.0-openmind0.9.0

 

例如:我们选择 euler2.9-py310-torch2.1.0-cann8.0-openmind0.9.1 然后,点击立即启动,

稍等片刻后环境启动完成。

  

点击查看 NoteBook 即可进入刚刚创建好的环境中。

 

2、软件介绍

2.1.1 软件版本介绍

本实验所使用的系统和软件版本如下表,对于操作界面差异不大的版本没有列出。

环境信息

类别

版本

说明

Python

Python3.10

面向对象编程语言

CANN

8.1.RC1.beta1

腾异构计算架构

系统镜像

euleros_2.9

服务器操作系统

CPU架构

aarch64

CPU架构

  • 训练环境系统/软件版本

 

2.1.2 Ascend C简介

面向算子开发场景的编程语言Ascend C,原生支持CC++标准规范,最大化匹配用户开发习惯;通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力AI开发者低成本完成算子开发和模型调优部署

当前Ascend C支持的产品型号为:

  • Atlas 推理系列产品
  • Atlas 训练系列产品
  • Atlas A2训练系列产品
  • Atlas 200/500 A2推理产品

本次我们以Atlas A2训练系列产品为例讲解Ascend C算子开发环境搭建

在华为开发者空间 AI NoteBook 上创建硬件环境为Ascend 910 + ARM的开发环境。

我们可以使用 npu-smi info 进行查询 当前环境具体的 Ascend NPU 信息。

 

2.1.3 Ascend C环境更新(可选)

  • 获取 init_sh脚本

两种方式获取init_env.sh自动安装脚本

  1. 设置以下环境变量,可直接在本环境通过wget下载
export no_proxy=127.0.0.1,localhost,172.16.*,iam.cn-southwest-2.huaweicloud.com,pip.modelarts.private.com

export NO_PROXY=127.0.0.1,localhost,172.16.*,iam.cn-southwest-2.huaweicloud.com,pip.modelarts.private.com

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com:443/resource/s5%E6%96%87%E6%A1%A3/init_env.sh

我们通过pwd看到,当前的路径为

/opt/huawei/edu-apaas/src/init

下载完成后,打开sh文件

将第 61 和 第 62 行的路径 改成  刚刚我们看到的当前路径

/opt/huawei/edu-apaas/src/init

改之前的如下

 

改之后的如下

将第 78 和 第 100 行的路径 改成  刚刚我们看到的当前路径

/opt/huawei/edu-apaas/src/init   当前用户所在路径 /home/service

改之前的如下

改之后的如下 

将第 112 118 行的路径 改成  刚刚我们看到的当前路径

/opt/huawei/edu-apaas/src/init   当前用户所在路径 /home/service

改之前的如下

 

改之后的如下

2.直接在控制台终端创建 sh

touch init_env.sh

并复制粘贴如下内容

 

#!/bin/bash

progress() {

        #进度条程序

        local main_pid=$1

        mark_str1="Verifying"

        mark_str2="runtime"

        mark_str3="compiler"

        mark_str4="opp"

        mark_str5="toolkit"

        mark_str6="aoe"

        mark_str7="mindstudio"

        mark_str8="test-ops"

        mark_str9="pyACL"

        mark_str10="ncs"

        while [ "$(ps -p ${main_pid} | wc -l)" -ne "1" ] ; do

                mark=$(tail -n 1 install.log)

                if [[ $mark =~ $mark_str1 ]]

                then

                    mark="校验安装包,请等待"

                elif [[ $mark =~ $mark_str2 ]]

                then

                    mark="正在安装runtime组件包,请等待"

                elif [[ $mark =~ $mark_str3 ]]

                then

                    mark="正在安装compiler组件包,请等待"

                elif [[ $mark =~ $mark_str4 ]]

                then

                    mark="正在安装opp组件包,请等待"

                elif [[ $mark =~ $mark_str5 ]]

                then

                    mark="正在安装${mark_str5}组件包,请等待"

                elif [[ $mark =~ $mark_str6 ]]

                then

                    mark="正在安装${mark_str6}组件包,请等待"

                elif [[ $mark =~ $mark_str8 ]]

                then

                    mark="正在安装${mark_str7}组件包,请等待"

                elif [[ $mark =~ $mark_str8 ]]

                then

                    mark="正在安装${mark_str8}组件包,请等待"

                elif [[ $mark =~ $mark_str9 ]]

                then

                    mark="正在安装${mark_str9}组件包,请等待"

                elif [[ $mark =~ $mark_str10 ]]

                then

                    mark="正在安装${mark_str10}组件包,请等待"

                else

                    mark="正在准备安装包,请等待"

                fi

                pool=("." ".." "..." "...." "....." "......")

                num=${#pool[*]}

                roll_mark=${pool[$((RANDOM%num))]}

                echo -ne  "\033[31m ${mark} ${roll_mark}\033[0m                    \r"

                sleep 0.5

        done

}

 

export no_proxy=127.0.0.1,localhost,172.16.*,iam.cn-southwest-2.huaweicloud.com,pip.modelarts.private.com

export NO_PROXY=127.0.0.1,localhost,172.16.*,iam.cn-southwest-2.huaweicloud.com,pip.modelarts.private.com

 

mkdir -p /opt/huawei/edu-apaas/src/init

cd /opt/huawei/edu-apaas/src/init

 

if [ -e "Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run" ]; then

    file_size=$(ls -l "Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run" | awk '{print $5}')

    full_size=2145898187

    if [ $file_size -lt $full_size ]; then

        echo "CANN包大小不正确,需要重新下载"

        wget https://public-download.obs.cn-east-2.myhuaweicloud.com:443/cann_toolkits/Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run -O Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run

        chmod +x Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run >/dev/null 2>&1

    fi

    echo "toolkit is exists, skipping the download step."

else

    echo "Start downloading toolkit package."

    wget https://public-download.obs.cn-east-2.myhuaweicloud.com:443/cann_toolkits/Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run -O Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run

    chmod +x Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run >/dev/null 2>&1

fi

if [ ! -d "/opt/huawei/edu-apaas/src/init/Ascend/ascend-toolkit/8.1.RC1" ]; then

    ./Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run --install --force --quiet >install.log 2>&1 &

    do_sth_pid=$(jobs -p | tail -1)

    progress "${do_sth_pid}" &

    wait "${do_sth_pid}"

    printf "\033[32m CANN包部署完成                         \033[0m\n"

else

    printf "\033[32m CANN包已部署                         \033[0m\n"

fi

 

source /home/service/Ascend/ascend-toolkit/set_env.sh

 

if [ -d "cmake-3.28.3-linux-aarch64" ]; then

    echo "The cmake folder exists, skipping the download and decompression steps."

elif [ -e "cmake-3.28.3-linux-aarch64.tar.gz" ]; then

    echo "CMake compressed file exists, start decompressing steps."

    tar xf cmake-3.28.3-linux-aarch64.tar.gz

else

    echo "need CMake compressed file exists."

    wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/AscendC/ResourceDependent/cmake-3.28.3-linux-aarch64.tar.gz

    tar xf cmake-3.28.3-linux-aarch64.tar.gz

fi

export PATH=/opt/huawei/edu-apaas/src/init/cmake-3.28.3-linux-aarch64/bin:$PATH

# 安装gcc10.3,用于支持torch==2.5.1版本

if [ -d "gcc" ]; then

    echo "The cmake folder exists, skipping the download and decompression steps."

elif [ -e "gcc.tar.gz" ]; then

    echo "CMake compressed file exists, start decompressing steps."

    tar -zxvf  gcc.tar.gz

else

    echo "need CMake compressed file exists."

    wget https://public-download.obs.cn-east-2.myhuaweicloud.com:443/%E7%AE%97%E5%AD%90%E6%8C%91%E6%88%98%E8%B5%9BS5/gcc.tar.gz

    tar -zxvf  gcc.tar.gz

fi

export PATH=/opt/huawei/edu-apaas/src/init/gcc/bin:$PATH

export LD_LIBRARY_PATH=/opt/huawei/edu-apaas/src/init/gcc/lib64:$LD_LIBRARY_PATH

# cmake gcc默认安装在//opt/huawei/edu-apaas/src/init路径下,可自行根据安装位置在~/.bashrc里配置以下环境变量

echo "source /home/service/Ascend/ascend-toolkit/set_env.sh" >> ~/.bashrc

echo 'export PATH=/opt/huawei/edu-apaas/src/init/cmake-3.28.3-linux-aarch64/bin:$PATH' >> ~/.bashrc

echo 'export PATH=/opt/huawei/edu-apaas/src/init/gcc/bin:$PATH' >> ~/.bashrc

echo 'export LD_LIBRARY_PATH=/opt/huawei/edu-apaas/src/init/gcc/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc

source ~/.bashrc

 

 

步骤2  执行init_sh脚本自动配置环境cann包安装如下

Init_env.sh脚本已将cann包更新到最新社区版cann8.1.RC1.beta1

bash init_env.sh

 

环境配置成功页面

  • 等待脚本执行成功后,设置算子开发所需环境变量
source ~/.bashrc

环境变量设置页面

3、 体验开发一个自定义算子AddCustom

3.1.1 自定义算子分析

 

Ascend C 算子开发的编程范式参考

https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/800alpha001/devguide/opdevg/ascendcopdevg/atlas_ascendc_10_0006.html

3.1.2 编译及测试自定义算子

  • 在华为开发者空间AI NoteBook中,打开终端,下载samples样例,执行编译AddCustom算子样例
cd /opt/huawei/edu-apaas/src/init

source ~/.bashrc

git clone https://gitee.com/ascend/samples.git

cd samples/operator/ascendc/0_introduction/1_add_frameworklaunch

bash install.sh -v Ascend910B4

 

执行自定义算子编译成功,生成 run 包

 

 

步骤3  执行安装AddCustom算子样例

在执行自定义算子编译成功后,我们进行自定义算子安装

./CustomOp/build_out/custom_opp_openEuler_aarch64.run

 

提示执行自定义算子安装成功,接下来使用如下指令进行测试

 

cd AclNNInvocation && bash run.sh


 

恭喜!至此自定义算子样例执行成功

 

 

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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