1. 程式人生 > >Linux下CUDA+CUDNN+TensorFlow安裝筆記

Linux下CUDA+CUDNN+TensorFlow安裝筆記

之前用過TensorFlow的CPU版,現在買了個新電腦,就想把GPU也用起來,又因為目前大部分工作是在linux下做,所以有了在linux下安裝cuda和TensorFlow的計劃,快一個禮拜一直在搞這件事,重灌了N次系統,cuda和TensorFlow終於是能用了。姑且寫一下攻略吧,也算自己留個檔。

注意事項

  1. 此攻略適用於廣大使用Nvidia顯示卡的Ubuntu使用者,CentOS,RedHat,Windows等等使用者請自行閱讀Nvidia各種安裝說明,A卡使用者出門左轉。
  2. 雙顯示卡使用者注意,按此攻略安裝的nvidia顯示卡驅動可以支援TensorFlow等等的機器學習計算,然而並不能優化圖形介面。這個主要是因為我目前還沒找到好的辦法進行雙顯示卡切換,搞了幾次都搞到重灌,心累,所以現在圖形化介面還是用的Intel集顯。如果大家有好辦法歡迎共享。
  3. 關於軟體版本以及安裝方法,這裡安裝的是CUDA-8.0+CUDNN-7+TensorFlow-0.11.0,Nvidia驅動和CUDA都是指令碼安裝,CUDNN是Debian包安裝,TensorFlow是pip直接安裝。

廢話不多說了。

原料

  • 一個有Nvidia顯示卡的電腦
    要知道N卡的型號,不知道的可用命令sudo lspci | grep -i nvidia檢視,我的是GTX960M
  • 一個Ubuntu系統
    同樣要明確系統版本,我的是16.04
  • GCC
    GCC為系統自帶程式,無需自行安裝。有安裝教程說gcc需要降級到5以下,這個主要針對CUDA和你的Ubuntu系統版本,我用的gcc 5.4版本裝CUDA8完全沒有問題,Ubuntu14.04的使用者最好降一降。
  • CUDA8安裝指令碼
    貼個連結指路,官網現在預設你安裝的是9.0版本,然而9.0版本需要顯示卡驅動至少在384及以上,出於穩妥考慮裝了8.0版本,同樣對驅動有要求(在375及以上)。
  • CUDNN安裝包
    連結指路下載前需要註冊,然後要填個問卷,按步驟來就行很快,然後按照你的系統版本和你將要安裝的cuda版本選擇下載哪一個,Ubuntu使用者不要選power8,可以看到一共有三個包可以下載,分別是Runtime Library,Developer Library和Code Samples,都下了吧反正也不大(你走)。
  • 驅動安裝指令碼
    連結指路,按照提示找到適合自己電腦顯示卡型號的驅動,下載得到一個指令碼(.sh)檔案。

步驟

解除安裝原有的N卡驅動

這一步主要是針對像我這種以前為了各種謎之目的裝過Nvidia驅動而版本又不夠高導致後面CUDA裝了不能用的熊程式設計師,以及看了別家攻略安裝失敗了的你,不要覺得之前裝過Nvidia驅動裝錯了就可以直接丟開
執行以下命令:

sudo apt-get --purge remove nvidia-*

對於之前從Nvidia官網下載安裝過驅動的,如果你的驅動版本小於CUDA的要求(8.0至少375,9.0至少384),找到之前安裝指令碼所在的目錄,執行以下命令:

sudo sh 你的指令碼.sh --uninstall
禁用開源驅動nouveau

Ubuntu系統預設使用的驅動即為開源的驅動nouveau,我們需要禁用它並且之後也不需啟用。
編輯系統配置檔案blacklist.conf

sudo gedit /etc/modprobe.d/blacklist.conf

在其中新增下面兩行:

blacklist nouveau
options nouveau modeset=0

儲存,退出,執行如下命令使配置生效:

sudo update-initramfs -u

重啟電腦,至此開源驅動就已被禁用了,可用如下命令進行檢查:

lsmod | grep nouveau

如果系統什麼也沒返回,說明nouveau禁用成功

關閉UEFI模式

這一步主要是安裝驅動的需要。在UEFI模式下安裝驅動需要為驅動生成簽名,公鑰需要儲存在linux核心信任的某目錄下,關於這方面沒有找到什麼資料,目前大部分的解決辦法都是直接關閉UEFI模式。
UEFI的關閉方法與電腦型號有關,我的戴爾靈越是F2進入BIOS後在Boot標籤下選擇關閉Secure Boot,之後就可以選擇從UEFI模式切換到Legacy模式,其他電腦型號請百度。

結束X server服務

在終端輸入以下命令:

sudo service lightdm stop

之後如果直接宕機請重啟檢視nouveau禁用設定是否正確。正常情況會黑屏,然後按Ctrl+Alt+F1進入字元終端介面,輸入使用者名稱和密碼通過驗證。

安裝Nvidia驅動

進入存放驅動指令碼的目錄,執行以下命令:

sudo chmod a+x 你的指令碼.sh
sudo ./你的指令碼.sh -no-x-check -no-nouveau-check -no-opengl-files

執行指令碼的三個引數是為了防止接下來迴圈登入。然後按照步驟進行就可以了,如果提示無法安裝32-bit lib不用擔心,回車繼續就好。
安裝完成後重新啟動X server服務:

sudo service lightdm start

如果執行以上命令後能夠正常進入圖形介面,恭喜你安裝驅動成功。

安裝CUDA

進入CUDA安裝指令碼所在的目錄,執行以下命令:

sudo sh 你的指令碼.sh

首先會出現一段極長的協議,最後輸入accept表示同意,然後會選擇是否安裝nvidia驅動367,選擇no,遇到詢問是否安裝opengl的地方如果你是雙顯示卡也務必選擇不安裝,其他同意或預設即可。
安裝完成後需要將CUDA的路徑加入環境變數,首先開啟~/.bashrc檔案,新增以下程式碼:

export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

中間不要加多餘的空格,如果你安裝的不是8.0版本則修改版本號,儲存,然後開啟/etc/profile,文末加上以下程式碼:

export PATH=/usr/local/cuda/bin:$PATH

儲存,至此CUDA安裝完畢。

安裝CUDNN

進入CUDNN安裝包所在目錄,執行以下命令:

sudo dpkg -i runtime包.deb
sudo dpkg -i developer包.deb
sudo dpkg -i 程式碼sample包.deb

至此,CUDNN安裝完成。

驗證CUDA和CUDNN是否安裝成功

CUDNN的code sample可以用來檢查CUDNN和CUDA是否安裝成功,執行以下命令:

sudo cp -r /usr/src/cudnn_samples_v7/ $HOME
cd $HOME/cudnn_samples_v7/mnistCUDNN
sudo make clean
sudo make
sudo ./mnistCUDNN

正常情況下執行以上程式碼會得到Test passed!的結果。如果在make步出錯,那麼可能gcc需要降級;如果出現CUDA driver version is insufficient for CUDA runtime version,那麼或許你的顯示卡驅動安裝失敗,或許你之前安裝過低版本的nvidia的顯示卡又沒有刪掉。

安裝TensorFlow

如果以上步驟都沒有問題,恭喜你可以開始安裝TensorFlow了。這裡採用的是用pip安裝的方法。首先安裝pip和python dev:

sudo apt-get install python-pip python-dev

安裝完畢後執行如下命令:

sudo pip install https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.11.0-cp27-none-linux_x86_64.whl

如果出現無法訪問的情況,翻個牆或者去清華映象站安裝吧,注意選擇tensorflow和python版本,通常來說是能夠正常下載安裝的。
至此TensorFlow安裝完成。

驗證TensorFlow是否安裝成功以及是否是否能夠使用GPU

注意:如果是關閉UEFI模式安裝的GPU驅動,那麼在使用GPU加速機器學習時也需要關閉UEFI模式,否則會報錯。
開啟一個python終端:

python

逐行敲入以下程式碼:

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)

如果出現以下字樣,說明TensorFlow安裝成功,並且能夠成功啟用GPU。

Ctrl+D關閉python終端。
如果出現以下錯誤,或許UEFI模式沒有關閉,或許顯示卡驅動安裝錯誤。

參考文件

  • Nvidia Driver官方安裝指南
  • Nvidia Cuda官方安裝指南
  • Nvidia CUDNN官方安裝指南