「模型推理」寒武紀 MLU resnet50 量化及離線推理流程

歡迎關注我的公眾號 [極智視界],獲取我的更多筆記分享

O_o

>_<

o_O

O_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 編譯成功:

「模型推理」寒武紀 MLU resnet50 量化及離線推理流程

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:模型量化後的名稱;

來看一下終端的輸出:

「模型推理」寒武紀 MLU resnet50 量化及離線推理流程

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)

「模型推理」寒武紀 MLU resnet50 量化及離線推理流程

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 resnet50 量化及離線推理流程

以上分享了一下 寒武紀 MLU 上前端為 Cambricon Pytorch 時的 resnet50 int8 量化、轉離線模型及離線推理的流程,對寒武紀上其他模型的量化推理應該也有借鑑作用。

【公眾號傳送】

《【模型推理】寒武紀 MLU resnet50 量化及離線推理流程》