onnxruntime推理时可以直接以numpy数组为输入,可以便捷的支持多输入多输出模型。但需要修改为python-tensorrt推理时,需要补充上cuda操作,完成cpu变量与cuda变量的通信、输出输出的内存分配。为此对python-tensorrt推理代码进行共性化提取,让您可以像python-onnxruntime一样使用tensorrt推理,仅需替换2行代码即可(模型初始化代码,onnx.run调用代码)。
前置条件:安装py-cuda库、tensorrt-python 10.x推理环境。
1、核心实现
以下代码的TRTModel模型类,支持任意输入输出的静态模态。具体可以观察__call__函数代码,其是与模型结构弱相关的,在__init__函数中动态的基于self.engine.num_io_tensors获取的模型的输入与输出信息。
import tensorrt as trt
import numpy as np
from cuda import cuda, cudart