一起做玩具网站,最专业的做网站公司哪家好,seo1短视频网页入口营销,烟台市政建设招标网站1 简介
最近在浏览 Paddle2ONNX 的 Issues 时#xff0c;我发现有用户需要让 Paddle2ONNX 支持导出的 ONNX 模型根据opset版本自适应 ONNX IR 版本#xff0c;于是我动手添加了这个功能。
能否指定 IR representation的版本 Issue #1248 PaddlePaddle/Paddle2ONNX
2 什么…1 简介
最近在浏览 Paddle2ONNX 的 Issues 时我发现有用户需要让 Paddle2ONNX 支持导出的 ONNX 模型根据opset版本自适应 ONNX IR 版本于是我动手添加了这个功能。
能否指定 IR representation的版本 · Issue #1248 · PaddlePaddle/Paddle2ONNX
2 什么是ONNX IR
ONNX (Open Neural Network Exchange) IR (Intermediate Representation) Version 的作用是定义和描述 ONNX 模型文件的结构和格式。该参数主要在以下方面发挥作用
兼容性管理模型文件解析演进管理
显然对于 Runtime 来说指定 ONNX IR 是提升程序鲁棒性的方式之一因此一般会对 ONNX IR 有所要求。
3 代码实现
由于 ONNX Opset 和 ONNX IR 是强绑定的具体关系如下表
ONNX versionIR versionOpset version ai.onnxOpset version ai.onnx.mlOpset version ai.onnx.training1.0311-1.1351-1.1.2361-1.2371-1.3381-1.4.1491-1.5.05101-1.6.06112-1.7.0712211.8.0713211.8.1713211.9.0714211.10.0815211.10.1815211.10.2815211.11.0816311.12.0817311.13.0818311.13.1818311.14.0919311.14.1919311.15.0920411.16.0102151 如果你需要更详细的介绍请前往 ONNX Versioning 在Paddle2ONNX中控制 opset 版本的是 OnnxHelper 类因此我们考虑先能够从该类中获取到当前 opset 对应的 IR 我们可以添加如下函数实现这个功能
ONNX_NAMESPACE::Version OnnxHelper::GetIRVersion() const {int ir_version 0;switch (opset_version) {case 7:case 8:ir_version 3;break;case 9:ir_version 4;break;case 10:ir_version 5;break;case 11:ir_version 6;break;case 12:case 13:case 14:ir_version 7;break;case 15:case 16:case 17:case 18:ir_version 8;break;case 19:case 20:ir_version 9;break;case 21:ir_version 10;break;default:Assert(false, Opset version must be 7-20);}return static_castONNX_NAMESPACE::Version(ir_version);
}当然也可以通过 std::map 实现这个功能 然后我们需要获取到当前 IR 版本并给 onnx 模型指定他可以在 exporter.cc 中添加如下代码:
auto ir_version _helper.GetIRVersion();
auto model std::make_sharedONNX_NAMESPACE::ModelProto();
model-set_ir_version(ir_version);4 参考资料
[ONNX][Version] Update IR Version by Zheng-Bicheng · Pull Request #1261 · PaddlePaddle/Paddle2ONNXonnx/docs/Versioning.md at main · onnx/onnx