环境
cuda 10.2
cudnn 7.6.5
anaconda 3.5.1
python=3.6.11
安装过程
详见,亲测可行
https://blog.csdn.net/qq_40672851/article/details/107380136
可能遇到的问题
安装完成后,在命令行输入:
import tensorrt
tensorrt.__version__
'7.0.0.11'
则可以成功打印版本,然后在Pycharm中使用同一虚拟环境,在import tensorrt as trt
则会出现以下错误:
1)ImportError: libnvinfer.so.7: cannot open shared object file: Nosuch file or directory
2)ImportError: libnvonnxparser.so.7: cannot open shared object file:No such file or directory
3)ImportError: libnvparsers.so.7: cannot open shared object file: Nosuch file or directory
4)ImportError: libnvinfer_plugin.so.7: cannot open shared object file:No such file or directory
5)ImportError: libnvrtc.so.7: cannot open shared object file:No such file or directory
解决方法
将TensorRT中的链接文件.so文件进行复制到/usr/lib/文件夹中,Pycharm就可以读取相关的链接文件进行链接。
sudo cp /home/alien/Documents/TensorRT-7.0.0.11/lib/libnvinfer.so.7 /usr/lib/
sudo cp /home/alien/Documents/TensorRT-7.0.0.11/lib/libnvonnxparser.so.7 /usr/lib/
sudo cp /home/alien/Documents/TensorRT-7.0.0.11/lib/libnvparsers.so.7 /usr/lib/
sudo cp /home/alien/Documents/TensorRT-7.0.0.11/lib/libnvinfer_plugin.so.7 /usr/lib/
sudo cp /usr/local/cuda-10.2/lib64/libnvrtc.so.10.2 /usr/lib/
sudo cp /home/alien/Documents/TensorRT-7.0.0.11/lib/libmyelin.so.1 /usr/lib/
即报哪个so文件找不到,就进行上述操作。
onnx转tensorrt并进行推理
上次介绍了pth转onnx的方法,具体详见pth转onnx模型,这次使用标准的Resnet50.onnx进行示例推理。
- onnx解析转成engine文件
#--*-- coding:utf-8 --*--
import tensorrt as trt
import os
onnx_model_path = "./model/resnet50.onnx"
TRT_LOGGER = trt.Logger()
def get_engine(max_batch_size=1, onnx_file_path="", engine_file_path="", fp16_mode=False, save_engine=False):
"""
params max_batch_size: 预先指定大小
params onnx_file_path: onnx文件路径
params engine_file_path: 待保存的序列化的引擎文件路径
params fp16_mode: 是否采用FP16
params save_engine: 是否保存引擎
returns: ICudaEngine
"""
# 如果已经存在序列化之后的引擎,则直接反序列化得到cudaEngine
if os.path.exists(engine_file_path):
pr