龙空技术网

「模型推理」寒武纪 MLU resnet50 量化及离线推理流程

无极Panamera 142

前言:

此时大家对“net40eval”大约比较注重,姐妹们都想要学习一些“net40eval”的相关文章。那么小编同时在网络上网罗了一些关于“net40eval””的相关知识,希望朋友们能喜欢,小伙伴们快快来学习一下吧!

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

O_o>_<o_OO_o~_~o_O

  本文介绍了在寒武纪 MLU 中进行 resnet50 量化与离线推理的流程。

  本文主要介绍了 Cambricon pytorch 环境搭建、resnet50量化、resnet50 离线推理,resnet 系列是标准模型,其他模型也可参考该流程执行。

1、Cambricon Pytorch 环境配置

  这个之前写过一篇文章《【经验分享】寒武纪MLU270源码编译 pytorch-mlu - 知乎》,关于 Cambricon Pytorch 的编译与环境搭建可以参考。

  按流程搭建好 Cambricon Pytorch 环境后,确认一下环境是否正常,打开 ${PYTORCH_HOME}/build/lib(/opt/cambricon/pytorch/src/pytorch/build/lib),若编译生成了 libtorch_python.so 和 libtorch.so 等文件,则说明 Cambricon PyTorch 编译成功:

2、resnet50 量化推理2.1 模型量化

cd $HOME/pytorch/tools./quanti_model.sh

  其中 quanti_model.sh 中的内容:

python quantification_tool.py -model_name resnet50 -data_scale 1.0 -mean 0.485 0.456 0.456 -std 0.229 0.224 0.225 -resize 224 -crop 224 -used_images_num 5 -quantize_mode int8 -save_model_path /opt/cambricon/pytorch/models/int8 -save_name resnet50-19c8e357
参数说明:-model_name:模型名称;-data_scale:最大值和最小值缩放比例;-mean:量化参数均值;-std:量化参数方差;-resize:预处理中对图像大小的调整;-crop:裁剪图像大小;-used_images_num:量化时使用的图片数量;-quantize_mode:量化精度;-save_model_path:模型量化后的保存路径;-save_name:模型量化后的名称;

  来看一下终端的输出:

2.2 转离线模型

  安装 python3-tk

sudo apt install python3-tk

  执行离线模型转换:

cd $HOME/pytorch/toolspython genoff_test_resnet50.py

  其中 genoff_test_resnet5.py 中内容:

import sysimport torchimport torch.nn as nnfrom torchvision.models.resnet import resnet50net = resnet50(pretrained=False, progress=True)net.load_state_dict(torch.load('/opt/cambricon/pytorch/models/int8/resnet50-19c8e357.pth',map_location='cpu'),strict=False)net.eval().float().mlu()net.set_core_number(16)example_mlu = torch.randn(16,3,224,224,dtype=torch.float).mlu()net = torch.jit.trace(net,example_mlu, check_trace=False)net(example_mlu)net.save('/opt/cambricon/pytorch/models/resnet50_int8_offline',True)
2.3 离线推理

  执行离线推理:

cd $HOME/pytorch/tools./inference_resnet50.sh

  其中 inference_resnet50.sh 中内容:

/opt/cambricon/pytorch/src/pytorch/test/offline_examples/build/clas_offline_multicore/clas_offline_multicore -offlinemodel /opt/cambricon/pytorch/models/resnet50_int8_offline.cambricon -images file_list_for_release -labels synset_words.txt -simple_compile 2 -input_format 0
参数说明:-offlinemodel:离线模型的路径;-images:图片列表文本文件;-labels:标签文件;-simple_compile:使能简单编译功能,Cambricon Runtime 根据离线模型 core_number 和 batch_size 参数自动分配最优的软硬件资源;-input_format:指定运行网络时输入图片的通道顺序,依据该参数对输入图片进行相应的前处理。支持 RGB、RGBA 和 ARGB 三种输入图片的通道顺序。0 表示 RGB,1 表示 RGBA,2 表示 ARGB;

  最终的推理结果输出如下:

  以上分享了一下 寒武纪 MLU 上前端为 Cambricon Pytorch 时的 resnet50 int8 量化、转离线模型及离线推理的流程,对寒武纪上其他模型的量化推理应该也有借鉴作用。

【公众号传送】

《【模型推理】寒武纪 MLU resnet50 量化及离线推理流程》

标签: #net40eval