无法加载动态库“libnvinfer.so.7”

Dan*_*ege 27 nvidia tensorflow cudnn tensorrt

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

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
Run Code Online (Sandbox Code Playgroud)

home/dan/anaconda3/envs/tf/lib/python3.10/site-packages/tensorrt在我的目录中创建了一个 conda 环境“tf”

libnvinfer_builder_resource.so.8.4.3
libnvinfer_plugin.so.8
libnvinfer.so.8
libnvonnxparser.so.8
libnvparsers.so.8
tensorrt.so
Run Code Online (Sandbox Code Playgroud)

跑步时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')]
Run Code Online (Sandbox Code Playgroud)

我猜我应该降级nvidia-tensorrt,但我尝试过的任何方法似乎都不起作用,任何建议将不胜感激。

小智 24

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

# the following 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/
Run Code Online (Sandbox Code Playgroud)

  • `ln -s linvinfer.so.8 libnvinfer.so.7` 应该是 `ln -s libnvinfer.so.8 libnvinfer.so.7` 缺少字母 b。 (2认同)

Dan*_*ege 9

解决方案:按照此处列出的步骤进行操作https://github.com/tensorflow/tensorflow/issues/57679#issuecomment-1249197802

将以下内容添加到 ~/.bashrc (对于我的场景中描述的 conda 环境):

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HOME}/anaconda3/lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HOME}/anaconda3/lib/python3.8/site-packages/tensorrt/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HOME}/anaconda3/envs/tf/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HOME}/anaconda3/envs/tf/lib/python3.8/site-packages/tensorrt/
Run Code Online (Sandbox Code Playgroud)


Ana*_*ism 9

这已经有了一个解决方案,但也许我可以为问题添加更多的深度,并为那些必须从头开始安装这些东西的人(比如我)提供描述。

最有可能(从这些问题来看)您会来到这里,因为您安装了 kohya_ss。

就我而言,机器没有某些必需的软件包(tensorflow 和 tensorrt),安装这些软件包会带来比 kohya_ss 预期更新的某些组件的版本。

当您看到此错误时,您可能缺少tensorflow和tensorrt(或者您已经拥有它,但版本不同)

# install tensor-runtime 
sudo apt install python3-pip -y
pip install tensorrt tensorflow
Run Code Online (Sandbox Code Playgroud)

现在尝试以下命令看看上面的安装是否已经解决了问题:

python3 -c 'import tensorflow as tf; print(tf.__version__)' 
Run Code Online (Sandbox Code Playgroud)

如果没有(如果上面的命令仍然抱怨这些丢失的文件),请理解上面的安装命令将在名为 ~/.local/... 的隐藏文件夹中安装tensorflow和tensorrt...这将包含该文件的版本您需要,但版本号/文件名错误。

以下命令将找到另一个(错误的)版本及其路径:

find . -name libnvinfer.so* -print
Run Code Online (Sandbox Code Playgroud)

这将为您提供以下形式的输出

.local/lib/python3.10/site-packages/tensorrt/libnvinfer.so.8
Run Code Online (Sandbox Code Playgroud)

请注意实际文件名和cd之前的部分。

cd  ~/.local/lib/python3.10/site-packages/tensorrt/
Run Code Online (Sandbox Code Playgroud)

键入以下命令。这将创建一个内容相同但名称不同(缺少的名称)的文件。

ln -s libnvinfer.so.8 libnvinfer.so.7
Run Code Online (Sandbox Code Playgroud)

使用 libnvinfer_plugin.so 执行类似的 find 命令* 文件

find . -name libnvinfer_plugin.so.* -print
Run Code Online (Sandbox Code Playgroud)

对结果执行相同的步骤(这对您来说可能略有不同,但步骤与上面相同,即查找具有新名称的文件,转到该文件夹​​,创建缺少名称的链接):

cd ~/.local/lib/python3.10/site-packages/nvidia/cuda_runtime/lib/
ln -s libcudart.so.12 libcudart.so.11.0
Run Code Online (Sandbox Code Playgroud)

像这样将两个路径添加到 LD_LIBRARY_PATH(仅是您在cd命令中使用的路径,而不是文件名):

find . -name libnvinfer.so* -print
Run Code Online (Sandbox Code Playgroud)

为了更好的措施,还添加安装程序抱怨的 /bin 路径:

.local/lib/python3.10/site-packages/tensorrt/libnvinfer.so.8
Run Code Online (Sandbox Code Playgroud)

验证 python3 现在可以使用 tensorflow 而不会出现错误:

cd  ~/.local/lib/python3.10/site-packages/tensorrt/
Run Code Online (Sandbox Code Playgroud)

希望是一条消息,但不再有关于丢失文件的警告。

然后,您可以将两个导出命令添加到 .profile 或 .bashrc 文件中。正如原发帖者的答案中指出的那样。

另外,如果您已经全局安装了tensorrt(通过sudo),您的find命令将需要是:

sudo find / -name libnvinfer.so* -print
Run Code Online (Sandbox Code Playgroud)

步骤类似,只是使用全局路径并需要 sudo 来执行此操作。

享受