TensorRT动态形状(Dynamic Shape)出错,官方demo+自己模型运行时出错

(2024.7.2)

使用TensorRT处理动态输入形状推理时出现的错误,本案基于官方demo文件,已解决

TensorRT版本10.0,官方例子使用的是这个https://github.com/NVIDIA/trt-samples-for-hackathon-cn/blob/master/cookbook/01-SimpleDemo/TensorRT-10.0/main_pytorch.py

首先本人的环境是没问题的,将trt_file设为使用静态形状推理的引擎时没有任何问题,输出结果正常。

问题一

问题在于使用动态形状推理的引擎时(从onnx模型转过来,h和w维度未指定,shape值为-1),出现如下错误([TRT] [E] IExecutionContext::setInputShape: Error Code 3: API Usage Error (Parameter check failed, condition: engineDims.nbDims == dims.nbDims. ):
在这里插入图片描述
此问题在于第77行

context.set_input_shape(input_tensor_name, data.shape)  

时返回了False。这是因为本引擎的推理输入维度为(B, C, H, W),而官方推理中的输入维度为(C, H, W),故将此代码维度中的输入reshape为(1, C, H, W)即解决此问题。

# data = torch.arange(3 * 4 * 5, dtype=torch.float32).reshape(3, 4, 5)            # inference input data
data = torch.arange(3 * 4 * 5, dtype=torch.float32).reshape(1, 3, 4, 5)            # inference input data

问题二

解决上述问题后,继续运行又遇到另一个问题:(IExecutionContext::getTensorShape: Error Code 7: Internal Error (/body/body.0/body/body.0/skff_mid/Concat: axis 3 dimensions must be equal for concatenation on axis 1. Condition ‘==’ violated: 4 != 3. Instruction: CHECK_EQUAL 4 3.)
在这里插入图片描述
这个问题非常奇怪,在这里找到不完美的解决方案。
说是“只能定位到是推理时的shape不是64的倍数导致的”。那么解决方案可以是:

  1. 修改输入形状(限制其一定要满足某种格式)(亲测可用)
data = torch.arange(3 * 4 * 4, dtype=torch.float32).reshape(1, 3, 4, 4)
  1. “就是生成engine的过程中,将opt_height和opt_width设为非64的倍数”

此二问题解决后,可以得到正常的动态形状推理结果。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值