tensorrt, batch
trtexec地址
参考官方的说明,进行项目编译
pytorch->onnx的时候,需要在动态尺寸上定义好,例如:
这里就是定义batch的数值为动态的。
导出成onnx后,可以看一下输入的shape:batch_size×3×480×640

trtexec模型转换
直接可以用以下命令进行模型转换
说明:
onnx: 输入的onnx模型
saveEngine:转换好后保存的tensorrt engine
workspace:使用的gpu内存,有时候不够,需要手动增大点
minShapes:动态尺寸时的最小尺寸,格式为NCHW,需要给定输入node的名字,
optShapes:推理测试的尺寸,trtexec会执行推理测试,该shape就是测试时的输入shape
maxShapes:动态尺寸时的最大尺寸,这里只有batch是动态的,其他维度都是写死的
fp16:float16推理
推理命令
由上一节的介绍,动态batch推理时,通过改变optShapes的参数就可以实现不同batch的推理。例如:
耗时情况
trtexec会打印出很多时间,这里需要对每个时间的含义进行解释,然后大家各取所需,进行评测。总的打印如下:
Host Latency gpu: 输入+计算+输出 三部分的耗时
Enqueue Time:CPU异步的时间(该时间不具有参考意义,因为GPU的计算可能还没有完成)
GPU Compute:GPU计算的耗时
综上,去了Enqueue Time时间都是有意义的
这里附上个人的测试。
设备
模型
model
batch
gpu 计算耗时/ms
3080pc
ddrnet23_ocr
fp16
1
1.70512
2
2.70069
4
4.78706
8
9.03271
16
16.1414
可以看到tensorrt的batch推理有线性增长的问题