安装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/
- 定义$CUDA_ROOT环境变量。例如
还需要更改设备选项(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 的安装算是告一段落啦,希望各位也能顺利完成安装。\^_^/