ResNet50 模型部署手册

概述

ResNet50 是一种非常强大的深度学习模型,主要用于图像处理领域。其通过独特的残差学习和深度结构,有效地提高了模型的准确率和性能。本文我们会演示如何使用 SOLA Runtime API 来开发一个简单的图片分类应用。

模型基本信息

  • 输入: RGB 图片, 分辨率处理为 224(h)x224(w)

  • 输出: 图片分类标签

  • batch size: 4

  • data type: int8

本示例参照 MLPerf Offline 模式运行,一次性加载所有图片,再进行分批推理。

MLPref Offline ResNet50 输入输出数据如下:

  • 总图片数量: 50000

  • 输入 query: [ 50000, 224, 224, 3 ] dtype=uint8, 以二进制格式保存

  • 输出 query: [ 50000, 1024 ] dtype=int64, 以二进制格式保存

前提条件

请参见《SOLA Runtime 示例程序》完成基础环境配置。

使用流程

部署模型分为以下四个步骤:

说明: 我们为以下每个步骤都提供了对应的脚本,您可以直接使用。

  1. 下载模型和数据集:prepare.sh

  2. 编译模型:build.sh

  3. 运行模型:run.sh

  4. 验证运行结果:verify.sh

你也可以参考以下步骤手动部署模型。

使用示例

  1. 执行以下命令,进入模型文件夹后下载模型和数据集,并自动对下载好的模型和数据集进行预处理。

    $ cd resnet50
    $ ./prepare.sh
    

    如果脚本执行失败,您也可以通过以下链接手动下载模型和数据集,并解压:

    $ wget https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/sola-demo/resnet50/resnet50_demo.tar.gz
    $ tar -zxvf resnet50_demo.tar.gz   
    

    并手动执行预处理命令。

    $ python -s scripts/gen.py --image_dir data/resnet50_demo/ILSVRC2012_img_val --val_map_path data/resnet50_demo/ILSVRC2012_validation_ground_truth_caffe.txt --cache_dir data/resnet50_demo/ --duplicate 1
    
  2. 编译部署代码。

    $./build.sh
    
  3. 运行模型。

    # 默认只执行device 0
    $./run.sh
    

    或者按照以下指令运行:

    usage: ./build/resnet50 --module=string --inputs=string --labels=string [options] ... 
    options:
      -m, --module         module file path (string)
      -i, --inputs         input file path (string)
      -o, --labels         label file path (string)
      -d, --devices        select devices (string [=all])
      -f, --format         running mode: broadcast / split (string [=broadcast])
      -c, --count          count of duplication (int [=1])
      -b, --batch          run batch size (int [=4])
      -v, --verify_path    save verification result json path (string [=])
      -?, --help           print this message
    

    其中-d可以指定运行设备(使用,分割),-f指定运行模式(broadcast/split),-c指定运行次数,-b 指定需要运行的 batch size(4 的倍数),如:

    # 在 device 0 上按照 batch size 4 进行推理
    ./build/resnet50 -m data/resnet50_demo/MLPerf_Compiler_RN50_V1.0.1.5.bin -i data/resnet50_demo/input_224_uint8_NHWC -o data/resnet50_demo/labels_224_uint8_NHWC -d 0 -f broadcast -c 1 -b 4 -v data/verification.json
    # 在 device 0 上按照 batch size 32 进行推理
    ./build/resnet50 -m data/resnet50_demo/MLPerf_Compiler_RN50_V1.0.1.5.bin -i data/resnet50_demo/input_224_uint8_NHWC -o data/resnet50_demo/labels_224_uint8_NHWC -d 0 -f broadcast -c 1 -b 32 -v data/verification.json
    # 在 device 0,1,2 上按照 batch size 4 进行推理
    ./build/resnet50 -m data/resnet50_demo/MLPerf_Compiler_RN50_V1.0.1.5.bin -i data/resnet50_demo/input_224_uint8_NHWC -o data/resnet50_demo/labels_224_uint8_NHWC -d 0,1,2 -f broadcast -c 1 -b 4 -v data/verification.json
    
  4. 验证模型运行结果。

    $./verify.sh
    

测试结果参考

以下为单 device 的测试结果参考:

model data type batch size accuracy performance
ResNet50 int8 4 76.43% 26501 FPS
ResNet50 int8 16 76.43% 25983 FPS
ResNet50 int8 32 76.43% 26115 FPS
ResNet50 int8 64 76.43% 26132 FPS
ResNet50 int8 128 76.43% 24883 FPS
ResNet50 int8 256 76.43% 24138 FPS
ResNet50 int8 256 76.43% 24138 FPS
ResNet50 int8 256 76.4280% 24138 FPS

更多信息

更多关于 Resnet50 模型的介绍,请参见 Deep Residual Learning for Image Recognition