8.星空加速卡X3教程--Benchmark测试(win)
-
星空加速卡X3教程03--Benchmark测试(win)
通过本教程,用户能够了解或掌握:
- 利用星空加速卡X3进行benchmark测试
一、资料下载
星空加速卡X3相关的工程文件下载地址如下:
*X3-win ftp://cloud.corerain.com/X3-win/ *corerain-datasets ftp://cloud.corerain.com/corerain-datasets/ *corerain-models ftp://cloud.corerain.com/corerain-models/ corerain-public-tools ftp://cloud.corerain.com/corerain-public-tools/ 备注:带*标识的为工程运行必须项。 X3-win
下载连接中包含每一次的发行版文件夹,其路径结构如下。X3-win ├─ archive │ ├─ X30012345win │ │ ├─ pcie-driver.zip │ │ ├─ rainbuilder-pkg.zip │ │ ├─ device-manager.zip │ │ ├─ uc-cr-example.zip │ │ └─ uc-pyruntime.zip │ │ │ ├─ X300xxxxxwin │ └─ ... │ └─ X30023456win ├─ device-manager.zip ├─ pcie-driver.zip ├─ rainbuilder-pkg.zip ├─ uc-cr-example.zip └─ uc-pyruntime.zip
corerain-datasets
文件夹内包含应用案例所需的数据集,其工程结构如下。corerain-datasets ├─ 01-imagenet.tar ├─ 02-coco.tar ├─ 03-fddb.tar ├─ 04-cityscape.tar ├─ 05-coco2017.tar └─ 06-dagm2007class1.tar
corerain-models
文件夹内包含应用案例所需的网络模型,其工程结构如下。corerain-models ├─ caisa-models └─ reference-models
corerain-public-tools
文件夹中会包含一些公共工具,如Linux环境下docker的离线安装包和docker镜像等。用户可根据需要下载。corerain-public-tools ├─ cr-docker-cpu.tar ├─ cr-docker-gpu.tar ├─ docker_installer_19_03_5.tar └─ ...
开始测试前需要将对应的工程和数据进行解压。例如进入对应路径解压
uc-cr-example.zip
。进入
corerain-datasets
分别解压每一个数据包,当前的例子是~/workspace/corerain-datasets
cd ~/workspace/corerain-datasets tar -xvf 01-imagenet.tar tar -xvf 02-coco.tar tar -xvf 03-fddb.tar tar -xvf 04-cityscape.tar
Note:
注意:使用本教程时请注意按照教程01已经配置好
RainBuilder
安装环境二、benchmark测试
2.1、benchmark介绍
工程目录:
uc-cr-example/cr-example
该应用案例用于评估CAISA引擎性能和深度学习网络精度,涵盖网络如下表所示。
2.2、 uc-cr-example
2.2.1、 编译测试工程
在
uc-cr-example/cr-example
路径下,请按照如下步骤进行编译。- 在Visual Studio中打开
cr-example
文件夹。 - 修改
CMakeSetting.json
- 若为Visual Studio2019,将
CMakeSetting.json
编辑为如下形式(见下方代码块标记处,路径为示意路径,请用户根据自己的实际路径进行调整)
{ "configurations": [ { "name": "x64-Debug", "generator": "Ninja", "configurationType": "Debug", "inheritEnvironments": [ "msvc_x64_x64" ], "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "", "buildCommandArgs": "-v", "ctestCommandArgs": "", /***********************************************/ "cmakeToolchain":"C:/Users/corerain/workspace/rainbuilder-pkg/runtime_cpu/vcpkg-export-20190823-112009/scripts/buildsystems/vcpkg.cmake" /**********************************************/ }, { "name": "x64-Release", "generator": "Ninja", "configurationType": "Release", "inheritEnvironments": [ "msvc_x64_x64" ], "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "", "buildCommandArgs": "-v", "ctestCommandArgs": "", /**********************************************/ "cmakeToolchain": "C:/Users/corerain/workspace/rainbuilder-pkg/runtime_cpu/vcpkg-export-20190823-112009/scripts/buildsystems/vcpkg.cmake" /**********************************************/ } ] }
- 若为Visual Studio2017,将
CMakeSetting.json
文件编辑为如下形式(见下方代码块标记处,路径为示意路径,请用户根据自己的实际路径进行调整)
{ "configurations": [ { "name": "x64-Debug", "generator": "Ninja", "configurationType": "Debug", "inheritEnvironments": [ "msvc_x64_x64" ], "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "", "buildCommandArgs": "-v", "ctestCommandArgs": "", "variables": [ { "name": "CMAKE_TOOLCHAIN_FILE", /**********************************************/ "value": "C:/Users/corerain/workspace/rainbuilder-pkg/runtime_cpu/vcpkg-export-20190823-112009/scripts/buildsystems/vcpkg.cmake", /**********************************************/ "type": "STRING" }, { "name": "RBHOME", /**********************************************/ "value": "C:/ Users/corerain/workspace/rainbuilder-pkg/runtime_cpu/WinRbRuntimeCPU/x64-Release", /**********************************************/ "type": "STRING" } ] }, { "name": "x64-Release", "generator": "Ninja", "configurationType": "Release", "inheritEnvironments": [ "msvc_x64_x64" ], "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "", "buildCommandArgs": "-v", "ctestCommandArgs": "", "variables": [ { "name": "CMAKE_TOOLCHAIN_FILE", /**********************************************/ "value": "C:/Users/corerain/workspace/rainbuilder-pkg/runtime_cpu/vcpkg-export-20190823-112009/scripts/buildsystems/vcpkg.cmake ", /**********************************************/ "type": "STRING" }, { "name": "RBHOME", /**********************************************/ "value": "C:/Users/corerain/workspace/rainbuilder-pkg/runtime_cpu/WinRbRuntimeCPU/x64-Release", /**********************************************/ "type": "STRING" } ] } ] }
- 修改
CMakeList.txt
中RBHOME的路径,将其指向/rainbuilder-pkg/runtime/WinRbRuntimeCPU/x64-Release
所在的绝对路径(见下方代码块标红处,路径为示意路径,请用户根据自己的实际路径进行调整)
... else() if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_LIST_DIR}) if (WIN32) /**********************************************/ set(RBHOME "C:/ Users/corerain/X30012345win/rainbuilder-pkg/runtime/WinRbRuntimeCPU/x64-Release" CACHE STRING "RbRunttime installed directory") /**********************************************/ else() set(RBHOME "/workspace/CodeGitLabFuture/RbRuntimeNewIR" CACHE STRING "RbRunttime installed directory") endif() include_directories(${RBHOME}/include/) link_directories(${RBHOME}/lib/) endif (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_LIST_DIR}) endif(CROSSCOMPILE) ...
-
之后在Visual Studio上方菜单栏中选择
x64-Release
为CMake配置,然后Folder
View栏中右键CmakeList.txt
,在弹出的菜单中选择Generate Cache。 -
在点击“Build -> BuildAll”之后,可以在
/uc-cr-example/cr-example/out/build/x64-Release/
下生成二进制程序image_runner.exe
。
2.2.2、 运行和评估
网络的运行使用
build
路径下的image_runner
进行,运行参数如下。运行参数 参数介绍 --sg 模型的sg文件路径 --device 目标设备类型,有效值为CAISA, CPU, GPU --device_id CAISA设备ID,用于制定具体的CAISA设备,默认值为0 --images 输入图片所在的目录(必须是绝对路径) --processor 模型的预处理后处理方法,不同类别网络的输入有效值为: 分类网络:vgg(resnet和vgg一致), inception, lenet, cifar10, vgg_onnx, vgg_caffe, resnet_caffe, inception_caffe 检测网络:ssd, yolov3, ssdfpn, rfcn, frcnn, frcnn_user 分割网络:unet, labv3 --batch 用于指定输入的batch size --max_image 用于指定处理图片数量 --calc_threads 为Runner创建的计算线程数 --num_threads 为Runner创建的工作线程数 --from_file 指定输入图片是否来自文件提供的列表 --image_list 当from_file=true时,该文件包含要处理的图片文件名列表,并结合images值拼接出完整的图片文件路径 --output_folder 指定输出结果到该文件夹,仅用于分割模型 --output_image_folder 指定输出结果到该文件夹 --with_image_output 是否输出结果到源图片上 --output_image_folder 当with_image_output=true时,会把结果输出到源图片上,并保存在指定的目录 --output_file 将预测结果保存为文本文件,并保存至制定指定路径下 --threshold 用于检测模型时,表示检测框的阈值;用于分类模型时,表示输出top-k类检测结果 --async 是否异步运行模型 --ubatch_mode 当设为False时,程序会将多个Batch的图片串联成一个Tensor,默认值为True --depend 用于加载运行模型时所需的外部模块 --keys 用于获取运行模型时指定节点的输出 运行案例中提供的不同类别的网络,除了以上必要的运行参数外,还需要对应添加其他参数
运行参数 参数介绍 分类网络 --softmax 对分类预测结果是否需要做softmax运算,如果模型中输出节点已经为 Softmax则设置为false --label_to_class 包含类别名称和ID对应关系的json文件 --labels_offset 分类结果在分类信息中的偏移量,inception设置为1,其余为0 --exclude_pattern 可以提供一个字符串用于过滤掉不需要的图片,例如"_result" 检测网络 --config 处理模型的配置文件 --param 模型的预处理后处理配置参数目录,只有SSD需要指定 分割网络 无 针对已提供的网络,已预置了运行脚本在
cr-example-utils/scripts
中,方便用户运行,如下所示。corerain@fbf8e81a9346:~$ cd ~/workspace/X30012345/uc-cr-example/cr-example-utils/scripts corerain@fbf8e81a9346:~/workspace/X30012345/uc-cr-example/cr-example-utils/scripts$ ls -la total 48 drwxr-xr-x 2 corerain corerain 4096 Jan 16 13:00 . drwxr-xr-x 6 corerain corerain 4096 Jan 16 12:59 .. -rwxr-xr-- 1 corerain corerain 1640 Jan 16 12:31 run_cls_inception_v4.sh -rwxr-xr-- 1 corerain corerain 1611 Jan 16 11:55 run_cls_resnet_v1_101.sh -rwxr-xr-- 1 corerain corerain 1610 Jan 16 12:39 run_cls_resnet_v1_50.sh -rwxr-xr-- 1 corerain corerain 1604 Jan 16 11:56 run_cls_vgg_16.sh -rwxr-xr-- 1 corerain corerain 1604 Jan 16 12:06 run_cls_vgg_19.sh -rwxr-xr-- 1 corerain corerain 1852 Jan 16 12:19 run_det_kynet_ssd.sh -rwxr-xr-- 1 corerain corerain 1855 Jan 16 12:22 run_det_ssd_fpn.sh -rwxr-xr-- 1 corerain corerain 1879 Jan 16 12:29 run_det_yolov3.sh -rwxr-xr-- 1 corerain corerain 1345 Jan 16 11:31 run_seg_deeplab_v3.sh -rwxr-xr-- 1 corerain corerain 1338 Jan 16 11:32 run_seg_unet.sh
更详细的操作可通过以下指令查阅。
cd ~/workspace/X30012345/uc-cr-example/cr-example /build/image_runner --help
2.3、 uc-pyruntime
cr-example
主要提供的为RbRuntime
的C/C++接口使用样例,该工程则提供python接口的调用样例代码。python的源码放置于uc-pyruntime/\<netname\>
中。针对已提供的网络,已预置了运行脚本在
pyruntime-utils/scripts
中,方便用户运行,如下所示。corerain@0e7f9c15aa46:~/workspace/X30012345/uc-pyruntime/pyruntime-utils/scripts$ ls -la total 8 drwxrwxr-x. 2 1001 1001 72 Jun 28 10:54 . drwxrwxr-x. 3 1001 1001 21 Jun 21 08:03 .. -rwxrwxr-x. 1 1001 1001 1610 Jun 28 10:54 run_det_ssd_resnet_50.sh -rwxrwxr-x. 1 1001 1001 1172 Jun 22 06:09 run_seg_unet_industrial.sh
2.4、 运行推理
打开
Git bash
,执行以下指令cd ~/workspace/X30012345win/uc-cr-example/cr-example-utils/scripts ./run_<net type>_<net name>.sh infer
运行打印如下所示
... all layer takes 13.005700 ms all layer takes 13.041500 ms all layer takes 12.992000 ms all layer takes 13.008200 ms Done! Computing Inference Results from Output Tensor Done! Processed 5000 images Average Run time(ms): 13.9247
all layer takes 13.005700 ms
部分为BatchSize=4的情况下硬件推理的时间,作为加速引擎的实测性能指标。2.5、 评估精度
打开Git bash,执行以下指令
cd ~/workspace/X30012345/uc-cr-example/cr-example-utils/scripts ./run_<net type>_<net name>.sh eval
网络对应的
\<net type\>
和\<net name\>
如下表所示网络名称 <uc name> <net type> <net name> ResNet50 cr-example cls resnet_v1_50 ResNet101 cr-example cls resnet_v1_101 VGG16 cr-example cls vgg_16 VGG19 cr-example cls vgg_19 Inception V4 cr-example cls inception_v4 Yolo V3 cr-example det yolov3 SSD-FPN cr-example det ssd_fpn *KY-SSD cr-example det kynet_ssd *U-Net cr-example seg unet Deeplab V3 cr-example seg deeplab_v3 SSD-ResNet50 pyruntime det ssd_resnet_50 U-Net Industrial pyruntime seg unet_industrial 分类网络精度评估的打印如下所示
Top-1 Accuracy is 0.76206 Top-5 Accuracy is 0.92784
这里采用Top-1(
Top-1 Accuracy is 0.76206
)作为评价指标,例如当前显示精度为0.76206。测网络精度评估的打印如下所示
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.364 Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.894 Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.084 Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.166 Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.323 Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.404 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.270 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.422 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.427 Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.320 Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.391 Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.461
这里采用IoU=0.5(
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.894
)作为评价指标,例如当前显示精度为0.894。Note:
在运行检测网络的精度评估前,需要编译pycocotools
。在Gitbash进入到/uc-cr-example/cr-example/BenchMarkProcessors/third_party/cocoapi/PythonAPI
路径下执行如下命令即可python setup.py build_ext --inplace python setup.py build_ext install
分割网络精度评估的打印如下所示
Pixel Acc:0.9680 Mean Acc:0.9617 Mean IoU:0.9085
上表部分为三种精度标准:
Pixel Acc
为像素级别的精度,Mean Acc
为逐类(Class)的平均精度,Mean IoU
为IoU的平均精度。2.6、 评估精度损失
将CAISA运行的计算精度与原始网络的精度相减,即可得到CAISA架构的精度损失。如需原始网络可在
corerain-models/reference-models
中找到对应的参考网络。2.7、 示例
以ResNet50为例,脚本的使用方法如下。
运行推理
cd ~/workspace/X30012345/uc-cr-example/cr-example-utils/scripts ./run_cls_resnet_v1_50.sh infer
运行评估
cd ~/workspace/X30012345/uc-cr-example/cr-example-utils/scripts ./run_cls_resnet_v1_50.sh eval
Note:
关于X3加速卡和RainBuilder的详细使用请参阅《鲲云星空加速卡X3用户手册》:ftp://cloud.corerain.com/X3-docs/
关于X3加速卡Compiler模型解析的更多详细使用请参阅《RainBuilder Compiler模型解析拓展手册》:ftp://cloud.corerain.com/X3-docs/