🐻‍❄️实战:解析onnx模型保存为engine文件|from scratch

模型转换流程

模型转换是一个繁琐而重要的过程,它将第三方框架中的模型(例如 ONNX 格式)转换为可在 NVIDIA 设备上运行的模型,被称为引擎(Engine)。这个过程需要在代码中实例化多个对象,并按照一定顺序逐步配置参数。虽然繁琐,但每一步都至关重要。以下是关键步骤的摘要,如果你有兴趣,可以逐步手动实现这些步骤。

  1. 通过创建一个 Builder 对象来配置和构建 Config 和 Network。

  2. 接着,创建一个 Parser 对象,使用它来解析 ONNX 模型,并将模型的参数和权重信息复制到 Network 中。

  3. 接下来,使用 Builder 的 buildSerializedNetwork 方法,传入 Network 和 Config 对象,生成一个序列化的 Execution Plan。

  4. 最后,将这个 Execution Plan 序列化,并保存到文件中。

实战代码

整个代码目录如下:

├── config
│   └── Makefile.config
├── Makefile
├── models
│   ├── engine
│   │   └── sample.engine
│   └── onnx
│       └── sample.onnx
└── src
    ├── cpp
    │   ├── main.cpp
    │   ├── model.cpp
    │   ├── model.hpp
    │   ├── utils.cpp
    │   └── utils.hpp
    └── python
        └── generate_onnx.py

Makefile.config

main.cpp

model.cpp

model.hpp

utils.cpp

utils.hpp

generate_onnx.py

Makefile

Last updated

Was this helpful?