關於在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