关于Could not load dynamic library ‘libnvinfer.so.6‘和 ‘libcudart.so.10.0‘的解决

前言

首先,现在可以直接在tensorflow的工作流中调用tensorRT的代码了,统称为TF-TRT,不需要再单独使用TensorRT进行优化,但运行需要本地安装了TensorRT

如果想在运用TensorFlow中自带的TensorRT,例如以下代码

 from tensorflow.python.compiler.tensorrt import trt_convert as trt
 input_saved_model_dir = "saved_model_dir"
 converter = trt.TrtGraphConverterV2(input_saved_model_dir=input_saved_model_dir)
 converter.convert()
 converter.saved(output_model)

有可能会出现报错Could not load dynamic library ‘libnvinfer.so.6’,Could not load dynamic library ‘libcudart.so.10.0’

报错原因

读取不了动态库libnvinfer.so.6和libcudart.so.10.0,这可能是由你tensorRT/cuda版本不正确导致的。

libnvinfer是TensorRT的依赖库,会要求和tensorRT一起安装。如果你tensorRT安装正确,你libnvinfer的库会存在‘TensorRT-*/lib’里,如果TensorRT的版本是TensorRT7,lib里面会是’libnvinfer.so.7’,如果tensorRT的版本是6,lib里面就是‘libnvinfer.so.6’,需要哪个版本的库/trt是由tensorflow的版本决定的。所以当出现报错Could not load dynamic library 'libnvinfer.so.6’时,tensorflow的版本正在请求tensorRT6的libvinfer动态库。所以解决办法就是更新成那个版本的TRT

同理,如果报错’libcudart.so.10.0’ ,就是需要cuda10.0的库,更新环境为cuda10.0就行,需要注意的是CUDA换版本后需要重新安装CUDNN,且TensorRT、CUDA、CUDNN对互相都有严格版本要求,要找到三个都互相支持的版本。

例如用tar方式安装TensorRT的时候,名字“TensorRT-6.0.1.5.Ubuntu-16.04.x86_64-gnu.cuda-10.1.cudnn7.6.tar”就标识了支持的cudnn版本。

解决办法

所以我建议先根据报错下载正确的tensorRT,然后根据tensorRT支持的版本找CUDA和CUDNN,安装CUDA后再安装CUDNN就可以解决问题了。

TRT、CUDA、CUDNN安装根据官方的installation guide就行了,TRT建议用tar方式安装。

记得修改LD_LIBRARY_PATH

你可能感兴趣的:(tensorflow,cuda,深度学习)