更新时间:2021-03-18 GMT+08:00
分享

量化示例

  1. 在量化sample包amct_caffe_sample.tar.gz所在路径下执行如下解压命令,获取量化sample。
    tar -zxvf amct_caffe_sample.tar.gz
    cd sample

    其中:

    • sample/resnet50/ResNet50_sample.py:分类网络模型ResNet50量化脚本。本章节以执行分类网络量化脚本为例进行说明。
    • sample/faster_rcnn/amct_caffe_faster_rcnn_sample/faster_rcnn_sample.py:检测网络模型FasterRCNN量化脚本。详细使用说明请参见检测网络模型量化
    • sample/mnist/mnist_sample.py:LSTM_MINST量化脚本,暂不支持该sample量化。

    其余文件详细说明请参见sample包说明

  2. 执行量化。

    量化有两种方式,一是使用ResNet50_sample.py量化脚本量化,该方式需要配置多个参数;另一种是使用该脚本的封装脚本run_resnet50_with_arq.sh进行量化,该种方式配置参数较少,用户根据实际情况选择一种方式进行量化。

    • ResNet50_sample.py量化脚本量化
      1. 切换到sample/resnet50目录,执行如下命令下载ResNet-50-deploy.prototxt模型文件。
        python3.7.5 download_prototxt.py  [--caffe_dir CAFFE_DIR]

        [--caffe_dir CAFFE_DIR]参数解释请参见表1

        若提示如下信息,则说明模型文件下载成功:

        [INFO]Download 'ResNet-50-deploy.prototxt' to '${path}/amct_caffe/sample/resnet50/pre_model/ResNet-50-deploy.prototxt' success.

        用户可以根据提示信息,在sample/resnet50/pre_model路径下看到已经下载的模型。

      2. 对原始网络模型进行预测试,检测原始模型是否可以在Caffe环境中正常运行。

        量化前,需要先将原始模型和数据集在Caffe环境中执行推理过程,以避免数据集和模型不匹配、模型无法在Caffe环境中执行的问题。

        在量化脚本所在目录执行如下命令检测ResNet-50网络模型。
        python3.7.5 ResNet50_sample.py [--model_file MODEL_FILE] [--weights_file WEIGHTS_FILE] [--gpu GPU_ID] [--cpu][--iterations ITERATIONS] [--caffe_dir CAFFE_DIR] [--pre_test]
        各参数解释如表1所示。
        表1 量化脚本所用参数说明

        参数

        说明

        是否必填

        [--h]

        显示帮助信息。

        [--model_file MODEL_FILE]

        Caffe模型文件(.prototxt)路径。

        [--weights_file WEIGHTS_FILE]

        Caffe权重文件(.caffemodel)路径。

        [--gpu GPU_ID]

        指定推理时使用GPU设备ID。

        说明:

        如果指定GPU,则执行量化脚本前,需要用户先自行编译GPU版本的Caffe环境。

        [--cpu]

        推理时是否使用CPU模式。

        [--gpu GPU_ID]与[--cpu]参数不能同时使用,默认为[--cpu]。

        [--iterations ITERATIONS]

        量化后使用精度仿真模型进行推理时使用的batch数目。

        [--caffe_dir CAFFE_DIR]

        Caffe源代码路径,支持相对路径和绝对路径。

        [--pre_test]

        对量化之前的模型进行预测试,并给出推理结果,用于测试原始模型是否可以在Caffe环境中正常运行。

        [--cfg_define CFG_DEFINE]

        简易量化配置文件。该版本不支持该参数。

        使用样例如下:

        python3.7.5 ResNet50_sample.py --model_file pre_model/ResNet-50-deploy.prototxt --weights_file pre_model/ResNet-50-model.caffemodel --gpu 0 --caffe_dir caffe-master  --pre_test

        若出现如下信息,则说明原始模型在Caffe环境中运行正常。

        [AMCT][INFO]Run ResNet-50 without quantize success!
      3. 执行量化脚本,对原始网络模型进行量化。
        python3.7.5 ResNet50_sample.py --model_file pre_model/ResNet-50-deploy.prototxt --weights_file pre_model/ResNet-50-model.caffemodel --gpu 0 --caffe_dir caffe-master
        若出现如下信息则说明模型量化成功:
        [AMCT][INFO]Run ResNet-50 with quantize success!           

        使用GPU对原始网络模型进行量化时,提示GPU资源不足,报错信息如下图所示,则可以参见如下方法解决:

        1. 切换到显存更高的GPU。
        2. 使用nvidia-smi命令查看GPU资源占用情况,查看是否有其它进程占用了GPU资源,等GPU资源空闲之后再使用。
        3. 若内存足够用,切换到CPU模式运行。

    • run_resnet50_with_arq.sh量化封装脚本进行量化

      用户也可以使用sample/resnet50/scripts路径下的快速量化脚本run_resnet50_with_arq.sh,该脚本是对ResNet50_sample.py量化脚本的封装,简化配置参数,使用起来更方便,使用示例如下。

      1. 参见2.a下载模型文件,如果已经下载,则该步骤请忽略。
      2. 在sample/resnet50路径下执行如下命令:
        bash scripts/run_resnet50_with_arq.sh -c your_caffe_dir -g gpu_id

        参数解释如下:

        表2 快速量化脚本参数说明

        参数

        说明

        是否必填

        -c

        指定caffe-master路径。

        -g

        指定GPU设备ID。

        若出现如下信息则说明模型量化成功:
        [AMCT][INFO]Run ResNet-50 with quantize success!
  3. 量化成功后,界面会显示量化后精度仿真模型的推理结果。在量化后模型的同级目录下生成量化配置文件config.json、量化日志文件夹amct_log、量化结果文件results、量化中间结果文件tmp:
    • config.json:描述了如何对模型中的每一层进行量化。如果量化脚本所在目录下已经存在量化配置文件,则再次调用create_quant_config接口时,如果新生成的量化配置文件与已有的文件同名,则会覆盖已有的量化配置文件,否则生成新的量化配置文件。

      实际量化过程中,如果量化后的模型推理精度不满足要求,用户可以修改config.json文件,量化配置文件内容、修改原则以及参数解释请参见量化配置

    • amct_log:记录了工具的日志信息,包括量化过程的日志信息amct_caffe.log。
    • tmp:量化过程中产生的文件,包括中间模型文件modified_model.prototxt、modified_model.caffemodel,记录量化因子的文件scale_offset_record/record.txt。
    • results:量化结果文件,包括量化后的模型文件、权重文件以及模型量化信息文件ResNet50_quant.json(该文件名称和量化后模型名称保持统一),如下所示。
      -rw-r----- 1 amct amct      35479 Feb 11 02:24 ResNet50_deploy_model.prototxt           //量化后的可在昇腾AI处理器部署的模型文件
      -rw-r----- 1 amct amct   25847078 Feb 10 22:05 ResNet50_deploy_weights.caffemodel       //量化后的可在昇腾AI处理器部署的权重文件
      -rw-r----- 1 amct amct      40522 Feb 10 22:05 ResNet50_fake_quant_model.prototxt       //量化后的可在Caffe环境进行精度仿真模型文件  
      -rw-r----- 1 amct amct  102462370 Feb 10 22:05 ResNet50_fake_quant_weights.caffemodel   //量化后的可在Caffe环境进行精度仿真权重文件
      -rw-r----- 1 amct amct     195393 Feb 10 22:05 ResNet50_quant.json                      //量化信息文件,记录了量化模型同原始模型节点的映射关系,用于量化后模型同原始模型精度比对使用

    对该模型重新进行量化时,在量化后模型的同级目录下生成的上述结果文件将会被覆盖。

  4. (可选)如果用户需要将量化后的deploy模型,转换为适配昇腾AI处理器的离线模型,则请参见ATC工具使用指导
分享:

    相关文档

    相关产品

close