TensorRT 调用onnx后的批量处理(上)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorRT 调用onnx后的批量处理(上)相关的知识,希望对你有一定的参考价值。
参考技术A pytorch经onnx转tensorrt初体验 上 、 下 中学习了tensorrt如何调用onnx模型,但其中遇到的问题是tensorrt7没有办法直接输入动态batchsize的数据,当batchsize>1时只有第一个sample的结果是正确的,而其后的samples的输出都为0. 本文主要是探索如何进行批量化的处理。这是 TensorRT/samples/sampleDynamicReshape/sampleDynamicReshape.cpp 中给出的一个解决方案,其主要思路是在原有的INetwork 之前再创建一个用于input resize的Network, 该Network的主要功能是对可变的输入进行resize,以及设置配置文件和参数绑定。
其中,最主要的部分如下:
其中配置器 profile 指定了输入的最小尺寸、最优尺寸和最大尺寸。那么真实输入时,处在最小和最大尺寸中都行。
参考: # TensorRT 7 ONNX models with variable batch size
测试 trtexec -h 发现
再次 trtexec -h 即正确显示帮助信息。其中给出了 model options、build options、 inference options和system options等。
a. 从固定尺寸的onnx转cudaEngine
···
trtexec --explicitBatch --onnx=./resnet18.onnx --saveEngine=resnet18.engine
···
b.从可变尺寸的onnx转cudaEngine,需要指定profile。
c. 接下来看一下python API的调用
主函数:
下表给出的是V100上resnet18的前向推断时间(ms)
总结一下,dynamic batchsize的处理流程:
以上是关于TensorRT 调用onnx后的批量处理(上)的主要内容,如果未能解决你的问题,请参考以下文章
pytorch upsample层到onnx,以及到tensorRT的转换
TensorRT onnx转engine报Assertion failed: dims.nbDims == 4 || dims.nbDims == 5
TensorRT onnx转engine报Assertion failed: dims.nbDims == 4 || dims.nbDims == 5