无法让cuda在张量流中工作

时间:2016-01-19 00:15:18

标签: cuda nvidia tensorflow

我正在尝试使用cuda来加速张量流。我正在使用docker镜像运行tensorflow。

首先,当我启动gpu映像时,它在LT_LIBRARY_PATH环境变量中不匹配:

~# echo $LD_LIBRARY_PATH 
/usr/local/nvidia/lib:/usr/local/nvidia/lib64:
root@d578acbbc2cd:~# ls /usr/local/
bin  cuda  cuda-7.0  etc  games  include  lib  man  sbin  share  src

那里没有nvidia目录。当我尝试运行convolutional.py演示时,它无法初始化cuda支持:

# python models/image/mnist/convolutional.py
Succesfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Succesfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Succesfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Succesfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 8
modprobe: ERROR: ../libkmod/libkmod.c:556 kmod_search_moddep() could not open moddep file '/lib/modules/4.2.0-23-generic/modules.dep.bin'
E tensorflow/stream_executor/cuda/cuda_driver.cc:466] failed call to cuInit: CUDA_ERROR_UNKNOWN
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:98] retrieving CUDA diagnostic information for host: d578acbbc2cd
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:106] hostname: d578acbbc2cd
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:131] libcuda reported version is: Not found: was unable to find libcuda.so DSO loaded into this program
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:242] driver version file contents: """NVRM version: NVIDIA UNIX x86_64 Kernel Module  352.68  Tue Dec  1 17:24:11 PST 2015
GCC version:  gcc version 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu2) 
"""
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:135] kernel reported version is: 352.68
I tensorflow/core/common_runtime/gpu/gpu_init.cc:112] DMA: 
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 8

然后继续使用cpu进行训练。

# find /usr -name libcuda.so
/usr/lib/x86_64-linux-gnu/libcuda.so

所以在docker镜像中,只有gnu cpu cuda实现。没有NVIDIA的东西。在主机ubuntu 15.10会话中,我安装了libcuda.so:

$ find /usr -name libcuda.so
/usr/lib/x86_64-linux-gnu/libcuda.so
/usr/lib/i386-linux-gnu/libcuda.so
/usr/local/cuda-7.5/targets/x86_64-linux/lib
/stubs/libcuda.so

所以这些似乎是存根......不确定为什么。

是否有一些技巧可以让它发挥作用?

5 个答案:

答案 0 :(得分:2)

尝试直接从Tensorflow存储库重建Docker镜像(即不依赖于容器注册表上的图像)并使用https://github.com/NVIDIA/nvidia-docker来运行容器(Tensorflow文档中描述的Docker命令不可移植) )。

答案 1 :(得分:1)

我有类似的问题,但不是在码头工人。 / usr / local / cuda / lib64 / stubs中的libcuda.so是一个损坏的sym链接。当我搜索libcuda.so时,它只显示了一个lib32文件夹中的文件。

似乎问题是我最初安装NVIDIA设备驱动程序的方式。在驱动程序安装过程中的某个时刻,您可以选择安装lib32驱动程序。我以为这意味着除了lib64驱动程序,所以我选择了它。原来它只安装lib32而不是lib64驱动程序。

我重新安装了NIVDIA设备驱动程序,这次没有选择lib32'选项'。现在tensorflow找到了libcuda.so。

答案 2 :(得分:1)

在将驱动程序升级到352.63和352.93之后,在Ubuntu机器上运行tensorflow时遇到了同样的问题。 (我记得它适用于346. *但是当我尝试安装346.它会因某种原因自动安装352.)

我终于发现它是由许可问题引起的。 (我可以用root运行它)因此,我将libcuda.so.352-63文件的权限更改为任何人都可执行,现在效果很好。

希望这对那些仍在努力解决这个问题的人有所帮助。

我没有试过码头工具,但我想这也是由权限设置引起的。

答案 3 :(得分:1)

尝试此命令

sudo apt-get install nvidia-modprobe

如上所述: https://github.com/tensorflow/tensorflow/issues/394http://kkjkok.blogspot.in/2016_08_01_archive.html

答案 4 :(得分:1)

在Ubuntu 14.10上将NVIDIA驱动程序更新为378.09后,我遇到了同样的错误, 尽管lib文件的所有权利都设置正确 感谢@PhoenixQ,我尝试使用sudo运行并且它有效。

之后我尝试再次运行sudo,错误消失了。我不确定ecxactly发生了什么,但也许在调用sudo期间配置了一些内容,这是不可能的sudo

所以解决方案:

  1. 尝试使用sudo运行相同的内容。
  2. 在此之后。 Tryu在没有sudo的情况下运行。为我工作。