目录
1 TPU-MLIR简介
2 开发环境搭建
2.1 下载镜像
2.2 下载SDK
2.3 创建容器
2.4 加载tpu-mlir
3 准备工作目录
4 onnx转mlir文件
5 mlir转INT8 模型
5.1 生成校准表
5.2 便以为INT8对称量化模型
参考文献:
之前是用nntc转算能科技的模型的,这次技术支持建议我使用mlir工具进行模型转换,于是看一下mlir的介绍资料和使用方法,并做一下笔记。
上图就是tpu-mlir的整体架构图,主要分两步, 一是通过 model_transform.py
将原始模型 转换成mlir文件, 二是通过 model_deploy.py
将mlir文件转换成bmodel/cvimodel。
如果要转INT8模型, 则需要调用 run_calibration.py
生成校准表, 然后传给 model_deploy.py
。
如果INT8模型不满足精度需要, 可以调用 run_qtable.py
生成量化表, 用来决定哪些层采用浮点计算, 然后传给 model_deploy.py
生成混精度模型。
docker pull sophgo/tpuc_dev:latest
官网文档上说的是用v2.2,这里直接拉取最新的镜像。
技术资料
从上面网址下载
docker run --privileged --name tpu_mlir -v $PWD:/workspace -it sophgo/tpuc_dev:latest
cd /workspace/Release_v2312-LTS/Release_v2312-LTS/tpu-mlir_20231116_054500/tpu-mlir_v1.3.140-g3180ff37-20231116
source envsetup.sh
建立 model_yolov5s
目录, 注意是与tpu-mlir同级目录; 并把模型文件和图片文件都 放入 model_yolov5s
目录中。
cd ..
mkdir model_yolov5s
cd model_yolov5s
#然后把onnx模型和图片拷贝到当前目录
mkdir workspace
cd workspace
model_transform.py \
--model_name yolov5s \
--model_def ../jishui_20231007.onnx \
--input_shapes [[1,3,640,640]] \
--mean 0.0,0.0,0.0 \
--scale 0.0039216,0.0039216,0.0039216 \
--keep_aspect_ratio \
--pixel_format rgb \
--output_names 326,378,430 \
--test_input ../calib/00a3b6b267584c2ea01ec50a84432e56.jpg \
--test_result yolov5s_top_outputs.npz \
--mlir yolov5s.mlir
--output_names 320,340,354 这里的三个具体名字通过用netron看onnx模型文件确定,
run_calibration.py yolov5s.mlir \
--dataset ../calib \
--input_num 200 \
-o yolov5s_cali_table
这里calib文件夹里面是校准图片,里面是200张图片和200个标注文件。
model_deploy.py \
--mlir yolov5s.mlir \
--quantize INT8 \
--calibration_table yolov5s_cali_table \
--chip bm1684x \
--test_input yolov5s_in_f32.npz \
--test_reference yolov5s_top_outputs.npz \
--tolerance 0.85,0.45 \
--model yolov5s_1684x_int8_sym.bmodel
TPU-MLIR快速入门手册 — TPU-MLIR 1.2 文档
https://github.com/sophgo/tpu-mlir
利用nntc工具将深度学习算法模型转成算能科技平台.bmodel模型的方法步骤_算能的镜像-CSDN博客
技术资料
TPU-MLIR敏感层搜索功能介绍 | TPUMLIR 开源工具链项目 | 通用 AI 编译器工具链项目,高效将模型编译生成 TPU 执行代码