onnx 转 trt 并使用trt模型推理

本文记录了如何将ONNX模型转换为TensorRT(TRT)模型,并使用TRT模型进行推理。在转换过程中,提到了使用`trtexec`命令行工具以及TensorRT官方提供的Python API。在测试TRT模型时,遇到了一个因多余代码导致内存占用增加的有趣bug,原因是引入torch后在创建TRT运行时进行了不必要的内存预分配,注释掉这部分代码即可解决此问题。
摘要由CSDN通过智能技术生成

命令:

/usr/src/tensorrt/bin/trtexec --onnx=input.onnx --saveEngine=out.engine --fp16 --workspace=1024

参数含义:
/usr/src/tensorrt/bin/trtexec: 你的tensorrt的地址
–onnx: 需要转换的onnx模型路径
–saveEngine: 保存的模型地址名称
–fp16: 保存出的模型的精度
–workspace: 运行空间大小(貌似没卵用)

参考nVidia tensorrt 官网

当然 官网上也给了使用代码转换的案例包括c++和python
网址:https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#python_topics

但是
官方的案例并米有跑通,但是我从另一个博客里粘的代码调整了下,可以跑了,这里粘出来(不过还是推荐使用trtexec的方法。)

import tensorrt as trt


# TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
# builder = trt.Builder(TRT_LOGGER)

# EXPLICIT_BATCH = []
# network = builder.create_network(*EXPLICIT_BATCH)# = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
# config = builder.create_builder_config()
# parser = trt.OnnxParser(network, TRT_LOGGER)

# config.max_workspace_size = 1 << 30
# # Load the Onnx model and parse it in order to populate the TensorRT network.
# with open("det.onnx", 'rb') as model:
#     if not parser.parse(model.read()):
#         print ('ERROR: Failed to parse the ONNX file.')
#         for error in range(parser.num_errors):
#             print (parser.get_error(error))

# builder.build_engine(network, config)

import os
onnx_file_path = "det.onnx"
engine_file_path = 'det.engine'
def buildtrt():
    explicit_batch = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)
    # In TensorRT 7.0, the ONNX parser only supports full-dimensions mode, meaning that your network definition must be created with the explicitBatch flag set. For more information, see Working With Dynamic Shapes.
    TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
    with trt.Builder(TRT_LOGGER) as builder, \
        builder.create_network(explicit_batch) as network,  \
        trt.OnnxParser(network, TRT_LOGGER) as parser: 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值