【问题标题】:How can I use Theano with GPU on Ubuntu 16.04?如何在 Ubuntu 16.04 上将 Theano 与 GPU 一起使用?
【发布时间】:2016-05-26 22:57:08
【问题描述】:

我使用以下脚本来测试 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。
  • 我已经通过标准 repos (V7.5.17) 安装了 CUDA。 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

问题

我怎样才能让它工作?

【问题讨论】:

  • 一种可能的方法:阅读the CUDA installation guide,并仔细遵循它,包括其中包含的验证步骤,然后再继续使用theano。
  • @RobertCrovella 是的,我知道。但我确实有一个工作的 CUDA 安装(我知道它工作正常,因为它与 TensorFlow 一起工作)。我真的很想避免手动安装它,之后可能无法让它同时适用于 Theano 和 TensorFlow
  • 好的,那只是 theano 设置问题。因为您列出的“验证”步骤(例如nvcc --version)并没有进行太多验证。

标签: ubuntu theano theano-cuda


【解决方案1】:

我不确定是什么解决了这个问题,但以下其中一项或两项 (source)

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

【讨论】:

    【解决方案2】:

    我在这里写一个更一般的答案,以防其他人发现自己处于类似情况。 首先,查看安装了 theano 依赖项,如 here 所述。您应该按照here 的说明安装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 倍。

    【讨论】:

    猜你喜欢
    • 2016-08-20
    • 2017-04-25
    • 2018-05-29
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多