MgeConvert 是适用于 MegEngine 模型的转换器, 可将MegEngine导出的 mge静态图模型 或 TracedModule模型 转换为第三方模型文件。
目前支持转换的第三方框架有 Caffe 、 ONNX 和 TFLite ,支持的模型包括 ResNet、ResNext、ShuffleNet 等,如果需要适配其他模型, 可能需要添加更多的算子支持。
目前,MgeConvert 亦支持将 ONNX 模型转换到 mge/TracedModule 模型。
MgeConvert转换器的结构包含前端、中间表示(IR)、后端三个部分:
frontend
目录下, 支持 mge 和 traced module 模型格式,可以将 MegEngine 序列化出来的计算图转为IR图结构
converter_ir
目录下,包含图和 IR 算子定义、对计算图做变换的 transform rules 以及对量化模型处理的量化器
backend
目录下,包含caffe、onnx、tflite的转换器,可以将IR图结构转换为第三方框架的模型文件
如果安装过0.5.0及之前版本的mgeconvert,重新安装前请先使用sudo权限卸载旧版本:
sudo pip3 uninstall mgeconvert
mgeconvert v1.0.0 开始支持源码包安装:
pip3 install mgeconvert --user --install-option="--targets=caffe"
--targets
的可选值有 caffe、onnx、tflite 和 all。
all
代表安装全部转换器。可选值支持组合传入,比如
--targets=caffe,tflite
。
tflite
转换器的schema默认使用r2.3版本,支持使用参数
tfversion
选择tflite schema的版本, 比如
--install-option="--targets=tflite --tfversion=r2.4"
安装选项说明同上,以 caffe 为例,下面的命令将安装0.5.0版本的caffe转换器:
git clone https://github.com/MegEngine/[email protected]
cd mgeconvert
pip3 install . --user --install-option="--targets=caffe"
TracedModule
模型,请安装0.5.0及以上版本
转换器按输入模型格式主要分为两种:
mge_to
命名
tracedmodule_to
命名
执行脚本位于
~/.local/bin
文件夹内,使用前需要将此路径加入到环境变量
PATH
中。
命令行支持命令补全,执行
convert --init
即可使用。
查询支持的转换框架,结果取决于安装时的
--install-option
:
convert -h
以 mge模型转 caffe 为例,查询转换参数:
convert mge_to_caffe -h
convert mge_to_caffe -i model.mge -c out.prototxt -b out.caffemodel
convert tracedmodule_to_caffe -i model.tm -c out.prototxt -b out.caffemodel
mgeconvert 支持将 QAT TracedModule 模型转换到caffe:
quantize_file_path
指定量化参数文件路径:
convert tracedmodule_to_caffe -i qat_model.tm -c out.prototxt -b out.caffemodel --quantize_file_path quant_params.json
param_fake_quant
参数可选择对模型参数进行假量化:
convert tracedmodule_to_caffe -i qat_model.tm -c out.prototxt -b out.caffemodel --quantize_file_path quant_params.json --param_fake_quant
--input_data_type --input_scales --input_zero_points
在转换时指定输入数据的量化类型、scale和zero_point量化参数,如果有多个scale、zero point用逗号隔开 :
convert tracedmodule_to_caffe -i qat_model.tm -c out.prototxt -b out.caffemodel --quantize_file_path quant_params.json --input_data_type quint8 --input_scales 0.125 --input_zero_points 128
TFlite转换器支持 float32 和量化的 TracedModule 转换。
转换float模型的命令参考:
convert mge_to_tflite -i model.mge -o out.tflite
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite
require_quantize
选项,转换出tflite支持的量化数据类型(int8/uint8/int16/int32)量化后的Quantized 模型:
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --require_quantize
也可不设置
--require_quantize
选项,转换出float32模型和量化参数文件。
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --quantize_file_path quant_params.json
--param_fake_quant
参数来选择是否对参数进行假量化。
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --quantize_file_path quant_params.json --param_fake_quant
--input_data_type --input_scales --input_zero_points
在转换时指定输入数据的量化类型、scale和zero_point量化参数,如果有多个scale、zero point用逗号隔开:
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --input_data_type quint8 --input_scales 0.125,0.125 --input_zero_points 128,128 --require_quantize
mgeconvert 转 onnx 模型支持 opset 7~12 的转换。 onnx 转 mge/TracedModule 对各时期的 opset 变更均进行了适配,理论上没有 opset 的限制。
目前只支持float模型的互转,转换命令参考:
convert mge_to_onnx -i model.mge -o out.onnx
convert tracedmodule_to_onnx -i tracedmodule.tm -o out.onnx
convert onnx_to_mge -i model.onnx -o out.mge
convert onnx_to_tracedmodule -i tracedmodule.onnx -o out.tm
可参考 wiki 中的例子。
error removing /home/user/.local/lib/python3.6/site-packages/mgeconvert-0.5.0-py3.6.egg-info:
[Errno 13] Permission denied: '/home/user/.local/lib/python3.6/site-packages/mgeconvert-0.5.0-py3.6.egg-info/PKG-INFO'
这是使用sudo安装过旧版本出现的权限问题,先卸载旧版本再安装:
sudo pip3 uninstall mgeconvert
使用tflite
转换器时fbconverter.so
出现 undefined symbol
错误:
ImportError: /home//lib/python3.6/site-packages/mgeconvert/backend/ir_to_tflite/pyflexbuffers/fbconverter.so: undefined symbol: _ZN11flatbuffers13ClassicLocale9instance_E
这是链接的libflatbuffers.so
版本和依赖版本不一致导致的问题,执行以下命令使用mgeconvert
编译的libflatbuffers.so
:
export LD_LIBRARY_PATH=$MGECONVERT_PATH/backend/ir_to_tflite/pyflexbuffers/lib:$LD_LIBRARY_PATH
tracedmodule:rocket:
mgo:fire:
TFLite
Caffe