🐨实战:加载engine文件并执行推理|from scratch

推理流程

Tensor RT的推理流程表达为下图:

  1. 使用 TensorRT 进行模型推理可大致分为三个关键阶段:输入数据的预处理(preprocess)、模型推理(inference)和推理结果的后处理(postprocess)。

  2. 在模型推理阶段,通常需要将 Onnx 等格式的模型编译(build)成推理引擎(engine)。这个引擎可以被序列化(serialize)以永久保存。而序列化后的 engine 可以通过反序列化(deserialize)加载使用。

  3. 在进行正式推理之前,需要手动分配 CUDA 内存来存储输入和输出数据流。数据会以流(stream)的方式进行传输。在推理开始之前,需要将输入数据(input_data)从主机(host)转移到 CUDA 设备(device)中。推理结束后,推理结果需要从 CUDA 设备(device)转移到主机(host)内存中。

  4. 编译模型时,必须定义日志记录器(logger),并使用解析器(parser)对模型进行解析。配置(config)用于调整模型,如通过配置文件设置模型的动态输入尺寸。通过构建器(builder)可以创建序列化的引擎。

  5. 反序列化序列化后的引擎后,可以创建上下文(context)用于推理的进行。

实战代码

整个代码目录如下:

Makefile.config

main.cpp

model.cpp

如果输入有两个,则可以使用以下方法获取绑定维度:

这样可以分别获取第一个输入和第二个输入的绑定维度。

model.hpp

utils.cpp

utils.hpp

generate_onnx.py

Makefile

reference

Last updated

Was this helpful?