ONNX模型转换为TensorRT模型(trtexec 工具)

        将 ONNX 模型转换为 TensorRT 格式(即 .trtmodel 文件),可以使用 TensorRT 提供的工具或 API。当然,前提是你得搭建了 TensorRT环境。这边不说如何安装,直接用。

一. 转换方式对比

        ONNX模型转换为TensorRT模型有三种方式:使用 trtexec 工具,使用 TensorRT Python API和使用 pytrt 或类似库。本文章会持续更新

二. 命令行方式 (trtexec)

先说下命令行方式·

trtexec --onnx=<model.onnx> --saveEngine=<model.trt> --fp16

参数解释:

  • --onnx=<model.onnx>:指定输入的 ONNX 模型文件路径。
  • --saveEngine=<model.trt>:指定输出的 TensorRT 模型文件路径。
  • --fp16:启用 FP16 模式(需要 GPU 支持),可以提高推理速度并减少内存占用。
  • --int8:启用 INT8 模式(和FP16二选一)

还可以使用其他参数

1. workspace(默认: 16 MiB)

  • 描述: TensorRT 构建引擎时可用的工作区内存大小(单位: MB)(在TensorRT 8.X版本后,workspace 内存大小的控制已经被整合到更高层次的优化中)。
  • 参数设置: 增大此值可以优化大模型(如 YOLO)或复杂网络的构建。
--workspace=<size_in_MB>

        老版本:

trtexec --onnx=yolov5s.onnx --workspace=4096

        8.X以后版本        

trtexec --onnx=yolov5s.onnx --memPoolSize=workspace:4096

推荐值: 对于大型模型,建议 2048-8192 MB。

2. tacticSharedMem(默认: 使用系统值)

  • 描述: 控制在优化 TensorRT 引擎时用于共享记忆体的策略。
  • 参数设置: 一般不需要手动调整,但对于大规模引擎优化,可以尝试配置:
--tacticSharedMem=<size_in_MB>

3. --precisionConstraints

  • 用于强制执行特定的精度约束,如混合 FP16 和 INT8。
--precisionConstraints=prefer

4.  --minShapes / --optShapes / --maxShapes

  • 用于指定动态输入形状(动态批量大小或分辨率)。
  • 作用:定义输入张量的最小(--minShapes)、最优(--optShapes)和最大(--maxShapes)形状范围。
    • 最小形状--minShapes):输入数据的最低维度,用于定义动态范围的下限。
    • 最优形状--optShapes):TensorRT 构建引擎时的优化目标,性能最佳的形状。
    • 最大形状--maxShapes):输入数据的最大可能维度,用于定义动态范围的上限。
  • 使用场景
    • 处理动态批量大小:如 1x3x640x640 到 8x3x640x640
    • 处理动态分辨率:如 1x3x320x320 到 1x3x1280x1280
trtexec --onnx=yolov5s.onnx \
        --minShapes=input:1x3x640x640 \
        --optShapes=input:4x3x640x640 \
        --maxShapes=input:8x3x640x640

        这样写有可能会报错因为张量名称不一定叫input而是image或者其他名字,使用下面代码查看命名。

import onnx

model = onnx.load("yolov5s.onnx")
print("Inputs:", [input.name for input in model.graph.input])

        得到命名结果 Inputs: ['images'],修改代码为

trtexec --onnx=yolov5s.onnx \
        --minShapes=images:1x3x640x640 \
        --optShapes=images:4x3x640x640 \
        --maxShapes=images:8x3x640x640

        如果报错Static model does not take explicit shapes since the shape of inference tensors will be determined by the model itself表示模型是静态的(即固定输入形状的模型),无法与 --minShapes--optShapes 和 --maxShapes 一起使用

        使用代码确认输出形状

import onnx

model = onnx.load("yolov5s.onnx")
for input in model.graph.input:
    print(f"Input name: {input.name}, shape: {[dim.dim_value for dim in input.type.tensor_type.shape.dim]}")

5.  --explicitBatch

  • 作用:开启显式批量模式(Explicit Batch Mode),用于明确定义批量维度(batch size)。(TensorRT7.x版本以上被默认启用,无需显示设置)
  • 使用场景
    • 必须用于动态形状,因为动态形状模式需要显式批量模式支持。
    • 如果未启用显式批量模式,TensorRT 将默认为隐式批量模式,不能与动态形状结合使用
trtexec --onnx=yolov5s.onnx --explicitBatch

6.  --builderOptimizationLevel

  • 作用:设置引擎构建时的优化级别,范围为 0(无优化)到 5(最高优化)(已探明在8.5版本中不可用)。
  • 影响
    • 优化级别越高,TensorRT 会花费更多时间优化引擎以提升推理性能。
    • 较高的优化级别可能需要更多的构建时间。
  • 使用场景
    • 调优引擎性能时,通常设置为最高(5
trtexec --onnx=yolov5s.onnx --builderOptimizationLevel=5

7. --timingCacheFile

  • 作用:启用和保存时间缓存文件(Timing Cache),以加速重复构建的模型(默认启用,使用--noBuilderCache禁用)。
  • 影响
    • 在重复构建相同模型时,时间缓存文件可以显著减少构建时间。
    • 保存的缓存文件可以在未来使用,减少耗时的性能剖析步骤。
  • 使用场景
    • 需要多次构建引擎时,避免重复时间耗费。
trtexec --onnx=yolov5s.onnx --timingCacheFile=cache.timing

8.  --profilingVerbosity

  • 作用:设置性能剖析的输出详细程度(部分版本可能不支持)。
    • 0:最少输出。
    • 1:常规输出(默认)。
    • 2:最详细输出。
  • 使用场景
    • 调试模型性能瓶颈时,选择详细剖析输出(2)。
trtexec --onnx=yolov5s.onnx --profilingVerbosity=2

9.  --verbose

  • 作用:开启详细日志输出,用于调试模型构建和推理过程中的问题。
  • 使用场景
    • 检查引擎构建过程中的每一步。
    • 追踪 TensorRT 优化器的行为和问题。
trtexec --onnx=yolov5s.onnx --verbose

10.  --dumpProfile

  • 作用:输出模型中每一层的性能统计(层级耗时等)。
  • 使用场景
    • 诊断模型中性能瓶颈的具体层。
trtexec --onnx=yolov5s.onnx --dumpProfile

11. --exportProfile

  • 作用:将性能统计数据导出为 JSON 格式文件,便于进一步分析。
  • 使用场景
    • 在调优阶段记录和分析多次测试的性能数据。
trtexec --onnx=yolov5s.onnx --exportProfile=profile.json

12.  --saveEngine

  • 作用:保存构建好的 TensorRT 引擎文件(.trtmodel)。
  • 使用场景
    • 构建引擎后保存到磁盘,供后续加载和使用。
    • 避免每次运行时重新构建引擎,提升部署效率。
trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.trtmodel

13.  --loadEngine

  • 作用:加载已保存的 TensorRT 引擎文件,直接运行推理。
  • 使用场景
    • 部署时直接加载引擎,节省初始化和构建时间。
  • 注意
    • 加载的引擎文件必须在相同的硬件和软件环境下生成。
trtexec --loadEngine=yolov5s.trt

14. 典型配置

trtexec \
--onnx=yolov5s.onnx \
--saveEngine=yolov5s.trt \
--fp16 \
--workspace=4096 \
--minShapes=input:1x3x640x640 \
--optShapes=input:4x3x640x640 \
--maxShapes=input:8x3x640x640 \
--verbose > log.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值