关于在Linux上搭Cuda环境,做个笔记备忘。
1. 安装GPU Driver
在Ubuntu中可以通过System Settings -> Software & Updates安装:
详细可参考https://help.ubuntu.com/community/BinaryDriverHowto/Nvidia 。装好后,执行nvidia X server settings可以看到硬件信息,还可以进行相关设置(如双显示器等)。
不嫌麻烦的话也可以从官网下驱动来装: http://www.nvidia.com/Download/index.aspx?lang=en-us
2. 安装CUDA Toolkit
从官网上选择对应平台的meta-data安装包:https://developer.nvidia.com/cuda-downloads。然后安装:$ sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb
比如在ubuntu平台上就是:
$ sudo dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb
然后更新源和安装CUDA Toolkit:
$ sudo apt-get update
$ sudo apt-get install cuda
然后编译sample。默认toolkit安装在/usr/local/cuda中,先进到/usr/local/cuda/bin中,执行以下命令安装sample,<dir>为安装的目标目录。
$ cuda-install-samples-7.0.sh <dir>如:
$ cuda-install-samples-7.0.sh /home/jzj/source
再到安装目标目录中编译:
$ cd /home/jzj/source/NVIDIA_CUDA-7.5_Samples
$ make
按官方文档中运行以下sample可以测试CUDA是否work:
$ cd bin/x86_64/linux/release
$ ./deviceQuery
$ ./bandwidthTest
如果很不幸地哪步失败了,可能就需要按官方文档里用runfile来装了。
http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html#axzz3sm26mXcH
3. 其它
要想利用N卡GPU来做通用计算,需要用CUDA Toolkit来开发。好在大多数时候领域相关的toolkit已经封闭好GPU和CPU backend。如Torch7在编译时会通过cmake检测CUDA环境,如果有的话就会编译支持(http://torch.ch/docs/getting-started.html)。另外如Theano,只需按http://deeplearning.net/software/theano/install.html#gpu-linux上设置配置文件.theanorc即可:
[global]
device = gpu
floatX = float32
[cuda]
root=/usr/local/cuda
如果import theano时出现
Theano: CNMeM is disabled, CuDNN not available
的错误,请参照http://www.cnblogs.com/ZJUT-jiangnan/p/5532724.html的方法。注意其中的cnmem=1如果还是出错的话就调成更小。比如:
[lib]
cnmem=0.8
安装cuDnn可以参照http://deeplearning.net/software/theano/library/sandbox/cuda/dnn.html。简单的说就是到Nvidia的官网(https://developer.nvidia.com/rdp/cudnn-download)下载安装包安装即可。
以上两个安装好后加载theano时会出现类似下面提示,就说明安装成功了。
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import theano
Using gpu device 0: GeForce GTX 970 (CNMeM is enabled with initial size: 80.0% of memory, cuDNN 5005)
>>>
之后按官方网站上分别用CPU和GPU backend跑例程,可以看到针对该例子GPU计算在性能上有质的提升。
jzj@jlocal:~/code$ THEANO_FLAGS=mode=FAST_RUN,device=cpu,floatX=float32 python check1.py
[Elemwise{exp,no_inplace}(<TensorType(float32, vector)>)]
Looping 1000 times took 1.726703 seconds
Result is [ 1.23178029 1.61879337 1.52278066 ..., 2.20771813 2.29967761
1.62323284]
Used the cpu
jzj@jlocal:~/code$ THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python check1.py
Using gpu device 0: GeForce GTX 970
[GpuElemwise{exp,no_inplace}(<CudaNdarrayType(float32, vector)>), HostFromGpu(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.442874 seconds
Result is [ 1.23178029 1.61879349 1.52278066 ..., 2.20771813 2.29967761
1.62323296]
Used the gpu