在香橙派AIPro上运行Ascend C自定义算子

举报
dayao 发表于 2024/03/15 11:52:25 2024/03/15
【摘要】 CANN社区版从8.0RC1.alpha001开始,已经支持Atlas 200 A2推理产品进行Ascend C算子开发。据此,笔者在香橙派AIPro开发板上进行Ascend C环境搭建和例程运行。

前言:

        使用昇腾平台进行推理开发,在进行离线模型转换时,可能会遇到不支持的算子;或者进行网络调优时,发现某算子性能较低,这都需要开发自定义算子。因此,基于香橙派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/CANNCommunityEdition/80RC1alpha002/devguide/opdevg/ascendcopdevg/atlas_ascendc_10_0025.html

        获取进一步信息。

二)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芯片性能会更好的发挥,也会越来越好用!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。