😁😁官方文档onnx序列化教程与推理教程
一、构建TensorRT序列化模型
本博客主要说明的是TensorRT C++ API,从我们获取到onnx模型开始的流程。C++ API可以通过引用头文NvInfer.h
来进行访问(使用其命名空间nvinfer1
),代码示例:
#include "NvInfer.h"
using namespace nvinfer1;
需要说明的是,TensorRT C++的接口类都以I
为前缀开头,例如ILogger
,IBuilder
,等等。如果在此之前不存在,则TensorRT第一次调用CUDA时会自动创建CUDA上下文。在第一次调用TensorRT之前,最好自己创建和配置CUDA上下文。
并且由于需要展示各对象的存在周期,实例代码中没有使用智能指针,但是建议在实际使用中加上智能指针来配合TensorRT接口。
二、搭建阶段(三步走)
要创建构建器,首先必须实例化ILogger接口。这个例子捕获所有警告消息,但忽略信息性消息:
inline const char* severity_string(nvinfer1::ILogger::Severity t) {
switch (t) {
case nvinfer1::ILogger::Severity::kINTERNAL_ERROR: return "internal_error";
case nvinfer1::ILogger::Severity::kERROR: return "error";
case nvinfer1::ILogger::Severity::kWARNING: return "warning";
case nvinfer1::ILogger::Severity::kINFO: return "info";
case nvinfer1::ILogger::Severity::kVERBOSE: return "verbose";
default: return "unknow";
}
}
class My_Logger : public nvinfer1::ILogger
{
public:
virtual void log(Severity severity, const char* msg) noexcept override
{
// suppress info-level messages
// 捕获所有警告类消息并输出
if (severity <= Severity::kWARNING)
//