0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何基于OrangePi AIpro开发AI推理应用

香橙派 2024-06-04 14:23 次阅读

香橙派AIpro开发板采用昇腾AI技术路线,接口丰富且具有强大的可扩展性,提供8/20TOPS澎湃算力,可广泛使用于AI边缘计算、深度视觉学习及视频流AI分析、视频图像分析、自然语言处理等AI领域。通过昇腾CANN软件栈的AI编程接口,可满足大多数AI算法原型验证、推理应用开发的需求。

AscendCL(Ascend Computing Language,昇腾计算语言)是昇腾计算开放编程框架,是对底层昇腾计算服务接口的封装,提供Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等API,支持C&C++Python编程语言,能够实现深度学习推理计算、图形图像预处理、单算子加速计算等能力。

掌握了AscendCL的编程方法,就意味着可以在香橙派AIpro开发板上充分利用昇腾的算力资源,能够基于深度学习算法开发图片分类、目标检测等一系列深度学习推理计算程序。

01总体流程

使用AscendCL开发推理应用时,开发流程大致分为以下几步:

1.AscendCL初始化:初始化AscendCL内部资源,为程序运行做准备

2.运行管理资源申请:申请运行时相关资源,例如计算设备

3.媒体数据处理:可实现抠图、缩放、视频或图片的编解码等

4.模型推理:包括模型加载、执行、卸载

5.运行管理资源释放:资源使用后及时释放

6.AscendCL去初始化:与初始化配对使用

在开始之前,我们得先了解下,使用AscendCL时经常会提到的“数据类型的操作接口” ,它是什么?为什么会存在?

在C/C++中,对用户开放的数据类型通常以Struct结构体方式定义、以声明变量的方式使用,但这种方式一旦结构体要增加成员参数,用户的代码就涉及兼容性问题,不便于维护,因此AscendCL对用户开放的数据类型,均以接口的方式操作该数据类型,例如,调用某个数据类型的Create接口创建该数据类型、调用Get接口获取数据类型内参数值、调用Set接口设置数据类型内的参数值、调用Destroy接口销毁该数据类型,用户无需关注定义数据类型的结构体长什么样,这样即使后续数据类型需扩展,只需增加该数据类型的操作接口即可,也不会引起兼容性问题。

所以,总结下,“数据类型的操作接口”就是创建数据类型、Get/Set数据类型中的参数值、销毁数据类型的一系列接口,存在的最大好处就是减少兼容性问题。

接下来,进入我们今天的主题,怎么用AscendCL的接口开发网络模型推理场景下的应用。

02AscendCL初始化与去初始化

使用AscendCL接口开发应用时,必须先初始化AscendCL ,否则可能会导致后续系统内部资源初始化出错,进而导致其它业务异常。在初始化时,还支持以下跟推理相关的配置项(例如,性能相关的采集信息配置),以json格式的配置文件传入AscendCL初始化接口。如果当前的默认配置已满足需求(例如,默认不开启性能相关的采集信息配置),无需修改,可向AscendCL初始化接口中传入NULL,或者可将配置文件配置为空json串(即配置文件中只有{})。

有初始化就有去初始化,在确定完成了AscendCL的所有调用之后,或者进程退出之前,需调用AscendCL接口实现AscendCL去初始化。

wKgaomZesqmAaSdZAAECGYU3NU4358.png

03运行管理资源申请与释放

运行管理资源包括Device、Context、Stream、Event等,此处重点介绍Device、Context、Stream,其基本概念如下图所示 。

wKgZomZesqqANGIBAAGLHAzjlYs952.png

您需要按顺序依次申请如下运行管理资源:Device、Context、Stream,确保可以使用这些资源执行运算、管理任务。所有数据处理都结束后,需要按顺序依次释放运行管理资源:Stream、Context、Device。

在申请运行管理资源时,Context、Stream支持隐式创建和显式创建两种申请方式:

wKgaomZesqqAKannAALE-6cX-sE521.pngwKgZomZesquAUwvkAAI_pL5x7f0437.png

04媒体数据处理

如果模型对输入图片的宽高要求与用户提供的源图不一致,AscendCL提供了媒体数据处理的接口,可实现抠图、缩放、格式转换、视频或图片的编解码等,将源图裁剪成符合模型的要求。后续会展开说明这个功能,本期着重介绍模型推理的部分,以输入图片满足模型的要求为例。

05模型加载

模型推理场景下,必须要有适配昇腾AI处理器的离线模型(*.om文件),我们可以使用ATC(Ascend Tensor Compiler)来构建模型。如果模型推理涉及动态Batch、动态分辨率等特性,需在构建模型增加相关配置。关于如何使用ATC来构建模型,请移步文末“昇腾社区文档中心”。

有了模型,就可以开始加载了,当前AscendCL支持以下几种方式加载模型:

·从*.om文件中加载模型数据,由AscendCL管理内存

·从*.om文件中加载模型数据,由用户自行管理内存

·从内存中加载模型数据,由AscendCL管理内存

·从内存中加载模型数据,由用户自行管理内存

由用户自行管理内存时,需关注工作内存、权值内存。工作内存用于存放模型执行过程中的临时数据,权值内存用于存放权值数据。这个时候,是不是有疑问了,我怎么知道工作内存、权值内存需要多大?不用担心,AscendCL不仅提供了加载模型的接口,同时也提供了“根据模型文件获取模型执行时所需的工作内存和权值内存大小”的接口,方便用户使用 。

wKgZomZesqmATZRXAADtuvQ_SvA095.pngwKgZomZesquAVpbEAAJ3FPB9cbw879.png

06模型执行

在调用AscendCL接口进行模型推理时,模型推理有输入、输出数据,输入、输出数据需要按照AscendCL规定的数据类型存放。相关数据类型如下:

·使用aclmdlDesc类型的数据描述模型基本信息(例如输入/输出的个数、名称、数据类型、Format、维度信息等)。模型加载成功后,用户可根据模型的ID,调用该数据类型下的操作接口获取该模型的描述信息,进而从模型的描述信息中获取模型输入/输出的个数、内存大小、维度信息、Format、数据类型等信息。

·使用aclDataBuffer类型的数据来描述每个输入/输出的内存地址、内存大小。调用aclDataBuffer类型下的操作接口获取内存地址、内存大小等,便于向内存中存放输入数据、获取输出数据。

·使用aclmdlDataset类型的数据描述模型的输入/输出数据。模型可能存在多个输入、多个输出,调用aclmdlDataset类型的操作接口添加多个aclDataBuffer类型的数据。

wKgaomZesqmAM1dKAAEzPqOnuH0752.pngwKgZomZesquAdZuNAASqLOL-kPE916.png

准备好模型执行所需的输入和输出数据类型、且存放好模型执行的输入数据后,可以执行模型推理了,如果模型的输入涉及动态Batch、动态分辨率等特性,则在模型执行前,还需要调用AscendCL接口告诉模型本次执行时需要用的Batch数、分辨率等。

当前AscendCL支持同步模型执行、异步模型执行两种方式,这里说的同步、异步是站在调用者和执行者的角度。

·若调用模型执行的接口后需等待推理完成再返回,则表示模型执行是同步的。当用户调用同步模型执行接口后,可直接从该接口的输出参数中获取模型执行的结果数据,如果需要推理的输入数据量很大,同步模型执行时,需要等所有数据都处理完成后,才能获取推理的结果数据。

·若调用模型执行的接口后不等待推理完成完成再返回,则表示模型执行是异步的。当用户调用异步模型执行接口时,需指定Stream( Stream用于维护一些异步操作的执行顺序,确保按照应用程序中的代码调用顺序在Device上执行),另外,还需调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成,才可以获取推理的结果数据。如果需要推理的输入数据量很大,异步模型执行时,AscendCL提供了Callback机制,触发回调函数,在指定时间内一旦有推理的结果数据,就获取出来,达到分批获取推理结果数据的目的,提高效率。

wKgaomZesquATZUdAANe0C3Dk3M041.png

推理结束后,如果需要获取并进一步处理推理结果数据,则由用户自行编码实现。最后,别忘了,我们还要销毁aclmdlDataset、aclDataBuffer等数据类型,释放相关内存,防止内存泄露。

07模型卸载

在模型推理结束后,还需要通过aclmdlUnload接口卸载模型,并销毁aclmdlDesc类型的模型描述信息、释放模型运行的工作内存和权值内存。

wKgZomZesqmAZwpZAADuklBa2MU474.png

(以上内容来源于昇腾CANN公众号)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Orange
    +关注

    关注

    0

    文章

    83

    浏览量

    19676
  • AI
    AI
    +关注

    关注

    87

    文章

    30919

    浏览量

    269167
  • 开发板
    +关注

    关注

    25

    文章

    5057

    浏览量

    97519
  • 边缘计算
    +关注

    关注

    22

    文章

    3093

    浏览量

    48990
收藏 人收藏

    评论

    相关推荐

    AI算法在RZ/V芯片中的移植推理流程

    之前文章已介绍了一些AI算法Demo的应用 ,我们提供从模型训练到RZ/V系列嵌入式端推理应用的完整流程。整体流程如下图所示。
    的头像 发表于 12-20 12:21 1085次阅读
    <b class='flag-5'>AI</b>算法在RZ/V芯片中的移植<b class='flag-5'>推理</b>流程

    基于OrangePi AIpro开发一个电子纸屏时钟

    OrangePiAIpro是香橙派联合华为精心打造的一款高算力人工智能开发板。作为业界首款基于昇腾深度研发的AI开发板,它先后荣获2023昇腾APN最佳产品奖以及PoweredbyAscend甑选
    的头像 发表于 06-25 17:00 1131次阅读
    基于<b class='flag-5'>OrangePi</b> <b class='flag-5'>AIpro</b><b class='flag-5'>开发</b>一个电子纸屏时钟

    开发者手机 AI - 目标识别 demo

    功能简介 该应用是在Openharmony 4.0系统上开发的一个目标识别的AI应用,旨在从上到下打通Openharmony AI子系统,展示Openharmony系统的AI能力,并为
    发表于 04-11 16:14

    【HarmonyOS HiSpark AI Camera】AI图像开发

    项目名称:AI图像开发试用计划:申请理由本人在AI图像识别中已有一年的开发经验,目前正采用瑞芯微的rk1808芯片进行模型的落地部署,但是该芯片没有任何的摄像头方案,需要自己选取。目前
    发表于 09-25 10:11

    基于SRAM的方法可以加速AI推理

    基于SRAM的方法可加速AI推理
    发表于 12-30 07:28

    Dllite_micro (轻量级的 AI 推理框架)

    DLLite-Micro 是一个轻量级的 AI 推理框架,可以为 OpenHarmony OS 的轻量设备和小型设备提供深度模型的推理能力DLLite-Micro 向开发者提供清晰、易
    发表于 08-05 11:40

    深度剖析OpenHarmony AI调度管理与推理接口

    1 简介AI任务管理与统一的推理能力提供了接口的统一标准系统上CPU提供了AI任务调度管理的能力,对AI的能力进行了开放的推理
    发表于 03-25 11:15

    嘉楠勘智K510开发板简介——高精度AI边缘推理芯片及应用

    。K510是嘉楠公司推出的第二代AI加速芯片,它采用双核RISC-V CPU@800Mhz,内置DSP协处理器和强大的AI运算单元KPU,支持 BF16浮点数据格式,可在边缘端进行高精度推理,是国内少有
    发表于 11-22 15:52

    HarmonyOS:使用MindSpore Lite引擎进行模型推理

    () % divisor) / divisor;// 0--0.9f } } return OH_AI_STATUS_SUCCESS; } 然后进入主要的开发步骤,具括包括模型的准备、读取、编译、推理和释放,具体
    发表于 12-14 11:41

    安晟培半导体通过AI推理应用程序进一步增强 Ampere Altra 的性能

    中国,北京(2021 年 8 月 5 日)——安晟培半导体科技有限公司(Ampere Computing)日前宣布收购AI技术初创公司 OnSpecta,该收购将助力 Ampere 通过 AI 推理应用程序进一步增强 Amper
    的头像 发表于 08-18 11:38 3604次阅读

    OrangePi_plus2应用开发文档

    香橙派开发必看!OrangePi_plus2应用开发文档免费下载。
    发表于 05-11 14:15 3次下载

    边缘AI推理应用设计的发展

      边缘人工智能市场正在迅速增长,芯片供应商也在这个市场上争夺一席之地。事实上,到 2020 年代中期,人工智能销售额迅速增长至数百亿美元,其中大部分增长来自边缘人工智能推理
    的头像 发表于 07-10 10:03 930次阅读

    香橙派联合华为发布基于昇腾的Orange Pi AIpro开发板 业界首款基于昇腾AI开发

    香橙派联合华为发布基于昇腾的Orange Pi AIpro 开发板 业界首款基于昇腾AI开发板 日前香橙派联合华为发布了基于昇腾的Orange Pi
    的头像 发表于 12-04 19:04 1518次阅读
    香橙派联合华为发布基于昇腾的Orange Pi <b class='flag-5'>AIpro</b><b class='flag-5'>开发</b>板 业界首款基于昇腾<b class='flag-5'>AI</b><b class='flag-5'>开发</b>板

    ONNX Runtime支持龙架构,AI推理生态再添新翼

    近日,备受瞩目的AI推理框架开源社区ONNX Runtime宣布推出支持龙架构的新版本1.17.0,这一里程碑式的更新意味着龙芯平台上的AI推理应
    的头像 发表于 03-27 10:58 726次阅读

    OrangePi AIpro应用:机械臂应用开发指南

    2024世界人工智能大会上,香橙派携OrangePiAIpro20T在世博展览馆H1-A301展区亮相,给大家带来AI+互动的沉浸式体验。其中,搭载OrangePiAIpro开发板的智能机械臂吸引了
    的头像 发表于 08-19 16:42 589次阅读
    <b class='flag-5'>OrangePi</b> <b class='flag-5'>AIpro</b>应用:机械臂应用<b class='flag-5'>开发</b>指南