Windows环境使用TensorRT工具trtexec将ONNX转换为engine(trt)文件

当前环境

软件版本
CUDA10.2
cudnn7.6.5
TensorRT7.0.0.11

根据当前环境编译trtexec

源码在TensorRT里面,路径TensorRT-7.0.0.11\samples\trtexec

1. 使用Visual Studio打开项目

打开trtexec.sln文件

2. 给项目配置正确的头文件和静态库路径

头文件

右键解决方案属性=> C/C++ => 常规 => 附加包含目录

添加以下路径(根据自身情况调整)

D:\TensorRT-7.0.0.11\include;
D:\TensorRT-7.0.0.11\samples\common;
D:\TensorRT-7.0.0.11\samples\common\windows;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include

附加包含目录

静态库

右键解决方案属性=> 链接器 => 输入 => 附加依赖项

添加以下路径(根据自身情况调整)

D:\TensorRT-7.0.0.11\lib\*.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64\*.lib

静态库

3. 生成解决方案

文件生成路径在TensorRT-7.0.0.11\bin\trtexec.exe, 可选择添加到环境变量Path里,打开powershell就能使用trtexec命令

4. 复制需要的动态链接库到同级路径

这里怕麻烦直接把所有TensorRT的动态链接库都复制过来了,不复制就会无法运行,调试模式可以看到提示缺少了某个.dll文件,缺那个补哪个

动态链接库

测试

将之前一篇文章基于百度PaddleCV导出来的onnx模型转成TensorRT的engine文件

将onnx文件复制到同级目录下,然后输入以下指令

导出onnx文件固定了batch_size,需要添加explicitBatch参数

trtexec --onnx=pdkp.onnx --saveEngine=kp.trt --explicitBatch --fp16 --workspace=4096 --buildOnly
# 模板
.\trtexec --onnx=your_network.onnx --saveEngine=your_network.trt --explicitBatch --fp16 --workspace=4096 --buildOnly

# 生成混合精度模型,非动态输入
 .\trtexec.exe --onnx=erfnet.onnx --saveEngine=erfnet_best.trt --workspace=6144 --maxBatch=1 --batch=1 --iterations=1 --best --verbose

最后会在同级目录下生成一个kp.trt的engine文件

engine文件

资料

更多资料可以查阅以下地址

https://docs.nvidia.com/deeplearning/tensorrt/quick-start-guide/index.html#convert-onnx-engine

问题合集

问题1. CUBLAS报错

报错信息

[ltWrapper.cpp::nvinfer1::rt::CublasLtWrapper::setupHeuristic::327] Error Code 2: Internal Error (Assertion cublasStatus == CUBLAS_STATUS_SUCCESS failed. )

环境信息
  • cuda 10.2
  • cudnn 8.2
  • TensorRT 8.2.1.8
解决方案

cuda10.2有两个补丁,如果打完还是报错,就使用下面这个方法。

在转换命令添加一句–tacticSources=-cublasLt,+cublas

 .\trtexec.exe --onnx=erfnet.onnx --tacticSources=-cublasLt,+cublas  --saveEngine=erfnet_best.trt --workspace=6144 --iterations=1 --verbose
### 使用 TensorRTONNX 模型转换为 .engine 文件 为了实现这一目标,通常会利用 `trtexec` 工具来简化从 ONNXTensorRT 引擎文件(.engine)转换过程。此工具提供了命令行接口,允许用户指定输入模型和其他参数以便于优化并导出适用于特定硬件平台的高度优化的推理引擎。 #### 准备工作 确保已安装 NVIDIA CUDA 和 cuDNN 库,并且已经成功设置了 TensorRT 开发环境[^1]。对于开发环境的具体设置细节,在官方文档或其他社区资源中有详细的指导说明可以参考。 #### 转换流程概述 通过调用 `trtexec` 命令行工具执行如下操作: - 加载给定的 ONNX 模型; - 对该网络结构进行分析与优化处理; - 构建针对目标硬件进行了性能调整后的序列化形式的 TensorRT 推理引擎; - 输出最终得到的 `.engine` 文件用于后续部署应用中。 #### 实际操作指令 下面给出了一条典型的命令示例,展示了如何使用 `trtexec` 来完成上述任务: ```bash trtexec --onnx=model.onnx --saveEngine=model.engine --workspace=256 --fp16 ``` 这条命令指定了要加载的 ONNX 文件(`model.onnx`)以及保存生成好的 TensorRT 引擎的位置(`model.engine`);同时还设定了最大可用的工作空间大小(单位MB),这里设定的是 256 MB (`--workspace=256`),并且启用了 FP16 精度模式以提高运行效率(`--fp16`)[^1]。 #### Python API 方式构建 Engine (可选) 除了直接运用 `trtexec` 外,也可以借助 Python 编程语言配合 TensorRT 提供的一系列API来自定义创建 TensorRT 引擎的过程。这种方式给予开发者更大的灵活性去控制整个编译环节中的各个选项配置。以下是基于 Python 的简单例子展示怎样读取 ONNX 并将其化为 TensorRT 引擎对象再保存下来: ```python import tensorrt as trt def build_engine(onnx_file_path, engine_file_path): TRT_LOGGER = trt.Logger(trt.Logger.WARNING) with trt.Builder(TRT_LOGGER) as builder, \ builder.create_network() as network, \ trt.OnnxParser(network, TRT_LOGGER) as parser: config = builder.create_builder_config() config.max_workspace_size = 1 << 30 # 设置 workspace size 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 engine = builder.build_serialized_network(network, config) with open(engine_file_path, "wb") as f: f.write(bytearray(engine)) build_engine('model.onnx', 'model.engine') ``` 这段脚本首先初始化了一个 TensorRT 日志记录器实例,接着依次建立了 Builder、Network 定义和 Onnx 解析器三个核心组件。之后打开待解析的 ONNX 文件流并通过 Parser 进行语法检查及内部表示法化。最后一步则是实际地构造出了 TensorRT 引擎并将之序列化存储至磁盘上的指定位置[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex-Leung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值