ONNX是个好东西,其全称 Open Neural Network Exchange ,是一种用于表示和交换深度学习模型的开放标准格式。由Microsoft和Facebook在2017年共同推出的一个开放标准,旨在促进不同深度学习框架之间的互操作性,并采用相同格式存储模型数据。
ONNX有诸多优势,简直让人爱不释手呀。以下简单列举几个:
- 在不同深度学习框架(如PaddlePaddle、PyTorch、TensorFlow等)之间进行模型转换和迁移,无需重新训练;
- 可以在一个框架中训练模型并在另一个框架中做推理,充分发挥不同框架的优势;
- 可以在各种硬件和软件平台上运行,包括移动设备、嵌入式设备和云服务器;
- 许多大厂参与其中,并逐渐成为表示深度学习模型的事实标准。
ONNX Runtime(ORT)是由Microsoft开发和维护的高性能开源推理引擎,旨在不同硬件平台上高效运行深度学习模型。可以看作是 ONNX 模型的官方推理引擎,同时支持 x86、ARM 架构,对所有开发者友好,支持主流的开发语言,如:Java、Python、C++、C#等。
其原理图如下:
注:重点关注橙色部分。
飞桨模型转ONNX的步骤
飞桨官方对 ONNX 提供了非常完善的支持,将其训练的模型转换为ONNX模型也是一件非常简单的事情。
Paddle2ONNX 工具支持 Linux 与 Windows 平台,但实测中发现,其对 Linux 的支持度最好,与Github上的版本保持一致,而 Windows 上的版本相对滞后(好像很久没更新了)。故建议大家在 Linux 系统上进行相关转换操作。
直接上代码,按如下操作,一定可以成功。
1、安装 Paddle2ONNX 工具
# 使用Conda 创建环境
conda create -n p2onnx python==3.10
# 切换到刚才创建的环境
conda activate p2onnx
# 安装依赖与Paddle2ONNX
pip install paddlepaddle==2.6.1 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
pip install onnxruntime
pip install paddle2onnx
验证是否安装成功
paddle2onnx --version
# 输出如下内容,表示成功
2024-08-26 16:32:50 [INFO] paddle2onnx-1.2.8 with python>=3.8, paddlepaddle>=2.0.0
2、模型转换
1)将飞桨模型解压到 model 目录下,如下图所示:
2)执行转换脚本
在 model 目录的同级目录,执行如下脚本,如图所示:
paddle2onnx --model_dir model \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file model.onnx
显示如下内容,表示转换成功,导出的 ONNX 模型在 model 同级目录
附:模型转换参数说明
参数 | 参数说明 |
---|---|
--model_dir | 配置包含 Paddle 模型的目录路径 |
--model_filename | [可选] 配置位于 --model_dir 下存储网络结构的文件名 |
--params_filename | [可选] 配置位于 --model_dir 下存储模型参数的文件名称 |
--save_file | 指定转换后的模型保存目录路径 |
--opset_version | [可选] 配置转换为 ONNX 的 OpSet 版本,目前支持 7~16 等多个版本,默认为 9 |
--enable_onnx_checker | [可选] 配置是否检查导出为 ONNX 模型的正确性, 建议打开此开关, 默认为 False |
--enable_auto_update_opset | [可选] 是否开启 opset version 自动升级功能,当低版本 opset 无法转换时,自动选择更高版本的 opset进行转换, 默认为 True |
--deploy_backend | [可选] 量化模型部署的推理引擎,支持 onnxruntime、tensorrt 或 others,当选择 others 时,所有的量化信息存储于 max_range.txt 文件中,默认为 onnxruntime |
--save_calibration_file | [可选] TensorRT 8.X版本部署量化模型需要读取的 cache 文件的保存路径,默认为 calibration.cache |
--version | [可选] 查看 paddle2onnx 版本 |
--external_filename | [可选] 当导出的 ONNX 模型大于 2G 时,需要设置 external data 的存储路径,推荐设置为:external_data |
--export_fp16_model | [可选] 是否将导出的 ONNX 的模型转换为 FP16 格式,并用 ONNXRuntime-GPU |
至此结束!
Enjoy It