centos下theano以及CUDA的配置
今天终于搞定了centos下theano以及GPU配置,这里记录一下。
1.theano的安装(见前面博文,这里再重新记录一下)
(1)# 安装 theano所需的包
sudo yum install python-devel python-nose python-setuptools gcc gcc-gfortran gcc-c++ blas-devel lapack-devel atlas-devel
(2)# 安装pip和python库
sudo easy_install pip
sudo pip install numpy
sudo pip install scipy
(3)# 安装theano
sudo pip install theano
(4)# 测试
python -c "import theano;theano.test()"
假如能够跑起来,就安装好了。
2.cuda的安装(之前已经写过记录,这里贴过来,方便查看)
目前使用的GPU型号为:Tesla C2075
(1)安装前的工作
要在centos下面安装cuda,首先要检查一下内容:
A:有可以运行cuda的GPU
B:有支持cuda的Linux系统
C:安装了GCC
D:下载GPU驱动、NVIDIA CUDA Toolkit
对于A,可以用下面命令查看:
$ lspci | grep -i nvidia
如果这条命令报错,如“bash: lspci: command not found”,则可以用下面的命令查看:
$ /sbin/lspci | grep -i nvidia
输完命令之后,会显示安装的NVIDIA的显卡信息。
对于B,可以用以下命令查看:
$ uname -m && cat /etc/*release
这时候就会显示已经安装好的系统的版本信息。
对于C,可以用以下命令查看:
$ gcc --version
这时就会显示安装的GCC版本
下载tesla C2075驱动和cuda toolkit
Tesla C2075驱动:http://www.nvidia.cn/Download/index.aspx?lang=cn
Cuda toolkit : https://developer.nvidia.com/cuda-toolkit-archive
下载驱动的时候,最好选择使用英文版的,版本选择请根据机器的显卡类型和配置,安装文件的格式建议最好使用run的,因为安装起来比较简单。
(2)开始安装
A 禁用nouveau ( 针对CentOS 6.X系统 )
方法:
1)把驱动加入黑名单中
# vi /etc/modprobe.d/blacklist.conf
在其中添加:blacklist nouveau
2)使用dracut重新建立 initramfs image file
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
3)将系统切换至文本模式
# vi /etc/inittab
将5改成3
重启之后,系统会进入文本模式,若仍然进入图形模式,则说明没有成功禁用nouveau。
A 禁用nouveau ( 针对CentOS 7.X系统 )
1)把驱动加入黑名单
# vi /usr/lib/modprobe.d/dist-blacklist.conf
注释掉 blacklist nvidiafb
在其中添加:
blacklist nouveau
options nouveau modeset=0
2)使用dracut 重新建立 initramfs image file
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
3)将系统启动切换至文本模式
# systemctl set-default multi-user.target
( 切换至图形界面的命令为: # systemctl set-default graphacal.target )
检查是否切换成功的命令为:
# system get-default
重启电脑,就会发现进入文本模式。
B 运行安装文件
1)进入文本模式后,登录root账户,进入含有驱动文件的文件夹,然后运行命令:
# sh NVIDIA-Linux-x86_64-340.87.run
会出现安装界面。
2)安装的过程中一开始的选项根据需要选择即可,当提示是否升级X configuration的时候,选择默认的NO,不要选择YES。
(这样选择是因为有的显卡不具有显示功能,比如Tesla C2075,假如选择yes的话,C2075的配置文件会覆盖掉原来的配置文件,导致无法显示。假如显卡具有显示功能,那么选择YES的话,应该不会有问题。)
3)当提示是否安装32位兼容的时候,我选择的是yes,安装完之后没有出现错误,当然也有人说选NO,这里不是特别清楚。
4)安装完成之后,把系统切换回图形化界面,然后重启机器,假如发现进不了图形化界面,则按ctrl+alt+F2进入文本模式,登录root账户,然后将/etc/X11下面的xorg.conf文件删掉即可。
C 安装cuda-toolkit
在文本模式下,进入有cuda-toolkit的文件夹,运行命令:
# sh cuda_6.5.14_linux_64.run
即可开始安装。
1)提示是否安装显卡驱动的时候,选择NO,因为上一步已经安装了显卡驱动
2)剩下的选择默认即可。
3)配置环境变量
# export PATH=/usr/local/cuda-6.5/bin:$PATH
# export LD_LIBRARY_PATH=/usr/local/cuda-6.5/lib64:$LD_LIBRARY_PATH
若安装的不是cuda6.5,则根据自己的真实情况改过来就行。
(3)测试
进入/usr/local/cuda-6.5/samples/1_Utilities文件夹,里面有好几个测试样例,常用的是检查设备信息的deviceQuery和测试通讯带宽的bandwidthTest,我们选择deviceQuery,进入之后,运行命令:
# make
# ./deviceQuery
假如成功运行的话,会出现设备的详细信息,最后会出现pass提示。
(4)卸载cuda-toolkit
进入/usr/local/cuda/bin文件夹,然后运行命令:
# ./uninstall_cuda_**.pl
3.在theano中配置cuda
配置好cuda之后,有一个测试theano是否成功调用cuda的脚本,程序如下:
##################################################
from theano import function, config, shared, tensor
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 %f seconds" % (iters, t1 - t0))
print("Result is %s" % (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')
##################################################
将上面程序保存为“test.py”,然后运行命令“THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python test.py”,会提示nvcc路径不对,此时可以使用“nvcc -V ”命令查看,若输入之后没有提示nvcc的详细信息或者没有该命令,则说明nvcc没有配置正确,那么可以按照如下命令进行配置:
# echo 'export PATH=/usr/local/cuda-6.5/bin:$PATH'>>~/.bashrc
# echo 'export LD_LIBRARY_PATH=/usr/local/cuda-6.5/lib64:$LD_LIBRARY_PATH'>>~/.bashrc
# source ~/.bashrc
配置完之后,重新输入nvcc -V就可以看到详细信息了。
配置完nvcc之后,再次使用前面的命令运行test.py程序,如果一切正确的话,则会显示程序的运行时间以及“used the GPU”,说明theano中调用GPU成功,若是显示使用CPU,则说明没有成功调用GPU。
在其他用户下同样出现找不到NVCC的时候,也只需将上面的3条命令配置一下即可。
4.安装cuDNN
cuDNN是加速组件,下载地址为:https://developer.nvidia.com/cudnn,本文以v5.1.5为例,解压后有两个文件夹:cuda/include和cuda/lib64。lib64中有:libcudnn.so,libcudnn.so.5,libcudnn.so.5.1.5和libcudnn_static.a4个文件,include中有cudnn.h一个文件。安装方法如下:
(1)进入lib64文件夹,运行命令:
# cp lib* /usr/local/cuda/lib64/
进入include文件夹,运行命令:
# cp cudnn.h /usr/local/cuda/include
(2)更新软连接
cd /usr/local/cuda/lib64/
rm -rf libcudnn.so libcudnn.so.5
ln -s libcudnn.so.5.1.5 libcudnn.so.5
ln -s libcudnn.so.5 libcudnn.so
如需更换cudnn版本,则替换原来的libcudnn*,重新建立软连接并更新链接库:sudo ldconfig
参考:http://blog.****.net/jhszh418762259/article/details/52958287?locationNum=8&fps=1
5.设置cnmem
在用户主目录下,建立文件.theanorc (有个点.)
打开并输入以下即可:
[lib]
cnmem=1
6.GPU的指定
当机器安装有多块GPU的时候,可以使用命令进行指定:
$ export CUDA_VISIBLE_DEVICES=2
指定GPU,亦可以在运行命令“THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32
python test.py”的时候,设置其中的“device=gpu2”或者“device=gpu0”来实现。
关于GPU标号和GPU卡的对应关系,可以使用以下命令查看:
$ cd /usr/local/cuda-6.5/sample/1_utilities/deviceQuery/
$ make (第一次使用需要make,之后不再需要)
$ ./deviceQuery
此时会显示机器所有GPU的详细信息,如显示:
……
Detected 4 CUDA Capable device(s)
Device 0:“Tesla K40c”
CUDA Driver Version / Runtime Version 6.5/6.5
CUDA Capability Major/Minor version number 3.5
……
这里的意思就是检测到4块GPU卡,其中的K40C的标号是0,以此类推。
参考资料:
[1]http://deeplearning.net/software/theano/install.html (官方theano安装教程)
[2]http://www.myexception.cn/cuda/2017261.html (cuda和theano安装)
[3]http://jingyan.baidu.com/article/9f63fb91d7e6b5c8400f0e0c.html (centos安装显卡驱动)
[4]http://deeplearning.net/software/theano/tutorial/using_gpu.html#using-gpu (theano使用GPU)
[5]http://blog.****.net/jhszh418762259/article/details/52958287?locationNum=8&fps=1 (安装cuDNN)