【2023 · CANN训练营第一季】- 应用开发深入讲解 第二节 学习笔记

本文详细介绍了模型离线推理的过程,包括数据传输和内存管理的步骤,如内存申请、数据读入和同步/异步内存复制。此外,还阐述了模型的加载与卸载,以及如何准备模型输入输出,执行同步和异步模型推理。文章特别提到了AscendCL接口在模型管理和推理中的应用,以及AIPP的使用方法。
摘要由CSDN通过智能技术生成

一、学习目标

了解模型推理过程如何进行数据传输
2.了解模型推理步骤及代码逻辑
2.掌握模型转换工具的使用方法及常用参数意义
3.了解AIPP并掌握AIPP的使用方法

二、模型离线推理

模型离线推理主要是使用已经转好的om对输入图片进行推理,主要步骤如下图所示:

 各步骤解析如下:
Host&Device内存管理与数据传输:Host&Device上的内存申请与释放,内存间的相互拷贝;
模型加载:将离线的om文件加载到Device上;在样例的资源初始化模块中进行。
模型输入输出准备:根据离线om的输入输出,在Device上申请好模型的输入输出内存;在样例的资源初始化模块中进行。
执行推理:当模型的输入内存获取到有效数据后,便可以调用AscendCL接口执行模型推理,推理完成后结果生成到输出内存中;在样例的模型推理模块中进行。
输出解析:使用AscendCL接口,将模型输出数据从特定格式中解析出来;在输出数据处理模块中进行。下面将按步骤进行说明

三、数据传输和内存管理

1. 接口调用流程

(1)申请内存

a. Host上的内存,可以用C++标准库中的new、malloc接口申请内存,也可以使用AscendCL提供的aclrtMallocHost接口申请内存。

b. Device上的内存,使用AscendCL提供的aclrtMallocaclrtMallocHost接口申请内存。如果涉及媒体数据处理(例如,图片解码、缩放等)时,需使用acldvppMallochi_mpi_dvpp_malloc接口申请内存。

(2)将数据读入内存。

由用户自行管理数据读入内存的实现逻辑。

(3)通过内存复制实现数据传输。

数据传输可以通过内存复制的方式实现,分为同步内存复制、异步内存复制:

a.同步内存复制:调用aclrtMemcpy接口。

b.异步内存复制:调用aclrtMemcpyAsync接口,再调用aclrtSynchronizeStream接口实现Stream内任务的同步等待。

对于Host内的数据传输、Device内的数据传输、Host与Device之间的数据传输,可以调用内存复制的接口实现,也可以直接通过指针传递数据。

2.内存管理具体样例

 

四、模型管理

1.模型加载

具体流程:

2.模型卸载

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

五、模型输入输出准备

1.数据类型

AscendCL提供了相应的数据类型来描述模型、模型输入、模型输出以及存放数据的内存,在模型执行前,需要构造好这些数据类型,作为模型执行的输入:

(1)使用aclmdlDesc类型的数据描述模型基本信息(例如输入/输出的个数、名称、数据类型、Format、维度信息等)。

模型加载成功后,用户可根据模型的ID,调用aclmdlGetDesc接口获取该模型的描述信息,进而从模型的描述信息中获取模型输入/输出的个数、内存大小、维度信息、Format、数据类型等信息,可参见aclmdlDesc类型下的操作接口。

(2)使用aclmdlDataset类型的数据描述模型的输入/输出数据,模型可能存在多个输入、多个输出。

调用aclmdlDataset类型下的操作接口添加aclDataBuffer类型的数据、获取aclDataBuffer的个数等。

(3)每个输入/输出的内存地址、内存大小用aclDataBuffer类型的数据来描述。

调用aclDataBuffer类型下的操作接口获取内存地址、内存大小等。

2.调用接口

六、模型推理

准备好模型执行所需的输入、输出数据类型后,存放好模型执行的输入数据后,可以执行模型推理了。当前AscendCl支持同步模型执行、异步模型执行两种方式,这里说的同步、异步是站在调用者和执行者的角度。

若调用模型执行的接口后需等待推理完成再返回,则表示同步的。当用户调用同步模型执行接口后,可直接从该接口的输出参数中获取模型执行的结果数据,接口调用逻辑简单;若调用模型执行的接口后不等待推理完成完成再返回,则表示异步的。异步模型执行时,AscendCL提供了Callback机制,在指定时间内一旦有推理的结果数据,就触发回调函数获取推理结果,提高处理效率。

 

具有流程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值