Tensorflow无法找到libcuda.so(CUDA 7.5)

时间:2016-07-17 13:38:12

标签: python cuda tensorflow

我已经在anaconda env中安装了CUDA 7.5工具包和Tensorflow。还安装了CUDA驱动程序。包含so库的文件夹位于LD_LIBRARY_PATH中。当我导入tensorflow时,我收到以下错误:

  

无法打开CUDA库libcuda.so。 LD_LIBRARY_PATH:   /usr/local/cuda-7.5/lib64

在此文件夹中,存在名为libcudart.so的文件(实际上是libcudart.so.7.5的符号链接)。所以(正如猜测)我创建了一个名为libcudart.so的{​​{1}}的符号链接。现在Tensorflow找到了该库,但是当我调用libcuda.so时,我收到以下错误:

  

F tensorflow / stream_executor / cuda / cuda_driver.cc:107]检查失败:f   != nullptr找不到cuInitin libcuda DSO; dlerror获得:   /usr/local/cuda-7.5/lib64/libcudart.so.7.5:未定义的符号:cuInit

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

为了将来的参考,这是我发现的以及我为解决这个问题所做的工作。 该系统是64位Ubuntu 14.04。我试图安装的NVIDIA驱动程序版本是367.35。安装结果导致错误,并显示消息:

  

错误:无法加载内核模块'nvidia-drm'

然而,CUDA示例编译并运行没有问题,因此驱动程序至少部分安装正确。但是,当我使用以下方式检查版本时:

  

cat / proc / driver / nvidia / version

我得到的版本是不同的(我不记得确切但有一些352子版本)。 所以我想通了我最好删除所有驱动程序的痕迹并重新安装。我按照接受的答案中的说明进行了操作:https://askubuntu.com/questions/206283/how-can-i-uninstall-a-nvidia-driver-completely,除了确保在启动时加载nouveau驱动程序的命令。

我终于重新安装了最新的NVIDIA驱动程序(367.35)。安装完成后没有任何错误,Tensorflow能够加载所有库。

我认为问题开始时,在我之前进行安装的人使用apt-get来安装驱动程序而不是run脚本。但不确定。

PS 在安装过程中, 是一个警告:

  

分发提供的预安装脚本失败了!你确定吗   你想继续吗?

查看日志我可以找到这个预安装脚本,其内容很简单:

# Trigger an error exit status to prevent the installer from overwriting
# Ubuntu's nvidia packages.
exit 1

所以尽管有这个警告,安装似乎还可以。

答案 1 :(得分:0)

我在几台Ubuntu 16.04机器上出现此错误。我尝试仅更新NVIDIA驱动程序和Cuda工具包,希望apt可以替换掉丢失的文件,但是没有发生。

以下是我如何解决以下错误的希望明晰的解释:

...libcuda.so.1: cannot open shared object file: No such file or directory

您显然缺少此libcuda.so.1文件。 如果您查看其他SO帖子,您会发现libcuda.so.1实际上是一个符号链接(Unix术语是指看起来像一个文件,但实际上只是指向另一个文件的指针)。具体来说,它是libcuda.so。#文件的符号链接,该文件是NVIDIA图形驱动程序的一部分!(不是Cuda工具包的一部分)。因此,如果您确实找到了程序包管理器将libcuda.so.1文件放置在系统上的任何位置,则会看到它指向此驱动程序相关文件:

$ ls /usr/lib/x86_64-linux-gnu/libcuda.so.1 -la
lrwxrwxrwx 1 root root 17 Oct 25 14:29 /usr/lib/x86_64-linux-gnu/libcuda.so.1 -> libcuda.so.410.73

好的,因此您需要像发现的那样建立一个符号链接,但是在哪里? 即,Tensorflow在哪里寻找此libcuda.so.1?显然,您的包裹经理没有把它粘在哪里。 事实证明,Tensorflow在“负载库路径”中查找。 您可以看到以下路径:

$ echo $LD_LIBRARY_PATH

返回的内容应包括已安装的Cuda工具包:

/usr/local/cuda/lib64

(确切路径可能会因系统而异) 如果没有,则需要使用类似以下的shell命令(从NVIDIA Toolkit安装手册中)将工具箱添加到$ LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/usr/local/cuda/lib64\${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

(如果您在/usr/local/cuda中找不到任何内容,则可能未安装该工具包。)

现在,您知道Tensorflow在Cuda工具包的$ LD_LIBRARY_PATH上的位置,您可以向工具包目录添加符号链接

sudo ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.410.73  /usr/local/cuda/lib64/libcuda.so.1

或者,您也可以只听其他不解释正在发生的事情的文章,而是告诉您尝试以多种不同的方式安装更多的东西。虽然对我没用:(