tensorRT学习笔记

本文详细介绍了使用TensorRT C++API进行深度学习模型优化和推理的过程,包括模型导入(Caffe、UFF、ONNX)、网络定义、引擎构建、序列化、推理及内存管理。重点讲解了如何初始化TensorRT、创建网络、构建优化引擎以及执行推断的步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tensorRT学习笔记 C++version


1.1 初始化tensorRT的方式

有两种方式初始化TensorRT:
1、创建IBuilder对象去优化网络
2、创建IRuntime对象执行一个被优化的网络

这两种方式,你都需要先实现一个logging interface(日志接口),TensorRT会通过这个接口进行报错、警告和消息提示

class Logger : public ILogger
{
    void log(Severity severity, const char* msg) override
    {
        //不提示INFO信息,只显示警告和错误
        if (severity != Severity::kINFO)
        {
            std::cout << msg << std::endl;
        }
    }
}gLogger;

注意:你可能会创建很多的IBuilder和IRuntime,但是logger是一个单例!!!


1.2 在C++中创建一个网络定义

使用tensorRT的第一步就是从你的model中创建一个tensorRT的网络定义
可以从别的深度学习框架中进行导入,现在支持:
1、Caffe(both BVLC)
2、ONNX
3、UFF(used for tensorflow)
同样也可以使用TensorRT API直接构造模型,但是需要在网络层中使用少量API定义每一层,并且实现自己导入参数机制,来导入已经训练完毕的模型参数

在以上的方式你必须明确告诉tensorRT哪些张量是输出,因为被确定为输出的张量不会因为采取加速而被builder进行优化。

输入和输出张量都需要进行命名(使用ITensor::setName())

同时推理的时候,需要为引擎提供输入和输出的buff缓存指针

还有对于tensorRT网络定义很重要的一个方面,就是包含指向模型权重的指针,它会被builder拷贝到优化引擎里

注意:如果网络定义是从语法中创建的,解析器占用权重的内存,因此解析器在builder运行前都不能被删除


1.3 在C++使用解析器导入一个模型

使用C++解析器导入你需要遵循以下的步骤:
1、创建TensorRT的

### 关于TensorRT在Ubuntu上的学习资料 #### 1. TensorRT简介 TensorRT 是 NVIDIA 提供的一个高性能深度学习推理库,能够优化神经网络模型并将其部署到生产环境中[^1]。它通过减少计算量和内存使用来提高推理速度。 #### 2. 开发环境搭建 为了在 Ubuntu 上使用 TensorRT 进行开发,通常需要完成以下几个步骤: - 安装 CUDA 和 cuDNN:这是 TensorRT 的基础依赖项。 - 下载并安装 TensorRT 库及其相关工具。 - 配置 Python 或 C++ 环境以便调用 TensorRT API。 具体操作可以参考官方文档中的说明。 #### 3. ONNX 转 Engine 流程 当从其他框架(如 PyTorch 或 TensorFlow)转换模型至 TensorRT 时,常用的方法是先将模型导出为 ONNX 格式,再利用 TensorRT 工具链生成 engine 文件。以下是基本流程概述: 创建日志记录器实例用于捕获构建过程中的消息输出;初始化 builder 对象负责管理整个引擎创建周期;定义显存分配策略以及指定目标平台架构参数等设置均在此阶段完成[^2]。 ```python import tensorrt as trt def build_engine(onnx_file_path, logger): with trt.Builder(logger) as builder: network_flags = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) with builder.create_network(network_flags) as network,\ builder.create_builder_config() as config,\ trt.OnnxParser(network, logger) as parser: with open(onnx_file_path, 'rb') as model: if not parser.parse(model.read()): for error in range(parser.num_errors): print(parser.get_error(error)) return None config.max_workspace_size = 1 << 30 # 设置最大工作空间大小 return builder.build_serialized_network(network, config) log = trt.Logger() serialized_engine = build_engine("/path/to/model.onnx", log) with open("/path/to/engine.trt", "wb") as f: f.write(serialized_engine) ``` 上述脚本展示了如何加载 ONNX 模型并通过 TensorRT 构建序列化后的 engine 文件。 #### 4. 学习资源推荐 对于希望深入理解 TensorRT 并应用于实际项目的开发者来说,《Deep Learning Inference with TensorRT》是一份非常有价值的指南材料。此外,在线社区论坛和技术博客也提供了大量实践经验分享,比如针对特定版本更新带来的新特性和最佳实践案例分析等内容值得查阅。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值