AscendCL快速入门——运行资源管理篇(上)

AscendCL快速入门——运行资源管理篇(上) 四叶草~ 2023-04-12 18:23:04 1931

上一篇介绍了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. 主要接口调用流程

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

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

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

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

易百纳社区



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


声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
四叶草~
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区