我已经在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
有什么想法吗?
答案 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
或者,您也可以只听其他不解释正在发生的事情的文章,而是告诉您尝试以多种不同的方式安装更多的东西。虽然对我没用:(