前言: 使用昇腾平台进行推理开发,在进行离线模型转换时,可能会遇到不支持的算子;或者进行网络调优时,发现某算子性能较低,这都需要开发自定义算子。因此,基于香橙派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算子开发感兴趣的小伙伴,可以访问:https://www.hiascend.com/document/detail/zh/CANNCommunityEdit... 获取进一步信息。二)OrangePi AIPro开发板 Orange Pi AIpro是香橙派联合华为推出的,采用昇腾AI技术路线,在昇腾全栈 AI 软硬件平台赋能下,满足大多数AI算法原型验证、推理应用开发的需求的一款AI开发板。http://www.orangepi.cn/html/hardWare/computerAndMicrocontroll...
这款开发板具有如下特点: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/CANNCommunityEdit...一)下载&安装 toolkit1、下载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/CANNCommunityEdit...
二)下载&更新驱动和固件(本次不需要,操作要慎重)1、下载驱动和固件 驱动和固件,与toolkit版本以及硬件有关,如下图所示:
2、安装、更新固件和驱动 本次无需更新固件和驱动,对更新固件和驱动感兴趣的小伙伴可以移步:https://www.hiascend.com/document/detail/zh/CANNCommunityEdit...,如下图红框中的内容。
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.shexport ASCEND_CUSTOM_PATH=/usr/local/Ascend/ascend-toolkit/latestexport 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/CANNCommunityEdit...三)算子编译部署 进行算子调用前,无论是单算子调用还是在网络中使用自定义算子,都需要对算子工程进行编译和部署。https://www.hiascend.com/document/detail/zh/CANNCommunityEdit...
1、检查、修改编译选项
2、编译自定义算子bash build.sh
3、安装自定义算子 在自定义算子包所在路径下,执行如下命令,安装自定义算子包。
我们可以在自定义算子安装路径下查看:
四)运行ACLNN调用工程
运行结果:
至此,Ascend C自定义算子例程已经在香橙派 AIPro的开发板上完成了验证测试。相信随着CANN的持续更新,昇腾AI芯片性能会更好的发挥,也会越来越好用!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。