我正在尝试使用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
所以这些似乎是存根......不确定为什么。
是否有一些技巧可以让它发挥作用?
答案 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/394 和 http://kkjkok.blogspot.in/2016_08_01_archive.html
答案 4 :(得分:1)
在Ubuntu 14.10上将NVIDIA驱动程序更新为378.09后,我遇到了同样的错误,
尽管lib文件的所有权利都设置正确
感谢@PhoenixQ,我尝试使用sudo
运行并且它有效。
之后我尝试再次运行sudo
,错误消失了。我不确定ecxactly发生了什么,但也许在调用sudo
期间配置了一些内容,这是不可能的sudo
。
所以解决方案:
sudo
运行相同的内容。 sudo
的情况下运行。为我工作。