DevCloud - AI模型性能评估

openlab_4276841a 更新于 1年前

1. 概述介绍

便捷的AI 模型的推理性能评估是Intel® DevCloud重要的特性,开发者在产品化的道路上也都会碰到性能评估问题,所以我们有必要单独梳理一下此功能。

2. Benchmark APP介绍

2.1 Benchmark APP

Benchmark App是Intel® OpenVINO预置的众多工具的其中一个,[FL1] [YC2] [YC3] 可以完成对模型在设备端吞吐模式和延迟模式的基准测试。如果您使用过Intel® OpenVINO工具,大概率会接触过这个工具。考虑到兼容大部分AI模型,它在前处理和后处理实现上尽量简化,只关注推理性能测定,方便快捷是这个工具的特点。Benchmark App运行在Intel® DevCloud边缘端时,会独占边缘设备,因此可以获得真实准确的数据。

2.2 Benchmark APP命令格式

Benchmark App启动时根据设定的相关参数加载模型输入,读取模型文件,加载推理引擎,加载模型文件,启动推理任务。Benchmark App 可以在裸机环境和容器化环境中快速部署。

我们在这里简单介绍一下Benchmark App的相关参数:

usage: benchmark_app.py [-h] [-i PATH_TO_INPUT] -m PATH_TO_MODEL

[-d TARGET_DEVICE]

[-l PATH_TO_EXTENSION] [-c PATH_TO_CLDNN_CONFIG]

[-api {sync,async}] [-niter NUMBER_ITERATIONS]

[-b BATCH_SIZE]

[-stream_output [STREAM_OUTPUT]] [-t TIME]

[-progress [PROGRESS]] [-nstreams NUMBER_STREAMS]

[-nthreads NUMBER_THREADS] [-pin {YES,NO}]

[--exec_graph_path EXEC_GRAPH_PATH]

[-pc [PERF_COUNTS]]

-i PATH_TO_INPUT, --path_to_input PATH_TO_INPUT
选项,包含图像和/或二进制文件的文件夹的路径,或特定的图像或二进制文件;如果不指定input参数,将使用随机值作为输入。 注意:随机值输入对于算力与输入相关的模型是不适用的

图2-1 输入使用随机值作

-m PATH_TO_MODEL, --path_to_model PATH_TO_MODEL
必须项,包含经过训练的.xml或者.onnx或者.prototxt文件的路径,也可以是训练好的.blob格式编译模型的路径。
-d TARGET_DEVICE, --target_device TARGET_DEVICE
可选项,应用程序为指定的设备寻找合适的插件。
以是: CPU, GPU, FPGA, HDDL or MYRIAD ,默认是CPU
用"-d HETERO:<comma separated devices list>" 格式,指定HETERO插件。
用"-d MULTI:<comma separated devices list>" 格式,指定多插件。
-api {sync,async}, --api_type {sync,async}
可选项,用来指明两种推理模式sync或者async API. 默认是 async.,
-niter NUMBER_ITERATIONS, --number_iterations NUMBER_ITERATIONS
可选项, 指明迭代次数。未指定时,则根据设备计算迭代次数。
-stream_output [STREAM_OUTPUT]
可选项, 以纯文本打印进度。当指定时,以交互式进度条多行输出。
-progress [PROGRESS]
可选项,显示进度条;默认false.


3. Benchmark 裸机实例演示

Benchmark App 路径:登录后在Learn页面,选择Tutorials ,选择Benchmark App,打开BenchmarkApp_python.ipynb文件,点击工具栏的Run-> Run Selected Cells,等待应用程序运行结束即可。此时运行的代码和模型都是预置好的,开发者可以基于此来上传自己的模型,简单修改路径,就可以测试自己的模型了。注意:如果运行时出现报错,可以尝试切换kernel.

3.1 模型准备

Step1.设置环境变量,导入并安装依赖包

Step2.下载推理模型, 本例使用resnet-50 Tensorflow* 模型实现进行推理

! downloader.py --name resnet-50-tf -o models

Step3.使用FP16量化转换模型

!mo.py \

--input_model models/public/resnet-50-tf/resnet_v1-50.pb \

--input_shape=[1,224,224,3] \

--mean_values=[123.68,116.78,103.94] \

-o models/FP16 \

--data_type FP16

也可将其转化为FP32的,主要是将上述命令换成--data_type FP32即可。

3.2 提交任务到边缘节点

将任务提交到边缘节点前,需要有一个任务脚本来告诉边缘节点怎么执行这个应程序。这个任务脚本很重要,但大可不必在这个位置花费太多时间。因为它的主要功能就是设定好执行步骤,把参数传递给应用程序。它很重要,但不是重点。

· benchmark_app_job.sh
它是提交到边缘端运行的bash脚本,其主要内容是定义变量,通过该文件调用benchmark_app.py,应用程序源码就位于当前目录,可以直接查看。

%%writefile benchmark_app_job.sh



# The default path for the job is your home directory, so we change directory to where the files are.

cd $PBS_O_WORKDIR

JOB_ID=`basename ${0} | cut -f1 -d"."`

OUTPUT_FILE=$1

DEVICE=$2

API=$3

echo VENV_PATH=$VENV_PATH

echo OPENVINO_RUNTIME=$OPENVINO_RUNTIME

# Follow this order of setting up environment for openVINO 2022.1.0.553

echo "Activating a Python virtual environment from ${VENV_PATH}..."

source ${VENV_PATH}/bin/activate

echo "Activating OpenVINO variables from ${OPENVINO_RUNTIME}..."

source ${OPENVINO_RUNTIME}/setupvars.sh



# Benchmark Application script writes output to a file inside a directory. We make sure that this directory exists.

# The output directory is the first argument of the bash script

mkdir -p $OUTPUT_FILE

SAMPLEPATH=$PBS_O_WORKDIR



mkdir -p ${OUTPUT_FILE}

rm -f ${OUTPUT_FILE}/*

FP_MODEL="FP16"

# Running the benchmark application code

python3 benchmark_app.py -m ${SAMPLEPATH}/models/${FP_MODEL}/resnet_v1-50.xml \

-d $DEVICE \

-niter 10 \

-api $API \

--report_type detailed_counters \

--report_folder ${SAMPLEPATH}/${OUTPUT_FILE}


· 提交任务到设备
有了作业脚本,我们就可以把任务提交到设备。提交到单设备:



图3-1提交任务

3.3 绘制结果

直接点击Pilot Results,就可以自动生成不同设备上的性能分析竖状图,非常方便进行对比分析。



图3-2查看结果

1、Benchmark输出文件
· 在results/的相关文件夹下有类似benchmark_report.csv的文件,可查看Benchmark的配置和运行结果。


图3-3 Benchmark 结果输出

· 当前工作目录下的benchmark_app_job.sh.o123944标准输出文件中, 记录了Benchmark运行的详细输出log。


图3-4 Benchmark 输出日志

4. Benchmark容器化实例演示

前面我们通过Jupyter Lab运行了Benchmark裸机实例,在Container Playground环境中也提供了Benchmark 基准测试方法,使用相同的测试程序,仅仅是在部署方式上的差异,当然在系统层面为了支持容器化部署,也做相关的调整,但对性能的影响是有限的。

对于Benchmark 容器具体信息,可以参考实例详情页面,也可以点击”View / Edit Code” 去查看源码。通过详情页面我们可以了解到,容器内部署了Intel® Distribution of OpenVINO™ Toolkit - Version 2021.4.2版本,Benchmarking (Python) 程序加载Resnet-50-tf FP16精度模型,并执行了模型推理。



图4-1 Benchmark 容器详情

Container Playground中的Benchmark运行步骤如下:

Step1.进入方式:
登录后,点击Launch页面,在Container Playground下选择Get Started / Marketplace,即可找到Benchmark Sample。

Step2.启动应用:
在Marketplace页面找到Benchmark后,点击下面Launch,进入container配置页面,点击右下角Launch。
选择目标平台,再点击右下角Launch,便可启动项目.

Step3.监视状态:
项目启动后,回到 Dashboard页面,我们可以看到benchmark-sample的运行状态变化:Queue->Deploy->Running->Completed。

tep4.查看结果:
项目运行结束后, 点击Output按钮,在output_benchmark_app_latest/results/FP16下,可查看到相应的输出结果。



图4-2 Benchmark 输出文件

其中benchmark_report.csv具体内容如下:



图4-3 benchmark_report 输出文件

5. 总结

耐心看完這篇文章,相信您完全可以自行运行Intel Developer Cloud for the Edge 平台上的基准测试程序了,不过变化总是一直存在的,如果您在执行过程中碰到问题,也可以把相关信息反馈给我哦,期待和你一起进步。

0个评论