【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文件内容中能看到:
#!/bin/bashUSERNAME=$(id -un)
echo "当前用户:$USERNAME"progress() {#进度条程序local main_pid=$1mark_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" ] ; domark=$(tail -n 1 install.log)if [[ $mark =~ $mark_str1 ]]thenmark="校验安装包,请等待"elif [[ $mark =~ $mark_str2 ]]thenmark="正在安装runtime组件包,请等待"elif [[ $mark =~ $mark_str3 ]]thenmark="正在安装compiler组件包,请等待"elif [[ $mark =~ $mark_str4 ]]thenmark="正在安装opp组件包,请等待"elif [[ $mark =~ $mark_str5 ]]thenmark="正在安装${mark_str5}组件包,请等待"elif [[ $mark =~ $mark_str6 ]]thenmark="正在安装${mark_str6}组件包,请等待"elif [[ $mark =~ $mark_str7 ]]thenmark="正在安装${mark_str7}组件包,请等待"elif [[ $mark =~ $mark_str8 ]]thenmark="正在安装${mark_str8}组件包,请等待"elsemark="正在准备安装包,请等待"fipool=("." ".." "..." "...." "....." "......")num=${#pool[*]}roll_mark=${pool[$((RANDOM%num))]}echo -ne "\033[31m ${mark} ${roll_mark}\033[0m \r"sleep 0.5done
}# 安装 dos2unix
cd /home/${USERNAME}/workspace
echo "安装dos2unix..."
if [ -d "dos2unix-7.4.4" ]; thenecho "The dos2unix folder exists, skipping the download and decompression steps."
elif [ -e "dos2unix-7.4.4.tar.gz" ]; thenecho "Dos2unix-7.4.4 compressed file exists, start decompressing steps."tar xf dos2unix-7.4.4.tar.gz
elseecho "need Dos2unix compressed file exists."wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/resource/gitcode/dos2unix-7.4.4.tar.gztar 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" ]; thenecho "The gawk folder exists, skipping the download and decompression steps."
elif [ -e "gawk-5.2.2.tar.gz" ]; thenecho "gawk-5.2.2 compressed file exists, start decompressing steps."tar xf gawk-5.2.2.tar.gz
elseecho "need Gawk compressed file exists."wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/resource/gitcode/gawk-5.2.2.tar.gztar 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" ]; thenfile_size=$(ls -l "Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run" | awk '{print $5}')full_size=1785287451if [ $file_size -lt $full_size ]; thenecho "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.runchmod +x Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run >/dev/null 2>&1fiecho "toolkit is exists, skipping the download step."
elseecho "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.runchmod +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"
elseprintf "\033[32m CANN包已部署 \033[0m\n"
fi# 下载CANN legacy包
if [ -e "cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run" ]; thenfile_size=$(ls -l "cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run" | awk '{print $5}')full_size=2257538929if [ $file_size -lt $full_size ]; thenecho "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.runchmod +x cann-910b-opp_legacy-8.3.RC1-linux-aarch64.run >/dev/null 2>&1fiecho "legacy is exists, skipping the download step."
elseecho "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.runchmod +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就有。