引擎API的用法实践"/>
19OPENVINO intermediate course11 推理引擎API的用法实践
推理引擎API的用法实践
- 1 说明
- 2 实验目的
- 3 任务内容
- 4 实验原理
- 一、HETERO插件
- 二、MULTI插件
- 三、性能计数器
- 四、以设备为中心的查询
- 5 操作步骤
- 6 实验操作
1 说明
本实验所有代码均在ubuntu18.04 + OpenVINO 2020R3.LTS installed 环境下验证通过,若需要代码移植,请务必检查环境配置是否与本实验环境相同。
2 实验目的
1、认识HETERO插件和MULTI插件。
2、认识性能计数器和以设备为中心的查询。
3、掌握调用API来打印系统中的所有可用设备的方法。
4、掌握使用API调用性能计数器来打印性能数据的方法。
3 任务内容
1、学习HETERO插件和MULTI插件。
2、学习性能计数器和以设备为中心的查询。
3、调用API来打印系统中的所有可用设备。
4、使用API调用性能计数器来打印性能数据。
4 实验原理
一、HETERO插件
以前的实验已经介绍了如何将网络加载到特定的插件中,例如模型当前在CPU上运行,如果要在英特尔集成显卡上运行它,只需要将目标设备更改为英特尔集成显卡,也可以是其他任何支持的设备。但有时候目标设备并不支持所有的层,因此HETERO插件可以将不支持层的执行回退到其他设备。
例如此处的HETERO:FPGA,CPU 表示尝试在FPGA上运行所有层,如果找不到任何层的实施方案,可在CPU上运行相应层。
二、MULTI插件
HETERO插件支持在不同设备上运行不受支持的特定层,MULTI插件则完全不同。程序运行时将生成许多推理请求。例如,如果在视频上运行推理,每帧都具有不同的推理调用,甚至在一帧中有可能有几个推理的调用。因此,MULTI插件可以在不同的设备上运行每个推理调用,从而利用系统中的所有设备。例如这里使用MULTI:MYRIAD,CPU。
因此所有推理请求将发送到MYRIAD设备,例如Movidius神经计算棒或任何其他Movidius设备,但是当该设备被充分利用时,后续推理请求将发送到CPU,这样MYRIAD和CPU将并行执行推理,并且可以提供更好的性能。该插件支持根据设备的实时可用性来使用它们。
三、性能计数器
推理引擎Inference Engine可以报告实际的运行时性能计数器。例如下图第四行可以看到执行的特定层为Conv/Conv2D,有些层进行了融合,不需要被执行。该层类型是卷积,执行时为511微秒,使用的库单元是数据类型为avx2_FP32指令集。
四、以设备为中心的查询
推理引擎还可以感知哪些设备已连接并可以使用,还可以获取实际物理状况的实时指示。基本上IE现在可以充分感知其使用的系统,从而更好的利用系统。它不仅可以报告可用的设备,而且还可以获取每个设备的各种指标,甚至实时信息,例如当前温度。
5 操作步骤
步骤1
登录实验平台,进入实验环境并打开命令行执行终端。
步骤2
执行命令su,输入root用户密码root@openlab,切换到root目录。
步骤3
执行命令cd ~/51openlab/04/exercise-2/,进入exercise-2目录。
步骤4
执行如下命令,初始化OpenVINO环境。
# source /opt/intel/openvino/bin/setupvars.sh
步骤5
执行命令vi classifiction-1.py编辑classifiction-1.py文件,编辑代码,将系统中的可用设备进行打印输出。
说明:这里使用api文档中的IECore,查看如何获取可用设备,将devices变量定义为可用设备,并将其打印出来。
步骤6
执行命令python3 classifiction-1.py运行代码,检查结果。
可以看到屏幕上输出可用设备为[CPU,GNA],即系统中包含了一个CPU和一个声卡设备,此次推理是在CPU上运行的。
步骤7
执行命令vi classifiction-2.py编辑classifiction-2.py文件,编辑代码,以增加性能计数器performance counters,将代码添加在“your code here”。
说明:打开api文档查找inferRequest,查看性能计数器的使用帮助,参考示例代码,使用exec_net就像执行推理一样,不仅需要get performance,还需要添加推理请求的id。这里定义perf_counts变量,使用perf_counters = exec_net.requests[0].get_perf_counts()增加性能计数器,然后设置一下打印数据的排版样式,用来增强网络性能数据的可读性。
参考代码如下:
perf_counts = exec_net.requests[0].get_perf_counts()print('{:<40} {:<15} {:<25} {:<15} {:<10}'.format('name', 'layer_type', 'exet_type', 'status', 'real_time, us'))print("-----------------------------------------------------------------------")for layer, stats in perf_counts.items():print('{:<40} {:<15} {:<25} {:<15} {:<10}'.format(layer,stats['layer_type'], stats['exec_type'], stats['status'], stats['real_time']))
步骤8
执行命令python3 classifiction-2.py运行添加了计数器的代码。
可以在表格中看到每层的名称,以第一层为例,他们的类型是Convolution,使用avx2指令级的FP32执行方案,执行这一层需要1950微秒。你可以获取该神经网络所有统计信息,并找到执行时间最长的那一层,可以借此来判断这一层是否是网络的性能瓶颈。
本实验介绍了推理引擎Influence Engine的概念和插件架构,以及Python API的一些主要功能,并动手执行了推理和其他功能。基本上如果想用Influence Engine来推理一个应用,那么利用OpenVINO就能完成几乎一切需要准备的工作,本实验运行的代码以及OpenVINO软件包提供的许多其他示例和演示都可以集成到应用中。
6 实验操作
注意classifiction2的编写
更多推荐
19OPENVINO intermediate course11 推理引擎API的用法实践
发布评论