ImportError:libcublas.so.9.0:无法打开共享对象文件

时间:2018-01-24 17:30:16

标签: python-3.x tensorflow cuda keras

目前我在Gpu支持系统中安装了cuda 8.0和cuda 9.0。从keras模块导入时遇到此错误。它说像无法加载原生tensorflow运行时。我收到的错误日志是:

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "/usr/local/lib/python3.5/dist-
packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
_mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
File "/usr/lib/python3.5/imp.py", line 242, in load_module
return load_dynamic(name, filename, file)
File "/usr/lib/python3.5/imp.py", line 342, in load_dynamic
return _load(spec)

ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "Try1.py", line 11, in <module>
from keras.models import Sequential
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.egg/keras/__init__.py", line 3, in <module>
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.egg/keras/utils/__init__.py", line 6, in <module>
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.egg/keras/utils/conv_utils.py", line 3, in <module>
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.egg/keras/backend/__init__.py", line 83, in <module>
File "/usr/local/lib/python3.5/dist-packages/Keras-2.0.9-py3.5.egg/keras/backend/tensorflow_backend.py", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/tensorflow/__init__.py", line 24, in <module>
from tensorflow.python import *
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/__init__.py", line 49, in <module>
from tensorflow.python import pywrap_tensorflow
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 73, in <module>
raise ImportError(msg)
ImportError: Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
_mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
File "/usr/lib/python3.5/imp.py", line 242, in load_module
return load_dynamic(name, filename, file)
File "/usr/lib/python3.5/imp.py", line 342, in load_dynamic
return _load(spec)
ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory


Failed to load the native TensorFlow runtime.

当我运行nvcc --version时,返回的cuda版本为

Cuda compilation tools, release 8.0, V8.0.61

我读过一些类似的帖子,但无法解决我的问题。大多数情况下,我认为这是两个cuda版本之间的冲突。谁能告诉我如何解决这个问题?提前谢谢。

12 个答案:

答案 0 :(得分:33)

您需要更新LD_LIBRARY_PATH,以便它指向/usr/local/cuda-9.0/lib64。 将以下行添加到.bashrc文件(或您使用的任何其他终端)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/lib64/

答案 1 :(得分:4)

尝试以下代码

 pip3 install --upgrade tensorflow-gpu==1.4

在终端中输入此命令pip3 install --upgrade tensorflow-gpu==1.4后,张量流将降级为1.4.0。这个bug由tensorflow 1.6.0引起。

答案 2 :(得分:4)

Tensorflow二进制文件目前不支持Cuda 9.1。 因此解决方案可能只是从source安装Tensorflow。

我为Tensorflow安装了Cuda 9.1 + cuDNN 6时也遇到了上述问题,这对我有用。

https://devtalk.nvidia.com/default/topic/1026198/cuda-setup-and-installation/cuda-9-0-importerror-libcublas-so-8-0

此外,您还有以下两个选项:

  1. CUDA 8.0 + Tensorflow - 与Tensorflow二进制文件一起使用的最稳定的CUDA版本。

  2. CUDA 9.0 + Tensorflow - Tensorflow二进制文件兼容的最新CUDA版本。

答案 3 :(得分:1)

Tensorflow版本> = 1.5需要CUDA版本> 8.0。因此,如果您具有CUDA版本8.0,则可以将tensorflow版本降级为1.4。

pip install tensorflow-gpu==1.4

答案 4 :(得分:0)

此问题与Google的protobuf编译器有关,因为tensorflow无法找到共享对象文件,在本例中为libcublas.so.9.0。

构建最新版本的protobuf(3.5.0)来自源代码也没有帮助。对我有用的是在Ubuntu 16.04上通过 apt install protobuf-compiler 安装系统范围的protobuf编译器。并通过 pip3 install protobuf 安装python版本。我使用的是CUDA 9.0,因为9.1还没有与tensorflow预先建立的二进制文件兼容。

您可以使用 protoc --version 检查系统范围的protobuf版本,该版本是16.04上的2.6.1。 protoc python版本是3.5.2.post1。希望这可以帮助。使用早期版本的tensorflow和CUDA 8时,我遇到了类似的问题,并记录了此故障排除过程。使用相同的程序,我也可以使用tensorflow 1.8.0。

答案 5 :(得分:0)

我遇到了这个错误,但它与缺少GPU内存有关,尽管该错误消息似乎并不直接相关。正如其他建议一样,我尝试重新启动服务器,但仅获得了更多的迭代次数。为了解决该问题,我从云提供商升级了一个更大的GPU服务器实例,仍然使用相同的服务器映像。

我希望可以帮助别人。

答案 6 :(得分:0)

无论何时安装新版本的cuda,都需要检查可能已添加的永久路径。

要在终端运行中进行检查

gedit ~/.bashrc

如果看到旧的cuda路径,则需要将其更改为新的。

例如我的是:

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/usr/lib/nvidia-384

我将cuda路径和nvidia路径都更改了,因为我还将驱动程序升级到:

export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:/usr/lib/nvidia-390

希望有帮助:)

答案 7 :(得分:0)

从Ubuntu 16.04升级到18.04后,我遇到了这个问题。我已经在Tensorflow 1.12.0中安装了CUDA 9.1,并且该版本的Tensorflow需要CUDA 9.0。当我尝试安装CUDA 9.0时,它破坏了我的视频驱动程序。

幸运的是,我找到了安装multiple CUDA libraries的说明。到目前为止,我唯一需要的部分是下载安装程序脚本,使用--silent --toolkit --override选项运行它,然后设置LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64。我还将/usr/local/cuda上的符号链接设置回了/usr/local/cuda-9.1,但不确定是否需要。

到目前为止,Tensorflow运行正常。

答案 8 :(得分:0)

我试图在Anaconda环境中安装tf,并且遇到了同样的问题。安装CUDA和cuDNN后,我必须先创建一个新环境,然后在该环境pip install tensorflow-gpu

答案 9 :(得分:0)

我通过以下步骤解决了

# Add NVIDIA package repository
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
sudo apt install ./cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt update

# Install CUDA and tools. Include optional NCCL 2.x
sudo apt install cuda9.0 cuda-cublas-9-0 cuda-cufft-9-0 cuda-curand-9-0 \
    cuda-cusolver-9-0 cuda-cusparse-9-0 libcudnn7=7.2.1.38-1+cuda9.0 \
    libnccl2=2.2.13-1+cuda9.0 cuda-command-line-tools-9-0

# Optional: Install the TensorRT runtime (must be after CUDA install)
sudo apt update
sudo apt install libnvinfer4=4.1.2-1+cuda9.0

答案 10 :(得分:0)

我在Google Colab上遇到了同样的问题, 看来我们必须安装Cuda 9.0才能克服它。 (Cuda 9.2无效)

只需遵循:

!wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64-deb

!ls  # Check if required cuda 9.0 amd64-deb file is downloaded

!dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64-deb

!ls /var/cuda-repo-9-0-local | grep .pub

!apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub

!apt-get update

!sudo apt-get install cuda-9.0

贷记Medium Post: Sifat Muhammad Abdullah

答案 11 :(得分:0)

发生这种情况是因为系统正在寻找合适的 cuda 版本来运行训练。我在 conda 中以一种简单的方式解决了这个问题。

转到此 link 并找到适合您的 tensorflow 的 cuda 版本。

找到后,执行此操作。

搜索特定的 cudatoolkit 版本

conda search cudatoolkit
conda install cudatoolkit=*give_your_version_number_here*

接下来安装对应的cudnn

conda search cudnn 搜索,这将显示您刚安装的 cudnn 对应的 cudatoolkit

最后安装,

conda install cudnn=*your_version_number*

P.S -> 这就是 conda 的美妙之处。不要弄脏你的手,当你没有 ;)