前言:
使用昇腾平台进行推理开发,在进行离线模型转换时,可能会遇到不支持的算子;或者进行网络调优时,发现某算子性能较低,这都需要开发自定义算子。因此,基于香橙派AIPro开发板进行开发时,也需要使用到自定义算子开发技术。笔者欣喜的发现CANN社区版从CANN_toolkit8.0RC1.alpha001版本开始,已经支持Atlas 200 A2推理产品进行Ascend C算子开发。香橙派AIPro开发板官方镜像(2024.02.27)预装的CANN版本是7.0,本文描述了在此镜像基础上,安装新版本的CANN,并下载sample仓代码进行Ascend C算子运行测试。
一、概述
一)Ascend C算子开发
从CANN社区版8.0RC1.alpha001版本开始,支持Ascend C的产品型号增加了 Atlas 200 A2推理产品,Ascend 官方Sample仓也完善了相关例程。可以通过访问下述网址获取最新的信息:
昇腾社区官网:https://www.hiascend.com/
昇腾gitee sample仓:https://gitee.com/ascend/samples
Ascend C算子开发流程如下图所示:
本篇笔记,讲述的是上图红框圈出来的内容,即:在香橙派AI Pro开发板上1)安装Ascend C开发调试的软件环境;使用官方的sample仓的AddCustom例程,进行2)编译部署;3)算子调用,用来验证Ascend C算子开发环境安装和配置正确。对Ascend C算子开发感兴趣的小伙伴,可以访问:
获取进一步信息。
二)OrangePi AIPro开发板
Orange Pi AIpro是香橙派联合华为推出的,采用昇腾AI技术路线,在昇腾全栈 AI 软硬件平台赋能下,满足大多数AI算法原型验证、推理应用开发的需求的一款AI开发板。
http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html
这款开发板具有如下特点:
1、算力强劲,内存容量大——8T/20T,内存8G/16G;
2、接口丰富,易于扩展;
3、支持多种操作系统——Ubuntu、Openeuler;
4、用途广应用场景广泛,覆盖 AIoT各行各业;
5、资料丰富、样例丰富、易学易用。
二、环境准备
搭建Ascend C算子开发环境包括安装toolkit、驱动、固件;配置环境变量等内容。本篇笔记将描述在香橙派AI Pro开发板(8T/16G)上完成环境搭建和例程运行。镜像版本为opiaipro_ubuntu22.04_desktop_aarch64_20240227.img.xz,需要:将预装的CANN7.0版本升级到CANN8.0.RC1.alpha002;驱动和固件已经支持CANN8.0,无需升级;配置环境变量。
感兴趣的小伙伴,可以参考:“文档首页/CANN社区版/8.0.RC1.alpha002/快速安装CANN“,https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha002/quickstart/quickstart/quickstart_18_0004.html
一)下载&安装 toolkit
1、下载toolkit
从昇腾社区官方下载“https://www.hiascend.com/software/cann”CANN社区版8.0.RC1.alpha002/,建议下载最新版。将下图所示toolkit包下载到香橙派AI Pro开发板。
2、安装Toolkit
对toolkit包赋予执行权限,运行安装。具体可参考:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha002/softwareinst/instg/instg_0038.html
二)下载&更新驱动和固件(本次不需要,操作要慎重)
1、下载驱动和固件
驱动和固件,与toolkit版本以及硬件有关,如下图所示:
2、安装、更新固件和驱动
本次无需更新固件和驱动,对更新固件和驱动感兴趣的小伙伴可以移步:
https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha002/softwareinst/instg/instg_0019.html,如下图红框中的内容。
3、查看驱动和固件版本
查看驱动版本 npu-smi info
查看固件版本 /var/davinci/driver/upgrade-tool --device_index -1 --component -1 --all --version
三)配置环境变量
环境变量应该按实际CANN的安装路径进行配置,以root用户,CANN默认安装路径:/usr/local/Ascend,配置环境变量如下:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
export ASCEND_CUSTOM_PATH=/usr/local/Ascend/ascend-toolkit/latest
export ASCEND_HOME_DIR=/usr/local/Ascend/ascend-toolkit/latest
另外Ascend C算子例程要求 Cmake 版本>3.16,开发板环境已满足条件:
三、运行Ascend C算子例程
受限于篇幅,本笔记不描述Ascend C算子的开发过程,仅对现有的例程,进行核函数调用和单算子调用的操作过程并记录。
一)下载sample仓
gitee上的Ascend / samples仓:
https://gitee.com/ascend/samples/tree/master/operator
二)核函数运行验证
核函数即算子kernel程序开发完成后,即可编写host侧的核函数调用程序,实现从host
侧的APP程序调用算子,进行运行验证。主要有CPU侧和NPU侧两种运行验证方法:
CPU侧运行验证:主要通过ICPU_RUN_KF CPU调测宏等CPU调测库提供的接口来完成;
NPU侧运行验证:主要通过使用<<<>>>内核调用符和AscendCL API提供的运行时接口来完成。
CPU侧功能验证结果:
npu侧运行结果:
进一步阅读可参考:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha002/devguide/opdevg/ascendcopdevg/atlas_ascendc_10_0019.html
三)算子编译部署
进行算子调用前,无论是单算子调用还是在网络中使用自定义算子,都需要对算子工程进行编译和部署。https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha002/devguide/opdevg/ascendcopdevg/atlas_ascendc_10_0035.html
1、检查、修改编译选项
2、编译自定义算子
bash build.sh
3、安装自定义算子
在自定义算子包所在路径下,执行如下命令,安装自定义算子包。
我们可以在自定义算子安装路径下查看:
四)运行ACLNN调用工程
运行结果:
至此,Ascend C自定义算子例程已经在香橙派 AIPro的开发板上完成了验证测试。相信随着CANN的持续更新,昇腾AI芯片性能会更好的发挥,也会越来越好用!