1、实验介绍

1.1、实验平台介绍

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

1.1.1、华为开发者空间简介
申领空间

https://developer.huaweicloud.com/space/devportal/desktop?utm_source=csdndspace&utm_adplace=csdncxlhdp3

华为开发者空间官网地址: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架构

表1-1 训练环境系统/软件版本

 

2.1.2 Ascend C简介

面向算子开发场景的编程语言Ascend C,原生支持C和C++标准规范,最大化匹配用户开发习惯;通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力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环境更新(可选)

步骤 1 获取 init_env.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. 直接在控制台终端创建 init_env.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_env.sh脚本,自动配置环境,cann包安装如下

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

bash init_env.sh

 

 

 

环境配置成功页面

步骤 3 等待脚本执行成功后,设置算子开发所需环境变量

source ~/.bashrc

 

 

环境变量设置页面

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

3.1.1 自定义算子分析

 

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

基于自定义算子工程的算子开发-快速入门-Ascend C算子开发-CANN社区版8.0.0.alpha001开发文档-昇腾社区

3.1.2 编译及测试自定义算子

步骤 1 在华为开发者空间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 包

 

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

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

./CustomOp/build_out/custom_opp_openEuler_aarch64.run

 

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

 

cd AclNNInvocation && bash run.sh

 

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

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐