Ubuntu14.04下安装CUDA&Theano

安装CUDA,THEANO等,前前后后遇到了不少问题,特别是对于Ubuntu新手来讲,很多时候都是不知所措的,所以只能多花时间搜集资料啦。另外由于实验室电脑配置也就那样,勉强装好这两个库,希望能帮到大家。

主要参考的资料:
艰辛五天:Ubuntu14.04+显卡驱动+cuda+Theano环境安装过程——参考cuda的驱动安装和cuda runfile的安装
Ubuntu-安装-theano+caffe-超详细教程 ——参考安装theano
Ubuntu Theano CUDA——参考安装theano出现的问题
ubuntu+cuda+theano+keras搭建基于GPU的深度学习环境——参考安装theano出现的问题及theano的配置文件

特别感谢这些作者!!!

电脑配置
OS:Ubuntu14.04
python 2.7.6
显卡:Nvidia GT 620
安装的文件
cuda_8.0.44_linux.run
cudnn-8.0-linux-x64-v5.1.tgz
等依赖库

安装CUDA

确保使用Nvidia显卡驱动

执行操作(1.1)或操作(1.2)
(1.1) 在官网下载NVIDIA驱动,根据自己买的型号选择下载,放到 /home/yourpath/ 目录下面,我下载的是NVIDIA-Linux-x86_64-367.48.run.

(1.2) 在官网下载cuda安装文件,这里我直接下载的cuda的runfile文件)

(2) 屏蔽开源驱动nouvear,加入黑名单

  • 方式一:打开.conf文件后,将下面两条语句添加进去
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modset=0
  • 方式二:打开.conf文件后,在末尾添加以下内容保存
sudo gedit /etc/modprobe.d/blacklist.conf
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
(这里有一行空格)

如果执行(3)操作,请继续操作(4)-(7),否则跳到操作(8)执行
(3) 删除旧NVIDIA驱动(实际上这条操作我没有执行,因为我在随后直接先安装的CUDA)

sudo apt-get --purge remove nvidia-*(需要清除干净)
sudo apt-get --purge remove xserver-xorg-video-nouveau

(4) 重启电脑。

(5) 按Ctrl + Alt +F1(F1~F6均可)到x-server, Ctrl+Alt+F7是返回

(6) 关闭图形环境,否则驱动无法正常安装

输入用户名和密码登录,然后键入命令后执行

sudo service lightdm stop

成功关闭服务后将出现:lightdm stop/waiting

(7) 进入驱动所在的文件夹,这里就是/home/xxx,执行

sudo sh XXX.run

最重要的一步,安装程序问你是否使用nv的xconfig文件,这里一点要选yes,否则在启动x-window时不会使用nv驱动。
(8) 执行一条更新语句后重启电脑

sudo update-initramfs -u

再执行sudo lspci | grep nouveau没有输出,说明禁用成功

(9) 按ctrl+alt+F1(F1-F6均可)),进入命令行界面,按ctrl+alt+F7是返回,进入后输入用户名及密码登录,再执行命令关闭X-server

sudo service lightdm stop

(10) cd到cuda的安装包路径下,执行安装指令

sudo sh cuda.xxx.run

(11) 安装时,按enter到100%后accept

  • 第一个出现的是是否安装驱动(如果前面已经自己安装过相应的nvidia显卡驱动时选择no,否则选择yes);
  • 第二个出现openGL,如果是双显卡选择no,不然容易出现循环登录的问题;
  • 随后的X-config选择yes
  • 然后安装路径等选项按enter选择默认路径安装,其他选项键入yes。

然后等待安装,没有failed表示安装成功。

(12) 安装完后,执行语句打开桌面环境

sudo service lightdm start

(13) 添加路径
执行sudo gedit ~/.bashrc将以下语句添加至文件末尾

export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
export CUDA_ROOT=$CUDA_ROOT:/usr/local/cuda-8.0/
export CUDA_INC_DIR=/usr/local/cuda8.0/include:$CUDA_INC_DIR

同样执行以下命令,并将上面的内容添加至末尾

sudo gedit ~/.profile

再执行以下命令,并将上面的内容添加至末尾

sudo gedit /etc/profile

更新配置,执行以下命令,无结果输出

source ~/.bahsrc

测试CUDA

(1) 查看显卡的相关的状态,执行

nvidia-smi

(2) 查看NVCC,出现类似以下内容

nvcc -V i

(3) 然后跳转至cuda的sample文件夹下,我的sample在安装时默认安装在主文件夹下,如

cd /NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery

然后make,没有出现错误就不用管,缺少什么就安装什么,比如我在安装时出现

则需要安装相应文件。

sudo apt-get install g++

然后重新make,成功后执行

./deviceQuery

出现RESULT=PASS,如下图内容表示成功安装CUDA,没成功的话重启电脑后再试试:

安装cudnn

cuDNN是专门针对deep learning框架设计的一套GPU计算加速方案,首先需要注册一下,然后才能下载cuDNN。然而cudnn得在显卡计算容量3.0及3.0以上可用

进入Downloads目录,解压并进入解压目录下

tar xvzf cudnn-8.0-linux-x64-v5.1.tgz
cd cuda
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include
sudo cd -a cuda/lib64/libcudnn*  /usr/local/cuda-8.0/lib64
sudo chmod a+r /usr/local/cuda-8.0/lib64/libcudnn*

2 安装Theano

预安装工具

sudo apt-get install python-dev python-pip python-nose gcc g++ git gfortran

预安装库

# 安装blas,Ubuntu下对应的是libopenblas,其它操作系统可能需要安装其它版本的blas——这是个OS相关的。
sudo apt-get install libopenblas-dev


# 安装lapack,Ubuntu下对应的是liblapack-dev,和OS相关。
sudo apt-get install liblapack-dev


# 安装atlas,Ubuntu下对应的是libatlas-base-dev,和OS相关。
sudo apt-get install libatlas-base-dev

安装numpy和scipy

后面安装的每一步测试为 0 errors(即装完numpy后,测试numpy,再装scipy,再测试scipy),才能进入下一步

  • 安装这两个Python库有点问题,如果使用apt-get安装,后面的test不能通过。如果使用pip安装,又得考虑各种依赖关系。
  • 因此,先用apt-get安装,测试,不通过再卸载,最后再使用pip安装再测试。这样,既能不考虑依赖关系,又能通过后面的test()测试。
#安装numpy和scipy
sudo apt-get install python-numpy
sudo apt-get install python-scipy
sudo apt-get install python-sklearn

#卸载numpy和scipy
sudo apt-get remove python-numpy
sudo apt-get remove python-scipy

# 安装numpy
sudo pip install numpy

# 测试numpy
# 如果没有安装python-nose,测试会出错!
python -c "import numpy;numpy.test()"

# 安装scipy
sudo pip install scipy

# 测试scipy
python -c "import scipy;scipy.test()"

测试numpy的结果:

测试scipy的结果:


我测试时出现错误:

重装后测试:

安装Theano库

前面无错误,开始安装theano

# 安装Theano
sudo pip install Theano

# 测试Theano
python -c "import theano;theano.test()"
  • 测试时,如果提示PyCUDA import错误,

则需要安装pycuda,PyCUDA需要Boost为基础,于是安装Boost

sudo apt-get install libboost-all-dev
# or you can call
sudo apttitude search boost
  • 然后直接可以使用pip安装PyCUDA。

发现直接用pip安装会出错,需要使用configure才行,于是用git克隆项目,然后手动配置安装。命令:

sudo apt-get install libboost-all-dev
git clone --recursive http://git.tiker.net/trees/pycuda.git
cd pycuda
sudo ./configure.py --cuda-root=/usr/local/cuda --cudadrv-lib-dir=/usr/lib/x86_64-linux-gnu --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib --boost-python-libname=boost_python --boost-thread-libname=boost_thread --no-use-shipped-boost
make -j 4
sudo python setup.py install
  • 出现cuda_ndarray.cu错误

ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: libcublas.so.8.0 cannot open shared object file: No such file or directory
这里写图片描述
执行命令:

sudo ldconfig /usr/local/cuda-8.0/lib64
  • 出现ImportError:No module named nose-parameterized 错误,执行
sudo pip install nose_parameterized
  • import theano时,出现ERROR

(theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: 和WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: cuda unavailable)

原因是libc的一个错误,需要设置nvcc.flags=-D_FORCE_INLINES

  • 配置Theano
# 在主目录下新建.theanorc文件
cd
sudo gedit .theanorc

# 在.theanorc中输入下面的内容
[global]
floatX=float32
device=gpu
# optimizer=fast_compile # 如果cudnn安装成功并可用的话,可以开启
# optimizer_including=cudnn # 如果cudnn安装成功并可用的话,可以开启

[blas]  
ldflas=-lopenblas  

[nvcc]  
fastmath=True  
flags=-D_FORCE_INLINES

[cuda]  
root=/usr/local/cuda-8.0/

测试theano

将下列代码保存为py文件,如test_theano.py

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'

执行python test_theano.py
如果GPU正常使用的话,出现Used the gpu,大概零点几秒结束;否则出现used the cpu,大概需要2~3秒。

  • 如果出现下面错误,我的就出现过这个问题

则需要更改权限,把权限改成当前用户可写的模式

sudo chown -R 'username' 更改哪个路径下的权限

其余问题参考

  • 参考:Using the GPU & THEANO_FLAGS & THEANORC
  • CUDA Toolkit默认安装在/usr/local/cuda-8.0/,含有bin, lib, include等子文件夹。/usr/local/cuda-8.0/bin/文件夹称为cuda root文件夹。
  • 使用Theano时,必须告诉它CUDA root文件夹,有3种方法:

    • 定义$CUDA_ROOT环境变量。例如 CUDA_ROOT=/usr/local/cuda-8.0/bin/
    • 在THEANO_FLAGS中添加cuda.root标识。例如THEANO_FLAGS='cuda.root=/usr/local/cuda-8.0/bin/'
    • 在.theanorc文件夹中添加[cuda]

      [cuda]
      root=/usr/local/cuda-8.0/bin/

  • 还需要更改设备选项(gpu or gpu0 or gpu1),设置默认的浮点计算类型(float32)

    • 方法一:THEANO_FLAGS='cuda.root=/usr/local/cuda-8.0/bin/,device=gpu,floatX=float32'
    • 方法二:设置.theanorc文件的[global]选项:

      [cuda]
      root=/usr/local/cuda-8.0/bin/
      [global]
      device = gpu
      floatX = float32

  • 注意:

    • 如果电脑有多个GPU,而配置是‘device=gpu’,驱动会选择其中一个使用(一般是 gpu0)。可以使用 nvida-smi 改变这一规则。
    • 可以通过指定 ‘device=gpuX’来选择一个特定的GPU。
    • 默认使用GPU计算。如果GPU有问题,Theano会退回使用CPU。可以通过设置标识‘force_device=True’,当GPU不能使用时,弹出错误信息。

至此,CUDA和THEANO 的安装算是告一段落啦,希望各位也能顺利完成安装。\^_^/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值