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

Posted

技术标签:

【中文标题】无法加载动态库“libnvinfer.so.6”【英文标题】:Could not load dynamic library 'libnvinfer.so.6' 【发布时间】:2020-06-07 15:12:08 【问题描述】:

我正在尝试正常导入 TensorFlow python 包,但出现以下错误:

这是上面终端图片中的文字:

2020-02-23 19:01:06.163940: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer.so.6'; dlerror: libnvinfer.so.6: cannot open shared object file: No such file or directory
2020-02-23 19:01:06.164019: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer_plugin.so.6'; dlerror: libnvinfer_plugin.so.6: cannot open shared object file: No such file or directory
2020-02-23 19:01:06.164030: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:30] 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.
<module 'tensorflow_core._api.v2.version' from '/home/saman/miniconda3/envs/testconda/lib/python3.7/site-packages/tensorflow_core/_api/v2/version/__init__.py'

【问题讨论】:

请发短信!从终端复制/粘贴。 什么操作系统?您是否安装了所有必要的库? ***.com/… 它是 Ubuntu。 tensorflow 有没有必要的库? 【参考方案1】:

这是一个警告,而不是错误。您仍然可以使用 TensorFlow。共享库 libnvinferlibnvinfer_plugin 是可选的,仅当您使用 nvidia 的 TensorRT 功能时才需要。

TensorFlow's installation instructions 列出 GPU 依赖项:

您的系统上必须安装以下 NVIDIA® 软件:

NVIDIA® GPU 驱动程序 - CUDA 10.1 需要 418.x 或更高版本。 CUDA® Toolkit —TensorFlow 支持 CUDA 10.1 (TensorFlow >= 2.1.0) CUPTI 附带 CUDA 工具包。 cuDNN SDK (>= 7.6) (可选)TensorRT 6.0 可改善某些模型的推理延迟和吞吐量。

您可以使用以下命令(取自TensorFlow documentation)在 Ubuntu 18.04 上安装它们:

# Add NVIDIA package repositories
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt-get update
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update

# Install NVIDIA driver
sudo apt-get install --no-install-recommends nvidia-driver-430
# Reboot. Check that GPUs are visible using the command: nvidia-smi

# Install development and runtime libraries (~4GB)
sudo apt-get install --no-install-recommends \
    cuda-10-1 \
    libcudnn7=7.6.4.38-1+cuda10.1  \
    libcudnn7-dev=7.6.4.38-1+cuda10.1


# Install TensorRT. Requires that libcudnn7 is installed above.
sudo apt-get install -y --no-install-recommends libnvinfer6=6.0.1-1+cuda10.1 \
    libnvinfer-dev=6.0.1-1+cuda10.1 \
    libnvinfer-plugin6=6.0.1-1+cuda10.1

【讨论】:

有什么办法可以抑制这个警告,因为每次我执行 python 文件时它都会出现在终端上? 要抑制所有的tensorflow警告,可以设置环境变量TF_CPP_MIN_LOG_LEVEL="2" I tensorflow/stream_executor/platform/default/dso_loader.cc:44] 成功打开动态库libnvinfer.so.6 按照答案成功安装后,每次导入keras都会得到上述评论。应该怎么做? 我讨厌答案指定在一两个月内过时的版本。想知道如何为 CUDA 11.1 和 455.38 解决这个问题【参考方案2】:

由于 libvnifer6 软件包的(意外)更新,我收到了此警告。它已更新为6.0.1-1+cuda10.2,而原始安装使用6.0.1-1+cuda10.1

在我卸载引用 cuda10.2 的包并重新运行后

sudo apt-get install -y --no-install-recommends libnvinfer6=6.0.1-1+cuda10.1 \
    libnvinfer-dev=6.0.1-1+cuda10.1 \
    libnvinfer-plugin6=6.0.1-1+cuda10.1

这个警告消失了。

【讨论】:

您还可以使用apt-mark hold (manpages) 阻止更新包【参考方案3】:

这些消息中的大多数是警告,而不是错误。它们只是意味着未安装使用 Nvidia GPU 的库,但您不必拥有任何 Nvidia GPU 即可使用 Tensorflow,因此您不需要这些库。 jakub 的评论告诉了如何关闭警告:

export TF_CPP_MIN_LOG_LEVEL="2"

但是,我也在没有 Nvidia 的情况下运行 Tensorflow,并且还有一条消息是错误,而不是警告:

2020-04-10 10:04:13.365696: E tensorflow/stream_executor/cuda/cuda_driver.cc:351] failed call to cuInit: UNKNOWN ERROR (303)

它应该是无关紧要的,因为它也指的是用于 Nvidia 的 cuda。不过,这似乎不是致命错误。

【讨论】:

如果你安装了tensorflow 并且使用的是最新版本,比如 2.1.0,那么 tensorflow 包已经内置了对 gpu 和 cpu 的支持。如果您在没有 gpu 的情况下运行,您将收到此错误消息,但它是良性的。您可以安装 tensorflow-cpu 包以排除 gpu 支持。【参考方案4】:

您可以下载 tensorRT 6 的 zip 文件,然后将 x86 linux 文件夹文件粘贴到 /usr/lib/cuda 确保您下载的 x86_linux 文件夹中的 lib 文件夹应重命名为 lib64 。粘贴 cuda 目录中的所有文件后,重新启动系统。现在 Cuda 和 TensorRT 引擎将在您的系统中顺利运行。

【讨论】:

【参考方案5】:

我花了大约 5 个小时来解决这个问题。就我而言,我相信这意味着您的库版本错误。 libnvinfer.so.6 位于“TensorRT-*/lib”,数字 6 表示 tensorFlow 正在寻找 TensorRT6 的 libvinfer。所以如果是“could not load dynamic library libnvinfer.so.5”,说明你需要TensorRT 5才能运行代码。

同上,如果显示Could not load dynamic library 'libcudart.so.10.0',则需要cuda 10.0中的库才能运行代码。

因此,更新您的 tensorrt/Cuda/Cudnn 以匹配您的 tensorflow 版本会有所帮助。请注意,您的 tensorrt/cuda/cudnn 版本也应该相互匹配。

【讨论】:

【参考方案6】:
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb

sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update

来自 jakub 的回答中的一点点信息。如果您不安装“机器学习”存储库,则可能会发生这种情况。如果您已成功安装 CUDA 但仍出现错误,请尝试此操作。

然后安装 TensorRT。要求上面安装了libcudnn7。

sudo apt-get install -y --no-install-recommends libnvinfer6=6.0.1-1+cuda10.1 \
    libnvinfer-dev=6.0.1-1+cuda10.1 \
    libnvinfer-plugin6=6.0.1-1+cuda10.1

【讨论】:

以上是关于无法加载动态库“libnvinfer.so.6”的主要内容,如果未能解决你的问题,请参考以下文章

使用colab导入tensorrt时出现错误如何解决

Android 源码分析实战 - 动态加载修复 so 库

PHP 启动:无法加载动态库 'sqlsrv'

`PHP 警告:PHP 启动:无法加载动态库 'mcrypt.so'

PHP 警告:PHP 启动:无法加载动态库 'bz2'

PHP 启动:无法加载动态库`curl.so` Ubuntu