ubuntu16.04深度學習環境的配置(Nvida gtx 750 Ti+Cuda9.0+Cudnn7.0)

vi_wsc發表於2018-07-29

在ubuntu中配置GPU的深度學習環境相較於win問題要多很多,這幾天琢磨了一下Ubuntu下的環境配置,參考很多人的部落格,也遇到了不少坑,好不容易配置成功了,希望寫下來,和大家分享,避免大家走彎路。環境的配置主要是nvidia顯示卡驅動的安裝,在驅動安裝的過程中遇到了問題,可以參考部落格後面的問題解決方案,主要步驟就是裝nvidia驅動,然後是安裝cuda和cudnn,這兩個一般問題不大。配置成功後就可以根據需要安裝自己使用的深度學習框架(比如目前比較火的tensorflow和pytorch)。這兩個框架本人建議使用Anconda安裝,一來方便安裝,二來如果出錯,可以直接刪除anconda資料夾重新安裝即可。

軟體要求

    Ubuntu16.04
    Nvidia gtx 750 Ti
    Cuda 9.0
    Cudnn 7.0

Nvidia顯示卡驅動的安裝

1 禁用顯示卡驅動nouveau

網上很多文章說在官網下載run檔案安裝,這樣安裝的成功率較低,不建議這樣做。還有在出現迴圈登入,黑屏時好多部落格說解除安裝重灌,這樣也不大提倡,具體解決這些問題看部落格後面的解決方案,親測有效。由於nvidia的顯示卡驅動是閉源軟體,因此ubuntu上預設是沒有的,自帶的顯示卡驅動叫做nouveau,安裝之前要將nouveau先禁用掉,在終端裡輸入:

sudo vim /etc/modprobe.d/blacklist-nouveau.conf

在vim編輯器中輸入以下兩行:

blacklist nouveau
options nouveau modset=0

然後配置檔案生效,終端中輸入:

sudo update-initramfs –u

2. 接下來安裝一些後面會用到的32位lib,終端中依次輸入

sudo apt-get install lib32ncurses5
sudo apt-get install lib32z1 

然後重啟,輸入:

sudo reboot

3. 再次進入系統

同時按下Ctrl+Alt+F1進入tty模式,登入賬號,輸入使用者名稱密碼。然後關閉圖形介面服務,輸入:

sudo service lightdm stop

接下來新增nvidia驅動的ppa源並進行安裝:

sudo add-apt-repository ppa:graphics-drivers/ppa

檢視可安裝的驅動版本,選擇合適的版本安裝,這裡安裝的384版本,

ubuntu-drivers devices

安裝nvidia驅動及其依賴的包,

sudo apt-get update sudo apt-get install nvidia-384
sudo apt-get install mesa-common-dev
sudo apt-get install freeglut3-dev

開啟圖形介面:

sudo service lightdm start

禁用Secure boot的問題(非常非常重要!!!好多部落格說在BIOS中禁用Secure boot,這樣也可以,但會影響到win的啟動,所以直接使用mok工具即可,如果這一步操作不成功,就九九歸一了,滑稽):

sudo moktuil --disable-validation

然後輸入8-16位密碼(這裡最好用簡單的密碼,本人之前設定很複雜的密碼,結果在後面的mok manager介面輸入密碼時經常出錯,所以如:88888888這樣的密碼很容易成功)
然後重啟,輸入:

sudo reboot

如果出現藍色介面,選擇改變secure boot狀態的選項,進去提示輸入對應位的密碼(如:enter 2 characters:則輸入密碼的前兩位),輸入幾遍後最後選擇yes啟動。
開啟終端,輸入,nvidia-smi和nvidia-settings如果輸出如下圖,說明安裝成功:
這裡寫圖片描述
這裡寫圖片描述
這時nvidia就安裝好了,如果碰到黑屏,迴圈登入,參考後面的問題解決方案

Cuda的安裝

找到下載檔案的路徑

sudo sh cuda_9.0.176_384.81_linux.run

回車,一路往下執行,直到提示“是否為NVIDIA安裝驅動nvidia-384?”,選擇否,因為已經安裝好驅動程式了,其他的全都是預設,安裝位置預設是/usr/local/cuda,配置環境變數,執行如下命令開啟profile檔案

sudo sh cuda_9.0.176_384.81_linux.run

開啟檔案後在檔案末尾新增路徑,也就是安裝目錄,命令如下:

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

儲存,然後重啟電腦

sudo reboot

測試CUDA的例子

cd  /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

如果顯示的是關於GPU的資訊,則說明安裝成功了。
最後你會看到cuda驅動、sample、tookit已經安裝成功,但是缺少一些庫。

環境變數配置
安裝完畢後,再宣告一下環境變數,並將其寫入到 ~/.bashrc 的尾部:

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
exportLD_LIBRARY_PATH=/usr/local/cuda9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然後設定環境變數和動態連結庫,在命令列輸入:

sudo gedit /etc/profile

在開啟的檔案末尾加入:

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

儲存之後,建立連結檔案:

sudo gedit /etc/ld.so.conf.d/cuda.conf

在開啟的檔案中新增如下語句:

/usr/local/cuda/lib64

然後執行

sudo ldconfig

使連結立即生效

cudnn的安裝

1) 繼續Ctrl+alt+F1進入的字元介面
2) 進入解壓後的cudnn-9.0-linux-x64-v7.0.tgz檔案cuda,在終端執行下面的指令安裝:

tar -zxvf cudnn-9.0-linux-x64-v7.0.tgz
cd cuda    
sudo cp lib64/lib* /usr/local/cuda/lib64/    
sudo cp include/cudnn.h /usr/local/cuda/include/

然後更新網路連線:

cd /usr/local/cuda/lib64/  
sudo chmod +r libcudnn.so.7.0.3  # 自己檢視.so的版本  
sudo ln -sf libcudnn.so.7.0.3. libcudnn.so.7  
sudo ln -sf libcudnn.so.7 libcudnn.so  
sudo ldconfig  

重新啟動圖形化介面

sudo service lightdm start

再Ctrl+alt+F7退出Text Mode

問題解決方案

在安裝nvidia顯示卡驅動的過程中會遇到各種各樣的問題,這裡主要說明一下常見的3個問題:

問題1: 安裝Ubuntu的時候,卡在Ubuntu的LOGO介面或黑屏

這裡寫圖片描述
問題2: 雙顯示卡安裝Nvidia驅動,迴圈登入或黑屏
這裡寫圖片描述
問題3: 啟動後黑屏,並出現ubuntu the system is running in low-graphics mode 的錯誤
這裡寫圖片描述
針對以上3個問題,我們這裡提出了相應的解決方案。
注意!!!:對於問題1和問題2,如果下面對應的方法無效,則去掉”quiet splash”後面的apci_osi或者nomodeset,在vt_handoff後面新增acpi_osi或者nomodeset!!!
方案1(針對問題1):
1. 啟動系統後在Grub介面,選擇ubuntu系統的那一行,然後按E鍵,就會進入Grub的編輯狀態。
這裡寫圖片描述
2、在quiet splash 後面加(先打空格)nomodeset,然後按F10儲存啟動
這裡寫圖片描述
3、由於那個是臨時改動,所以還需要一步,開啟終端:

sudo vi /etc/default/grub

編輯開啟的檔案,找到GRUB_CMDLINE_LINUX_DEFAULT那一行,在後面加上(在quiet splash後打一個空格) nomodeset,儲存,然後在終端輸入 :

sudo update-grub 

重啟即可。
這裡寫圖片描述
方案2(針對問題2):
問題的根源是集顯的問題(但由於我們是雙系統或雙顯示卡或著存在Grub啟動項,導致沒有解決到問題的根本!)
這一切的原因就是因為我們裝系統的時候,加的那個引數nomodeset 接下來詳細教程
1、 首先確定是否nvidia驅動已安裝,按Ctrl+Alt+F1進入tty模式,登入,然後輸入nvidia-smi如果輸出顯示卡資訊,說明安裝成功了。
2、重新啟動,在Grub介面選Ubuntu系統那一行然後按E鍵進入編輯模式:
這裡寫圖片描述

3、也是上圖那個位置,在 “quiet splash nomodeset”,主要看是否有nomodeset,有的話刪除它(可能有人是queit splash= nomodeset,刪除’= nomodeset’即可!)
4、然後在原來那個位置加 acpi_osi=linux(程式碼之間用空格隔開!),然後按F10啟動,就可以進入介面了。
5、最後一步,儲存資訊,開啟終端:

sudo vi /etc/default/grub 或 sudo gedit /etc/default/grub
#開啟檔案後將nomodest刪除替換為 acpi_osi=linux
#然後更新grub
sudo update-grub

這裡寫圖片描述
解釋一下 Grub引導了系統進行啟動,所以它的引數被傳入了,即nomodeset(呼叫集顯)如果存在,系統就會一直呼叫集顯,然後就出現迴圈登入或黑屏。由於剛剛安裝系統一般沒有驅動,很多人只能通過呼叫集顯去進入圖形介面(除非在命令列下安裝了驅動),導致了nomodeset引數的加入。
而acpi_osi=linux是告訴Grub,電腦將以Linux系統啟動,呼叫其中驅動,所以可以用Nvidia的驅動進行顯示了!
方案3(針對問題3):
當開機出現ubuntu the system is running in low-graphics mode錯誤時,按下Ctrl+Alt+F1,登入
輸入:

cd /etc/X11

然後輸入:

sudo cp xorg.conf.failsafe xorg.conf

重啟:

sudo reboot

相關文章