AscendCL快速入门——运行资源管理篇(上)-调出资源管理器运行窗口在哪

上一篇介绍了SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用

本篇将介绍AscendCL快速入门——运行资源管理篇。

一、AscendCL概述

    AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发图像分析应用的C语言API库,提供Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等API,能够实现在昇腾CANN平台上进行图像分析方法推理计算、图形图像预处理、单算子加速计算等能力。用户可以通过第三方框架调用AscendCL接口,以便使用SoC的计算能力;用户还可以使用AscendCL封装实现第三方lib库,以便提供SoC的运行管理、资源管理能力。

    在运行应用时,AscendCL调用GE执行器提供的接口实现模型和算子的加载与执行、调用运行管理器的接口实现Device管理/Context管理/Stream管理/内存管理等。

    计算资源层是SoC的硬件算力基础,主要完成图像分析工具的矩阵相关计算、完成控制算子/标量/向量等通用计算和执行控制功能、完成图像和视频数据的预处理,为图像分析计算提供了执行上的保障。

1. 基本概念

同步/异步:本文中提及的同步、异步是站在调用者和执行者的角度,在当前场景下,     若在板端环境调用接口后不等待Device执行完成再返回,则表示板端环境     的调度是异步的;若在板端环境调用接口后需等待Device执行完成再返回,     则表示板端环境的调度是同步的。进程/线程:本文中提及的进程、线程,表示板端环境上的进程、线程。Device:Device表示板端环境上的NNN(Neural-Network ProcessingUnit),提供NN  计算能力。Context:Context作为一个容器,管理了所有对象(包括Stream、Event、设备内存等)的生命周期。不同Context的Stream、不同Context的Event是完全隔离的,无法建立同步等待关系。

    Context分为两种:

    —— 默认Context:调用aclrtSetDevice接口指定用于运算的Device时,系统会自动隐式创建一个默认Context,一个Device对应一个默认Context,默认Context不能通过aclrtDestroyContext接口来释放。

    —— 显式创建的Context:推荐在进程或线程中调用aclrtCreateContext接口显式创建一个Context。

Stream:Stream用于维护一些异步操作的执行顺序,确保按照应用程序中的代码调用顺序在Device上执行。

Stream分两种:

—— 默认Stream:调用aclrtSetDevice接口指定用于运算的Device时,系统会自动隐式创建一个默认Stream,一个Device对应一个默认Stream,默认Stream不能通过aclrtDestroyStream接口来释放。

—— 显式创建的Stream:推荐在进程或线程中调用aclrtCreateStream接口显式创建一个Stream。

Event:支持调用AscendCL接口同步Stream之间的任务,包括同步板端环境与Device之间的任务、Device与Device间的任务。例如,若stream2的任务依赖stream1的任务,想保证stream1中的任务先完成,这时可创建一个Event,并将Event插入到stream1,在执行stream2的任务前,先同步等待Event完成。AAPP:AAPP用于在AACore上完成图像预处理,包括色域转换(转换图像格式)、图像归一化(减均值/乘系数)和抠图(指定抠图起始点,抠出图像分析工具需要大小的图片)等。AAPP区分为静态AAPP和动态AAPP。您只能选择静态AAPP或动态AAPP方式来处理图片,不能同时配置静态AAPP和动态AAPP两种方式。

    —— 静态AAPP:模型转换时设置AAPP模式为静态,同时设置AAPP参数,模型生成后,AAPP参数值被保存在离线模型(*.om)中,每次模型推理过程采用固定的AAPP预处理参数(无法修改)。如果使用静态AAPP方式,多Batch情况下共用同一份AAPP参数。

   —— 动态AAPP:模型转换时仅设置AAPP模式为动态,每次模型推理前,根据需求,在执行模型前设置动态AAPP参数值,然后在模型执行时可使用不同的AAPP参数。可调aclmdlAAPP数据类型下的操作接口设置动态AAPP参数值。如果使用动态AAPP方式,多Batch可使用不同的AAPP参数。

动态Batch/分辨率:在某些场景下,模型每次输入的Batch数或分辨率是不固定的,如检测出目标后再执行目标识别网络,由于目标个数不固定导致目标识别网络输入BatchSize不固定。动态Batch:用户执行推理时,其Batch数是动态可变的。动态分 辨率: 用户执行推理时,每张图片的分辨率H*W是动态可变的。动态维度:为了支持Transformer等网络在输入格式的维度不确定的场景,需要支持ND格式下任意维度的动态设置。ND表示支持任意格式,当前N<=4。通道:在RGB色彩模式下,图像通道就是指单独的红色R、绿色G、蓝色B部分。同样在HSV色系中指的是色调H,饱和度S,亮度V三个通道。

2. Device、Context、Stream 之间的关系

AscendCL快速入门——运行资源管理篇(上)-调出资源管理器运行窗口在哪

3. 线程、Context、Stream 之间的关系

一个用户线程一定会绑定一个Context,所有Device的资源使用或调度,都必须基于Context。一个线程中当前会有一个唯一的Context在用,Context中已经关联了本线程要使用的Device。可以通过aclrtSetCurrentContext进行Device的快速切换。示例代码如下,仅供参考,不可以直接拷贝编译运行。aclrtCreateContext(&ctx1,0); aclrtCreateStream(&s1); aclopExecuteV2(op1,…,s1); aclrtCreateContext(&ctx2,1); /*在当前线程中,创建ctx2后,当前线程对应的Context切换为ctx2,对应在Device 1进行后续的计算任务, 本例中将在Device 1上进行op2的执行调用 */ aclrtCreateStream(&s2); aclopExecuteV2(op2,…,s2); aclrtSetCurrentContext(ctx1); /*在当前线程中,通过Context切换,使后续计算任务在对应的Device 0上进行*/ aclopExecuteV2(op3,…,s1);一个线程中可以创建多个Stream,不同的Stream上计算任务是可以并行执行;多线程场景下,也可以每个线程创建一个Stream,线程之间的Stream在Device上相互独立,每个Stream内部的任务是按照Stream下发的顺序执行。多线程的调度依赖于运行应用的操作系统调度,多Stream在Device侧的调度,由Device上调度组件进行调度。

4. 主要接口调用流程

    应用开发中的典型功能抽象出主要的接口调用流程,例如,如果需要实现模型推理的功能,则需要先加载模型,模型推理结束后,则需要卸载模型;如果模型推理后,需要从推理结果中查找最大置信度的类别标识对图片分类,则需要数据后处理。

AscendCL初始化:调用aclInit接口实现初始化AscendCL。运行管理资源申请:依次申请运行管理资源:Device、Context、Stream。模型推理:生成模型om文件:模型推理场景下,必须要有适配SoC的离线模型,需提前构建模型。模型加载:模型推理前,需要先将对应的模型加载到系统中。模型执行:使用模型实现图片分类、目标识别等功能,目前AscendCL提供同步推理接口和异步推理接口,支持动态Batch、动态分辨率、动态AAPP等场景。(可选)数据后处理:处理模型推理的结果,此处根据用户的实际需求来处理推理结果,例如用户可以将获取到的推理结果写入文件、从推理结果中找到每张图片最大置信度的类别标识等。模型卸载:调用aclmdlUnload接口卸载模型。

4. 运行管理资源释放:所有数据处理都结束后,需要依次释放运行管理资源:Stream、Context、Device。

5. AscendCL去初始化:调用aclFinalize接口实现AscendCL去初始化。

AscendCL快速入门——运行资源管理篇(上)-调出资源管理器运行窗口在哪

下一篇将继续介绍AscendCL特性之运行资源管理

免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:AscendCL快速入门——运行资源管理篇(上)-调出资源管理器运行窗口在哪 https://www.yhzz.com.cn/a/8780.html

上一篇 2023-04-20 01:54:21
下一篇 2023-04-20 02:25:14

相关推荐

联系云恒

在线留言: 我要留言
客服热线:400-600-0310
工作时间:周一至周六,08:30-17:30,节假日休息。