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 之间的关系
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特性之运行资源管理
- 分享
- 举报
-
浏览量:1248次2023-04-12 18:41:04
-
浏览量:1635次2023-04-12 18:57:57
-
浏览量:1413次2023-04-12 18:59:36
-
浏览量:1710次2023-04-12 19:12:22
-
浏览量:2004次2020-08-07 18:54:44
-
浏览量:13880次2020-12-09 09:53:36
-
浏览量:1024次2023-07-27 10:28:36
-
浏览量:1964次2020-08-18 19:54:52
-
浏览量:1830次2020-02-12 10:33:39
-
浏览量:684次2023-09-18 16:40:57
-
浏览量:10179次2022-11-10 18:07:40
-
浏览量:1146次2019-05-27 10:29:54
-
浏览量:3749次2020-08-18 19:54:58
-
浏览量:13977次2021-08-13 16:08:47
-
浏览量:1394次2023-11-04 15:07:11
-
浏览量:4491次2020-07-31 13:45:09
-
浏览量:1611次2022-11-02 16:48:03
-
浏览量:1842次2017-12-20 22:26:26
-
浏览量:1643次2020-04-25 10:09:40
- Hi3519DV500编译UVC sample第三方库alsa-lib-1.2.7报错问题处理
- Hi3516EV200设置手动曝光时间
- 海思之黑魔法:“内存优化”,这兼容性倍爽儿!
- 海思8K助力广电网络弯道超车:为智慧家庭带来极致体验、智慧服务、规范连接
- 海思 OSD 抗锯齿、背景透明叠加水印
- SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用
- 海思芯片Hi3518跟其他系列芯片 都有什么区别
- 像章鱼一样触手可及:一个受生物学启发的模型打开了软体机器人控制的大门
- 解密华为PixLab X1打印机的智慧Wi-Fi技术
- G524-DCS-138E型开发板_开坑之旅:第一节、开发环境搭建以及SDK适配
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
四叶草~
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明