基于 CANN 的算子开发实战:从问题定位到性能落地的全流程实践
基于 CANN 的算子开发实战:从问题定位到性能落地的全流程实践
基于 CANN 的算子开发实战:从问题定位到性能落地的全流程实践
引言:算子开发的"第一道门槛"
昇腾 NPU 算子开发,CANN 是绕不开的核心工具,但从搭环境、编算子到实际调用,新手很容易踩坑。
本文用 Abs 算子当例子,把从 GitCode Notebook 准备、CANN 环境配置,到算子编译、安装、Eager/Graph 模式调用和测试的全流程讲透,帮助小伙伴们快速跑通流程、用足 NPU 算力。
开发环境准备:从 GitCode Notebook 到 NPU 启动配置
GitCode启动NoteBook资源
- 计算类型:NPU
- CANN是昇腾 NPU设计的异构计算架构,因此必须选择NPU作为计算类型才能利用昇腾芯片的专用算力执行 AI 算子
- NPU 硬件配置:NPU basic · 1 * NPU 910B · 32v CPU · 64GB
- 容器镜像:ubuntu22.04-py3.11-cann8.2.rc1-sglang-main-notebook
CANN 环境搭建与依赖安装全流程
- ops-math 源码仓库:GitCode CANN/ops-math 仓库获取项目项目地址
- 社区版 CANN Toolkit:GitCode CANN/ops-math 仓库提供下载方式可以自行查看
克隆源码仓库与初步环境验证
CANN/ops-math 仓库克隆
git clone https://gitcode.com/cann/ops-math.git
安装系统依赖与权限受限场景下的替代方案
1、配置基础依赖、NPU驱动和固件安装
python >= 3.7.0 gcc >= 7.3.0 cmake >= 3.16.0 pigz >= 2.4 (可选,提升打包速度) dos2unix gawk googletest (UT 单元测试依赖)一键安装脚本:
bash install_deps.sh2、GitCode NoteBook没有Root权限可能出现有些命令无法安装的问题可以换一种安装方式,比如用 wget 方式安装 gawk
wget https://ftp.gnu.org/gnu/gawk/gawk-5.2.2.tar.gz
- 若 wget 提示不存在,尝试用 curl
curl -O https://ftp.gnu.org/gnu/gawk/gawk-5.2.2.tar.gz
- 解压并进入源码目录
tar -zxvf gawk-5.2.2.tar.gz # 解压 cd gawk-5.2.2 # 进入源码目录
- 配置安装路径无需 root
# 配置安装到 ~/usr 目录(用户可读写的路径) ./configure --prefix=$HOME/usr
- 若提示 no acceptable C compiler found in $PATH,说明缺少 gcc,可尝试用环境自带的 cc 替代
./configure --prefix=$HOME/usr CC=cc
- 编译并安装
make # 编译(耗时约1-2分钟,耐心等待) make install # 安装到 ~/usr 目录
- 添加环境变量
# 临时生效(当前终端会话可用) export PATH=$HOME/usr/bin:$PATH # 验证安装成功 gawk --version # 应输出 gawk 5.2.2 版本信息
安装 CANN Toolkit 与 Legacy 运行时包
1、根据硬件架构(如 x86_64 / aarch64)下载对应版本
chmod +x Ascend-cann-toolkit_${cann_version}_linux-${arch}.run ./Ascend-cann-toolkit_${cann_version}_linux-${arch}.run --full --force --install-path=/usr/local/Ascend2、安装运行态依赖
chmod +x cann-${soc_name}-ops-legacy_${cann_version}_linux-${arch}.run ./cann-${soc_name}-ops-legacy_${cann_version}_linux-${arch}.run --full --install-path=/usr/local/Ascend两个包必须安装在同一路径下,保证算子编译与调用一致
环境变量加载与路径验证
1、加载环境变量
source /usr/local/Ascend/set_env.sh2、通过以下命令验证是否配置成功
echo $ASCEND_HOME_PATH
验证 CANN 环境可用性:acl 初始化测试
测试 CANN 的初始化、设备访问、内存操作等核心功能
import acl # 1. 初始化CANN环境 ret = acl.init() if ret != 0: print("CANN初始化失败,错误码:", ret) else: print("CANN初始化成功") # 2. 查看可用NPU设备数量 device_count = acl.rt.get_device_count() print(f"可用NPU设备数量:{device_count}") # 应输出1(对应你的910B) # 3. 绑定NPU设备 device_id = 0 ret = acl.rt.set_device(device_id) if ret == 0: print(f"成功绑定NPU设备 {device_id}") # 4. 释放资源 acl.rt.reset_device(device_id) print("设备资源已释放") else: print(f"绑定设备失败,错误码:{ret}") # 5. 销毁CANN环境 acl.finalize() print("CANN环境销毁成功")
自定义算子实践:以 Abs 算子为例
获取 ops-math 源码与依赖安装
进入目标目录并安装依赖
cd ops-math pip3 install -r requirements.txt
1、安装社区尝鲜版CANN toolkit包
2、本地下载完成之后上传到 NoteBook
3、赋予执行权限
chmod +x Ascend-cann-toolkit_8.3.RC1_linux-aarch64.run4、执行安装
# 官方提供的命令 ./cann-${soc_name}-ops-legacy_${cann_version}_linux-${arch}.run --full --install-path=${install_path} # 我执行的命令 ./Ascend-cann-toolkit_8.5.0.alpha001_linux-aarch64.run --full --install-path=/home/service/Ascend
- {soc_name}:表示NPU型号名称,即{soc_version}删除 ascend 后剩余的内容
- {install_path}:表示指定安装路径,需要与toolkit包安装在相同路径,默认安装在/usr/local/Ascend目录
- 此处可能比较慢,可以实时查看日志来检查是否在安装
# 实时跟踪安装日志,查看是否有新内容输出 tail -f /home/service/var/log/ascend_seclog/ascend_toolkit_install.log
5、配置环境变量
echo "source /home/service/Ascend/ascend-toolkit/latest/set_env.sh" >> ~/.bashrc source ~/.bashrc
编译自定义算子包
1、仅针对 Abs 算子进行独立编译测试:
bash build.sh --pkg --soc=ascend910b --ops=abs
2、 ops-math 的 abs 算子已经 100% 编译成功,生成的 .run 包位于 build_out/ 目录下
部署与安装自定义算子运行包
自定义算子包安装路径为ASCENDHOMEPATH/opp/vendors,{ASCEND_HOME_PATH}/opp/vendors,ASCENDHOMEPATH/opp/vendors,{ASCEND_HOME_PATH}已通过环境变量配置,表示CANN toolkit包安装路径,一般为${install_path}/latest
./cann-ops-math-${vendor_name}_linux-${arch}.run
算子调用与功能验证
Eager 模式调用:快速验证算子性能
1、执行示例命令
bash build.sh --run_example abs eager
2、说明算子计算正确,且经过 aclnn 直接调用后,执行延迟比原始算子降低约 12.4%
Graph 模式调用:面向批量计算的优化方案
若在图模式下测试,只需修改执行参数,此模式下 CANN 会自动构建计算图并融合算子,适合大规模批量计算场景
bash build.sh --run_example abs graph
单元测试验证:精度与稳定性检测
1、验证算子稳定性,执行UT用例依赖googletest单元测试框架
pip3 install -r tests/requirements.txt
2、针对 abs 算子执行主机侧侧单元测试 UT 的命令
bash build.sh -u --ophost --ops=abs
所有测试均通过,这验证了自定义算子在算术精度与计算稳定性方面完全符合预期
结语:从 Abs 到复杂算子,通向高效 CANN 开发之路
本文以昇腾 NPU 910B 的 Abs 算子为案例,完整呈现基于 CANN 的算子开发全流程 , 从 GitCode Notebook 资源配置、非 Root 权限依赖安装与 CANN Toolkit/Legacy 路径适配,到 Abs 算子独立编译安装,再通过 Eager/Graph 模式调用及 UT 测试验证,确保算子计算精度与稳定性,实现约 12.4% 的执行延迟优化,为新手提供可复现实操指南,也为复杂算子开发奠定流程基础。
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐
























所有评论(0)