跳到主要内容

样例介绍

样例介绍

获取样例

单击Gitee,进入Ascend samples开源仓,详细参见README中的“版本说明”下载配套版本的sample包,从“python/level2_simple_inference/1_classification/resnet50_async_imagenet_classification”目录下获取resnet50_async_imagenet_classification样例。

功能描述

该样例主要是基于Caffe ResNet-50网络(单输入、单batch)实现图片分类的功能。

将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件)。该样例中加载该om文件,对2张jpg(*.jpg)图片进行n次异步推理(n作为运行应用的参数,由用户配置,可通过“--execute_times”参数设置,默认为4次),分别得到n次推理结果后,再对推理结果进行处理,输出top5置信度的类别标识。

主要接口

主要接口如表1所示。

表1 主要接口介绍

功能

对应ACL模块

ACL 接口函数

功能说明

资源初始化

初始化

acl.init

初始化ACL配置。

Device管理

acl.rt.set_device

指定用于运算的Device。

Context管理

acl.rt.create_context

创建Context。

模型初始化

模型加载与执行

acl.mdl.load_from_file

从*.om文件加载模型到device侧。

数据类型及操作接口

acl.mdl.create_desc

创建模型描述数据类型。

数据类型及操作接口

acl.mdl.get_desc

获取模型描述数据类型。

模型推理

模型加载与执行

acl.mdl.execute_async

执行模型异步推理。

同步等待

同步等待

acl.rt.subscribe_report

指定处理Stream上回调函数的线程。

同步等待

acl.rt.unsubscribe_report

取消线程注册,Stream上的回调函数不再由指定线程处理。

同步等待

acl.rt.launch_callback

在Stream的任务队列中增加一个需要在Host/Device上执行的回调函数。

同步等待

acl.rt.process_report

等待指定时间后,触发回调处理。

数据交互

内存管理

acl.rt.memcpy

数据传输,Host->Device或Device->Host。

内存管理

acl.rt.malloc

申请Device上的内存。

内存管理

acl.rt.malloc_host

申请Host上的内存。

公共模块

--

acl.util.ptr_to_numpy

void*数据转换为numpy类型数据。

--

acl.util.numpy_to_ptr

numpy类型数据转换为void*数据。

--

acl.util.start_thread

启动一个回调函数线程。

--

acl.util.stop_thread

回收一个回调函数线程。

数据后处理

数据类型及操作接口

acl.mdl.get_dataset_buffer

获取数据集中信息。

数据类型及操作接口

acl.mdl.get_dataset_num_buffers

获取数据集中信息。

资源释放

内存管理

acl.rt.free

释放Device上的内存。

内存管理

acl.rt.free_host

释放Host上的内存。

模型加载与执行

acl.mdl.unload

卸载模型。

Context管理

acl.rt.destroy_context

销毁Context。

Device管理

acl.rt.reset_device

复位当前运算的Device,回收Device上的资源。

去初始化

acl.finalize

实现ACL去初始化。

模型异步推理流程图

模型异步推理流程图如图1所示。

图1 模型异步推理流程图

目录结构

目录结构如下所示。

resnet50_async_imagenet_classification
├──src
│ ├── acl_net.py //运行文件。
│ └── constant.py //常量定义。
├── data
│ ├── dog1_1024_683.jpg //测试图片数据。
│ └── dog2_1024_683.jpg //测试图片数据。
├── caffe_model
│ ├── resnet50.caffemodel //ResNet-50模型。
│ └── resnet50.prototxt // ResNet-50模型的网络文件。
└── model
└── resnet50.om //转换后的模型文件。

父主题: 基于Caffe ResNet-50网络实现图片分类(异步推理)

样例介绍

获取样例

单击Gitee,进入Ascend samples开源仓,详细参见README中的“版本说明”下载配套版本的sample包,从“python/level2_simple_inference/0_data_process/venc_image”目录下获取venc_image样例。

功能描述

该样例将一张YUV420SP NV12格式的图片连续编码n次,生成一个H265格式的视频码流(n可配,通过运行应用时设置入参来配置,由代码中的“venc_cnt”参数来控制,默认为16次)。

目录结构

如下为模型文件转换后的示例目录结构,model文件夹是转换后生成的。

venc_image
├──src
│ └── acl_venc.py //视频编码实现文件
└── data
└── dvpp_venc_128x128_nv12.yuv //用户待处理的图片文件

父主题: 媒体数据处理(视频编码)

废弃接口/返回码列表

接口

返回码

父主题: pyACL API参考

函数:init

C函数原型aclError aclInit(const char *configPath)
Python函数ret = acl.init(config_path)
函数功能pyACL初始化函数,同步接口。
输入说明config_path:str,配置文件所在的路径,包含文件名。 配置文件内容为JSON格式(JSON文件内的“{”的层级最多为10,“[”的层级最多为10)。如果以下的默认配置已满足需求,无需修改,可直接调用acl.init接口不传入参数或者可将配置文件配置为空JSON串(即配置文件中只有{})。 配置文件格式为JSON格式,当前支持以下配置:
- Dump信息配置,包括3种配置:模型Dump配置、单算子Dump配置、溢出算子Dump配置。
- 模型Dump配置(用于导出模型中每一层算子输入和输出数据)、单算子Dump配置(用于导出单个算子的输入和输出数据),导出的数据用于与指定模型或算子进行比对,定位精度问题,配置示例、说明及约束请参见《精度比对工具使用指南》。默认不启用该dump配置。
- 溢出算子Dump配置(用于导出模型中溢出算子的输入和输出数据),导出的数据用于分析溢出原因,定位模型精度的问题,配置示例、说明及约束请参见配置文件示例(溢出算子Dump配置)。默认不启用该dump配置。预留功能,暂不支持。
- Profiling采集信息配置,示例、配置说明及约束请参见《性能分析工具使用指南》。默认不启用Profiling采集信息配置。
- 算子缓存信息老化配置,为节约内存和平衡调用性能,可通过“max_opqueue_num”参数配置“算子类型 - 单算子模型”映射队列的最大长度,如果长度达到最大,则会先删除长期未使用的映射信息以及缓存中的单算子模型,再加载最新的映射信息以及对应的单算子模型。如果不配置映射队列的最大长度,则默认最大长度为“20000”。示例及约束说明请参见配置文件示例(算子缓存信息老化配置)
建议不要同时配置dump信息和Profiling采集信息,否则dump操作会影响系统性能,导致Profiling采集的性能数据指标不准确。
返回值说明ret:int,错误码。
- 返回0表示成功。
- 返回其它值表示失败。
约束说明- 一个进程内只能调用一次acl.init接口。
- 使用pyACL接口开发应用时,必须先调用acl.init接口,否则可能会导致后续系统内部资源初始化出错,进而导致其它业务异常。
相关接口pyACL还提供了其它使能Dump或Profiling的接口,如下,与acl.init不同的是,以下这些接口相对灵活,可以在一个进程内调用多次接口,每次调用接口时可以基于不同的Dump配置或Profiling配置。
- 获取Dump数据,参见acl.mdl.init_dumpacl.mdl.set_dumpacl.mdl.finalize_dump
- 获取Profiling数据,参见Profiling数据采集
参考资源接口调用示例,参见pyACL初始化与去初始化

配置文件示例(溢出算子Dump配置)

溢出算子Dump配置的相关约束说明如下:

  • 将“dump_debug”配置为“on”表示开启溢出算子配置,不配置“dump_debug”或将“dump_debug”配置为“off”表示不开启溢出算子配置。

  • 若开启溢出算子配置,则“dump_path”必须配置,表示导出数据文件的存储路径。

    支持配置绝对路径或相对路径:

    • 绝对路径配置以“/”开头,例如:/home。
    • 相对路径配置直接以目录名开始,例如:output。

    获取导出的数据文件后,如何解析请参见溢出算子数据采集及分析

  • 溢出算子Dump配置,不能与模型Dump配置或单算子Dump配置同时开启,否则会返回报错。

配置文件中的示例内容如下:

{
"dump":{
"dump_path":"output",
"dump_debug":"on"
}
}

配置文件示例(算子缓存信息老化配置)

算子缓存信息老化配置的相关约束说明如下:

  • 对于静态加载的算子,调用acl.op.set_model_dir接口加载指定目录下的单算子模型或调用acl.op.load接口加载指定单算子模型时,老化配置无效,不会对该部分的算子信息做老化。
  • pyACL内部分开维护固定Shape和动态Shape算子的映射队列,最大长度都为“max_opqueue_num”参数值。
  • “max_opqueue_num”参数值为静态加载算子的单算子模型个数和在线编译算子的单算子模型个数的总和,因此“max_opqueue_num”参数值应大于当前进程中可用的、静态加载算子的单算子模型个数,否则会导致在线编译算子的信息无法老化。

配置文件中的示例内容如下:

{
"max_opqueue_num": "10000"
}

父主题: 系统配置

在线提单