【CANN训练营】+开源之星+GitCode算子开发环境快速搭建手册

国庆节前从https://gitee.com/ascend/cann-ops看到通知:

cann-ops 本项目已经正式迁移至 Gitcode 平台

第一时间去gitcode平台看了下,发现改动很大,关键是还有了

算子开发环境快速搭建手册

这不得第一时间上手一波,点进去一看,还行,如何初始化都有了,结果发现。文档里面各种不通,而且第一天连source命令都无法支持,好诡异的存在。

马上过节了,放着节后再来试试看吧。

过完节,发现留言已经被回复,那再来试试看。

通过手册能得知:

在GitCode平台上创建硬件环境为Ascend 910B+ARM的开发环境。

这样的话,自定义算子是可以在上面进行编译并测试的,好评,要不然很多小伙伴都没有硬件可以作算子开发,限制太多。

但是因为是共享空间,所以两小时后回自动关闭,需要重新启动。

这点麻烦,因为等于每次重新进去,都得安装一遍CANN包,占用时间,希望后期可以改进,持久化是最好的。

接下来就用手册原文:

1.创建Notebook开发环境

步骤 1 进入GitCode平台Notebook创建页面

在GitCode主页,点击右上角"个人中心-我的Notebook"进入Notebook的管理页面。

步骤 2 激活并启动Notebook实例

我的Notebook页面选择"激活Notebook"

在Notebook资源确认界面中创建并启动一个新的Notebook,其配置如下:

 Notebook计算类型:"NPU","NPU basic · 1 * NPU 910B · 4v CPU · 8GB"。

 容器镜像:"ubuntu22.04-py3.11-cann8.2.rc1-sglang-main-notebook"。

配置完成之后"立即启动"

步骤 3 启动Notebook进入开发环境

当上一步创建并启动好Notebook时,即可点击"Terminal"进入在线编程页面
注意:Notebook环境内上传、创建和编辑的文件均在/home/service目录下。

2.环境配置

步骤 1 在Notebook环境中点击 Terminal,打开终端窗口,执行如下命令,直接在本环境通过wget下载获取init_env.sh自动安装脚本:

先输入 bash ,回车

再输入 wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/resource/gitcode/init_env.sh,回车

从init_env.sh文件内容中能看到:

bash 复制代码
#!/bin/bash

USERNAME=$(id -un)
echo "当前用户:$USERNAME"

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"
        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_str7 ]]
                then
                    mark="正在安装${mark_str7}组件包,请等待"
                elif [[ $mark =~ $mark_str8 ]]
                then
                    mark="正在安装${mark_str8}组件包,请等待"
                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
}

# 安装 dos2unix
cd /home/${USERNAME}/workspace
echo "安装dos2unix..."
if [ -d "dos2unix-7.4.4" ]; then
    echo "The dos2unix folder exists, skipping the download and decompression steps."
elif [ -e "dos2unix-7.4.4.tar.gz" ]; then
    echo "Dos2unix-7.4.4 compressed file exists, start decompressing steps."
    tar xf dos2unix-7.4.4.tar.gz
else
    echo "need Dos2unix compressed file exists."
    wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/resource/gitcode/dos2unix-7.4.4.tar.gz
    tar xf dos2unix-7.4.4.tar.gz
fi
cd dos2unix-7.4.4
sed -i 's/-DENABLE_NLS //g' Makefile
sed -i '/po\//d' Makefile
make -j4
make install bindir=/home/${USERNAME}/local/bin -k
export PATH=/home/${USERNAME}/local/bin:$PATH
echo "已安装dos2unix"

cd /home/${USERNAME}/workspace
echo "安装gawk..."
if [ -d "gawk-5.2.2" ]; then
    echo "The gawk folder exists, skipping the download and decompression steps."
elif [ -e "gawk-5.2.2.tar.gz" ]; then
    echo "gawk-5.2.2 compressed file exists, start decompressing steps."
    tar xf gawk-5.2.2.tar.gz
else
    echo "need Gawk compressed file exists."
    wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/resource/gitcode/gawk-5.2.2.tar.gz
    tar xf gawk-5.2.2.tar.gz
fi
cd gawk-5.2.2
./configure --prefix=/home/${USERNAME}/local/gawk
make -j4
make install
export PATH=/home/${USERNAME}/local/gawk/bin:$PATH
echo "已安装gawk"

# 下载CANN-Toolkit包
cd /home/${USERNAME}/workspace
if [ -e "Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run" ]; then
    file_size=$(ls -l "Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run" | awk '{print $5}')
    full_size=1785287451
    if [ $file_size -lt $full_size ]; then
        echo "CANN包大小不正确,需要重新下载"
        wget https://ascend-cann.obs.cn-north-4.myhuaweicloud.com/CANN/community/Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run -O Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run
        chmod +x Ascend-cann-toolkit_8.3.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://ascend-cann.obs.cn-north-4.myhuaweicloud.com/CANN/community/Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run -O Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run
    chmod +x Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run >/dev/null 2>&1
fi

# 安装CANN-Toolkit包
if [ ! -d "/home/${USERNAME}/8.3.RC1" ]; then
    # 不存在的时候安装
    ./Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run --full --force --install-path=/home/${USERNAME}/Ascend --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

# 下载CANN legacy包
if [ -e "cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run" ]; then
    file_size=$(ls -l "cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run" | awk '{print $5}')
    full_size=2257538929
    if [ $file_size -lt $full_size ]; then
        echo "legacy包大小不正确,需要重新下载"
        wget https://ascend-cann.obs.cn-north-4.myhuaweicloud.com/CANN/community/cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run -O cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run
        chmod +x cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run >/dev/null 2>&1
    fi
    echo "legacy is exists, skipping the download step."
else
    echo "Start downloading legacy package."
    wget https://ascend-cann.obs.cn-north-4.myhuaweicloud.com/CANN/community/cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run -O cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run
    chmod +x cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run >/dev/null 2>&1
fi

# 安装CANN legacy包
./cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run --full --install-path=/home/${USERNAME}/Ascend --quiet >install.log 2>&1 &
printf "\033[32m legacy包已部署                         \033[0m\n"

# dos2unix gawk默认安装在/home/${USERNAME}/local路径下,可自行根据安装位置在~/.bashrc里配置以下环境变量
echo "source ${HOME}/Ascend/set_env.sh" >> ~/.bashrc
echo 'export PATH=${HOME}/local/bin:$PATH' >> ~/.bashrc
echo 'export PATH=${HOME}/local/gawk/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

脚本cann包和legacy包更新到社区版本8.3.RC1

Tips1:由于gitcode默认镜像未安装vim,且云环境没有权限执行apt依赖安装,所以文件编辑需要使用notebook提供的文件管理能力。

Tips2:此处显示的/目录实际对应用户环境中/opt/huawei/edu-apaas/src/init目录,如需修改文件,需要将文件放在该目录下才能查看。

步骤 2 执行init_env.sh脚本,自动配置环境,cann和legacy包安装如下:

source init_env.sh

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

source ~/.bashrc

3.下载ops-math项目源码,编译部署自定义算子abs,执行abs算子样例

先要激活环境变量:

cd /home/service/Ascend/

source set_env.sh

接下来最好是把地址换到现在的工作目录:

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

然后

git clone https://gitcode.com/cann/ops-math.git

chmod 777 -R ops-math/

cd ops-math

安装根目录requirements.txt依赖

pip3 install -r requirements.txt

编译自定义算子包

./build.sh --pkg --soc=ascend910b --ops=abs

安装自定义算子包

./build_out/cann-ops-math-custom_linux-aarch64.run

本地验证

./build.sh --run_example abs eager cust --vendor_name=custom

从build.sh代码中可以看出:

run_example)

echo "Run examples Options:"

echo $dotted_line

echo " --run_example op_type mode[eager:graph] [pkg_mode --vendor_name=name] Compile and execute the test_aclnn_xxx.cpp/test_geir_xxx.cpp"

echo $dotted_line

echo "Examples:"

echo " bash build.sh --run_example abs eager"

echo " bash build.sh --run_example abs graph"

echo " bash build.sh --run_example abs eager cust"

echo " bash build.sh --run_example abs eager cust --vendor_name=custom"

return

;;

判断是否带参数 eager: 要看算子目录下的examples目录里有没有test_aclnn_*.cpp文件

比如:acos就没有,add就有。

相关推荐
通往曙光的路上3 小时前
vue啊哈哈哈哈哈哈哈哈
前端·javascript·vue.js
进阶的鱼4 小时前
React+ts+vite脚手架搭建(四)【mock篇】
前端·javascript·react.js
小高0074 小时前
🤔Proxy 到底比 defineProperty 强在哪?为什么今天还在聊 Proxy?
前端·javascript·vue.js
前端Hardy4 小时前
HTML&CSS&JS:纯前端图片打码神器:自定义强度 + 区域缩放,无需安装
前端·javascript·css
Keepreal4965 小时前
word文件预览实现
前端·javascript·react.js
郝开5 小时前
5. React中的组件:组件是什么;React定义组件
前端·javascript·react.js
斜向生5 小时前
【JavaScript正则表达式指南】——字符类(集合、范围、预定义字符类)和反向字符类详解
javascript
FuckPatience5 小时前
电脑所有可用的网络接口
前端·javascript·vue.js
前端开发爱好者5 小时前
尤雨溪宣布:Vite 纪录片震撼发布!
前端·javascript·vue.js