DevCloud - AI模型性能评估

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 输出文件