Could not load dynamic library 'libnvinfer.so.7'

回答 2 浏览 1.6万 2022-12-29

我知道这个问题已经被问过很多次了,但所有的建议似乎都不起作用,可能是因为我的设置有些不同吧。

Ubuntu          22.04
python          3.10.8
tensorflow      2.11.0
cudatoolkit     11.2.2
cudnn           8.1.0.77
nvidia-tensorrt 8.4.3.1
nvidia-pyindex  1.0.9

在创建了一个conda环境'tf'之后,在目录home/dan/anaconda3/envs/tf/lib/python3.10/site-packages/tensorrt中,我有

libnvinfer_builder_resource.so.8.4.3
libnvinfer_plugin.so.8
libnvinfer.so.8
libnvonnxparser.so.8
libnvparsers.so.8
tensorrt.so

当运行python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"时,我得到的结果是

tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7';
dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory;
LD_LIBRARY_PATH: :/home/dan/anaconda3/envs/tf/lib

tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7';
dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory;
LD_LIBRARY_PATH: :/home/dan/anaconda3/envs/tf/lib

tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

我猜想我应该降级nvidia-tensorrt,但我所尝试的一切似乎都不起作用,任何建议都将是非常感激的。

Daniel von Eschwege 提问于2022-12-29
你的LD_LIBRARY_PATH是不正确的,它应该指向包含.so文件的实际文件夹,因为tensorrt不是一个Python库,所以整个pythone.10/Site-packages/tensorrt是完全没有必要的。Dr. Snoopy 2022-12-29
@Dr.Snoopy 我不确定我的理解是否正确--我的LD_LIBRARY_PATH/home/dan/anaconda3/envs/tf/lib,正如错误信息中打印的那样,正是所有.so文件的位置。home/dan/anaconda3/envs/tf/lib/python3.10/site-packages/tensorrt只是安装tensorrt的位置。Daniel von Eschwege 2022-12-31
你说过并在问题中显示.so文件在/home/dan/anaconda3/envs/tf/lib/python3.10/site-packages/tensorrt,另外,你的tensorflow版本似乎期望libnvinfer版本7,而不是你所安装的版本8。Dr. Snoopy 2022-12-31
是的,因为pip install nvidia-tensorrt把它们放在那里 - 但所有其他.so文件都在/home/dan/anaconda3/envs/tf/lib下。我应该把tensorrt/下的文件移到`lib/'吗?Daniel von Eschwege 2022-12-31
我也这么认为,这就是为什么我想知道如何降级到第7版?Daniel von Eschwege 2022-12-31
2 个回答
#1楼 已采纳
得票数 6

解决办法:按照这里列出的步骤,https://github.com/tensorflow/tensorflow/issues/57679#issuecomment-1249197802

在~/.bashrc中添加以下内容(用于我的方案中所描述的conda环境)。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dan/anaconda3/lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dan/anaconda3/lib/python3.8/site-packages/tensorrt/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dan/anaconda3/envs/tf/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dan/anaconda3/envs/tf/lib/python3.8/site-packages/tensorrt/
Daniel von Eschwege 提问于2023-01-01
#2楼
得票数 6

对我来说,从libnvinfer版本7到8的符号链接的设置是有效的。

# the follwoing path will be different for you - depending on your install method
$ cd env/lib/python3.10/site-packages/tensorrt

# create symbolic links
$ ln -s libnvinfer_plugin.so.8 libnvinfer_plugin.so.7
$ ln -s libnvinfer.so.8 libnvinfer.so.7

# add tensorrt to library path
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/env/lib/python3.10/site-packages/tensorrt/
thalhamm 提问于2023-02-11
thalhamm 修改于2023-02-21
ln -s linvinfer.so.8 libnvinfer.so.7应该是ln -s libnvinfer.so.8 libnvinfer.so.7,少了一个字母b。Q. Qiao 2023-02-19