国庆节前从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就有。