下载
中文
注册

样例介绍

获取样例

单击异步推理获取样例。

功能描述

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

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

主要接口

主要接口如下表所示。

Device表示板端环境上的NPU(Neural-Network Processing Unit),SoC场景下,当前只有一个Device。

初始化

  • 调用acl.init接口初始化pyACL配置。
  • 调用acl.finalize接口实现pyACL去初始化。

Device管理

  • 调用acl.rt.set_device接口指定用于运算的Device。
  • 调用acl.rt.get_run_mode接口获取软件栈的运行模式,根据运行模式的不同,内部处理流程不同。
  • 调用acl.rt.reset_device接口复位当前运算的Device,回收Device上的资源。

Stream管理

  • 调用acl.rt.create_stream接口创建Stream。
  • 调用acl.rt.destroy_stream接口销毁Stream。

内存管理

  • 调用acl.rt.malloc_host接口申请Host上内存。
  • 调用acl.rt.free_host释放Host上的内存。
  • 调用acl.rt.malloc接口申请Device上的内存。
  • 调用acl.rt.free接口释放Device上的内存。

数据传输

如果在Host上运行应用,则需调用acl.rt.memcpy接口:

  • 将数据从Host传输到Device上,作为解码的输入数据。
  • 模型推理结束后,将推理结果从Device传输到Host。

如果在板端环境上运行应用,则无需进行数据传输。

模型推理

  • 调用acl.mdl.load_from_file_with_mem接口从*.om文件加载模型。
  • 创建新线程(例如t1),在线程函数内调用acl.rt.process_report接口,等待指定时间后,触发回调函数(例如CallBackFunc,用于处理模型推理结果)。
  • 调用acl.rt.subscribe_report接口,指定处理Stream上回调函数(CallBackFunc)的线程(t1)。
  • 调用acl.mdl.execute_async接口执行模型推理,异步接口。
  • 调用acl.rt.launch_callback接口,在Stream的任务队列中增加一个需要在Host/Device上执行的回调函数(CallBackFunc)。
  • 调用acl.rt.synchronize_stream接口,阻塞应用程序运行,直到指定Stream中的所有任务都完成。
  • 调用acl.rt.unsubscribe_report接口,取消线程注册,Stream上的回调函数(CallBackFunc)不再由指定线程(t1)处理。
  • 模型推理结束后,调用acl.mdl.unload接口卸载模型。

数据后处理

提供样例代码,处理模型推理的结果,直接在终端上显示top1置信度的类别编号。

目录结构

目录结构如下所示。

resnet50_async_imagenet_classification
├──scripts
│ ├── host_version.conf //版本号配置文件。
│ └── testcase_300.sh //运行脚本。
├──src
│ ├── acl_net.py //运行文件。
│ └── constant.py //常量定义。
├── data
│ ├── fusion_result.json //atc转化后生成,记录融合算子信息。
│ ├── dog1_1024_683.jpg //测试图片数据。
│ └── dog2_1024_683.jpg //测试图片数据。
├── caffe_model
│ ├── resnet50.caffemodel //ResNet-50模型。
│ └── resnet50.prototxt // ResNet-50模型的网络文件。
└── model //atc转换生成后的目录。
│ └── resnet50.om //转换后的模型文件。
└── README_CN.md