8.星空加速卡X3教程--Benchmark测试(win)



  • 星空加速卡X3教程03--Benchmark测试(win)

    通过本教程,用户能够了解或掌握:

    1. 利用星空加速卡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.1.png

    2.2、 uc-cr-example

    2.2.1、 编译测试工程

    uc-cr-example/cr-example路径下,请按照如下步骤进行编译。

    1. 在Visual Studio中打开cr-example文件夹。
    2. 修改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。

      234.png

    • 在点击“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/


登录后回复