如何在Ubuntu 16.04上使用GPU来运行Theano?

3
我使用下面的脚本来测试GPU是否工作:

我使用以下脚本来测试GPU是否工作:

#!/usr/bin/env python
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time

vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000

rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print f.maker.fgraph.toposort()
t0 = time.time()
for i in xrange(iters):
    r = f()
t1 = time.time()
print 'Looping %d times took' % iters, t1 - t0, 'seconds'
print 'Result is', r
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')

当我运行它时,会得到以下结果:

http://pastebin.com/wM9jaGMF

其中有趣的部分在结尾处。
ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: ('nvcc return status', 1, 'for cmd', 'nvcc -shared -O3 -m64 -Xcompiler -DCUDA_NDARRAY_CUH=c72d035fdf91890f3b36710688069b2e,-DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION,-fPIC,-fvisibility=hidden -Xlinker -rpath,/home/moose/.theano/compiledir_Linux-4.4--generic-x86_64-with-Ubuntu-16.04-xenial-x86_64-2.7.11+-64/cuda_ndarray -I/home/moose/.local/lib/python2.7/site-packages/theano/sandbox/cuda -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -I/home/moose/.local/lib/python2.7/site-packages/theano/gof -o /home/moose/.theano/compiledir_Linux-4.4--generic-x86_64-with-Ubuntu-16.04-xenial-x86_64-2.7.11+-64/cuda_ndarray/cuda_ndarray.so mod.cu -L/usr/lib -lcublas -lpython2.7 -lcudart')
WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available  (error: cuda unavailable)

我的系统

  • 我使用的是Ubuntu 16.04。
  • 我通过标准仓库安装了CUDA(V7.5.17)。nvcc --version可以正常工作。
  • 我通过pip安装了Theano。
  • 我安装了CuDNN 4(可以与TensorFlow配合使用)。
  • 我设置了CUDA_ROOT=/usr/bin/LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/(不确定是否正确)。

我的~/.theanorc文件内容如下:

[global]
exception_verbosity=high
device=gpu
floatX=float32

[cuda]
root=/usr/bin/

路径

我认为从标准仓库安装和手动安装可能会导致不同的结果。下面是一些路径,可能会揭示出一些问题:

/usr/bin/nvcc
/usr/lib/x86_64-linux-gnu/libcuda.so
/usr/lib/x86_64-linux-gnu/libcudart.so
/usr/lib/nvidia-cuda-toolkit
/usr/include/cudnn.h

问题

如何使其工作?


一个可能的方法:阅读CUDA安装指南,并仔细遵循其中包含的验证步骤,然后再开始使用Theano。 - Robert Crovella
@RobertCrovella 是的,我知道。但是我已经安装了一个可用的CUDA(我知道它可用,因为它可以与TensorFlow一起使用)。我真的不想手动安装它,然后可能无法使Theano和TensorFlow都正常工作。 - Martin Thoma
好的,那么这只是一个Theano设置问题。因为您列出的“验证”步骤(例如nvcc --version)并没有验证太多内容。 - Robert Crovella
2个回答

4

我不确定是什么解决了这个问题,但以下内容中的一个或两个可能起到了作用(来源)。

sudo apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ libopenblas-dev libblas-dev git
echo -e "\n[nvcc]\nflags=-D_FORCE_INLINES\n" >> ~/.theanorc

0

我写了一个更通用的答案,以便其他人也可以在类似的情况下找到帮助。首先,请确保已安装 Theano 依赖项,如此处所述。您应该按照此处所述安装 NVIDIA 驱动程序,使用sudo ubuntu-drivers devices确定推荐哪个驱动程序,并使用sudo apt-get install nvidia-xxx(xxx = 当前时间的 375)进行安装。然后,打开“附加驱动程序”窗口(从终端运行software-properties-gtk --open-tab=4),查看是否正在使用 NVIDIA 驱动程序。接下来,根据指南设置 ~/.theanorc 文本文件:

[global]
exception_verbosity=high
device=gpu
floatX=float32

[cuda]
root=/usr/bin/

[nvcc]
flags=-D_FORCE_INLINES

[lib]
cnmem = 1

[lib] 部分不是必需的,但在我的笔记本电脑上,将其添加到 .theanorc 后性能提高了约 2 倍。


这似乎没有提供问题的答案。一旦您拥有足够的声望,您将能够在任何帖子上评论。还要检查这个我可以做什么代替 - thewaywewere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接