深度學習-在ubuntu16.04安裝CUDA9.1-總結(問題完全解決方案)

OLDPAN發表於2018-05-14

深度學習大火,為了趕上AI的班車,許多研究生本科生們都在搞深度學習。然而深度學習環境搭建必不可少,這篇文章是我多次為實驗室搭建環境所積累起來的經驗總結,希望所有看到這篇文章的同志們,可以順利解決環境搭建的問題。

我們在用很多深度學習的框架,TensorFlow、Pytorch、caffe,都需要cuda的底層運算庫,在windows上安裝cuda庫是比較容易的事情,但是在…linux上,麻煩那就大了。

我們一般遇到的問題

在裝在n卡的伺服器上,安裝ubuntu16.04和Nvidia Driver,一般會出現以下問題:

  • 開機直接黑屏,無法安裝ubuntu系統,或者一進去卡到紫屏;
  • 可以正確安裝,但是進去的時候無限迴圈登入;
  • 安裝cuda9.1的時候會報錯:“The driver installation is unable to locate the kernel source. Please make sure that the kernel source packages are installed and set up correctly. If you know that the kernel source packages are installed and set up correctly, you may pass the location of the kernel source with the `--kernel-source-path` flag.”

以上的問題是我在多次安裝的時候遇到的問題,當然還有很多細小的問題不一一提出,如果大家按照下面的解決方案都考慮到的話,安裝應該會順利很多。

解決方案有先後順序

解決方案

1 禁用”nouveau” driver

首先將nouveau新增到黑名單blacklist.conf中,這樣在linux啟動時,就不會載入nouveau。

首先檢視檔案屬性,如果受保護則修改屬性:

ll /etc/modprobe.d/blacklist.conf

修改檔案屬性

sudo chmod 666 /etc/modprobe.d/blacklist.conf

使用vim進行修改

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

在檔案最後新增以下幾行

blacklist vga16fb 
blacklist nouveau 
blacklist rivafb 
blacklist rivatv 
blacklist nvidiafb

修改完畢後將檔案許可權改回來然後進行系統核心更新

sudo chmod 644 /etc/modprobe.d/blacklist.conf
sudo update-initramfs -u

更新完核心後重啟系統

重啟系統後使用lsmod命令檢視核心已經載入好的模組

lsmod | grep nouveau

如果執行後什麼也不顯示,說明禁用成功。

Ubuntu系統整合的顯示卡驅動程式是nouveau,不支援cuda而且效能不如nvidia driver,如果系統輸入密碼無法進入桌面,無限閃退重新輸密碼,這是因為nouveau驅動影響,可以在ubuntu系統啟動顯示登入介面後,按ctrl+alt+F1進入tty文字模式。將nouveau從linux核心解除安裝掉再安裝NVIDIA官方驅動。就可以順利進行桌面。

2 關閉你的X server服務

CTRL+ALT+F1進如無介面終端,輸入命令:sudo service lightdm stop

x服務管理伺服器上所有的顯示功能,當需要Linux提供介面的時候,系統就會建立一個或者數個X server,通過X協議跟視窗管理器互動,由獨立於系統的應用程式來產生視窗,狀態列,按鈕之類的互動介面。因為N卡驅動和X服務有一些衝突,這裡我們選擇關閉。

3 更新系統

使用命令:

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y

更新系統是必須的,但是這裡需要注意的是,CUDA9.1和ubuntu16.04中4.10-4.13的核心不相容,根據官方推薦使用4.4.0核心,如果你發現你的核心不是4.4.0(uname -r)那麼必須更換核心才可以繼續往下走,更換方法:

https://oldpan.me/archives/install-cuda9-1-unable-to-locate-the-kernel-source

4 安裝 build-essential package

命令:sudo apt-get install build-essential

一些包需要c/c++編譯器,所以這個必須安裝。

5 安裝 linux source and headers

命令:

apt-get install linux-source
apt-get source linux-image-$(uname -r)
apt-get install linux-headers-$(uname -r)

如果你的系統核心比4.4.0舊,那麼上面的命令應該可以解決“unable to locate the kernel source”這個問題,根據英偉達toolkit中的說法:”The CUDA Driver requires that the kernel headers and development packages for the running version of the kernel be installed at the time of the driver installation, as well whenever the driver is rebuilt. For example, if your system is running kernel version 3.17.4-301, the 3.17.4-301 kernel headers and development packages must also be installed.”

核心相關headers也必須都有才可以正確安裝,當然如果你的核心夠新,那麼上面第一個命令可能不適合你,也可能會遭遇上述第3個方案中說的那個問題。

安裝cuda9.1

安裝步驟和9.0相仿,具體可以看我之前寫的這篇:

https://oldpan.me/archives/pytorch-gpu-ubuntu-nvidia-cuda90

總結

linux尿性就是這樣,各種不相容各種不合適,所幸我們有強大的網路後援團,也是多虧了很多網上的同志們無私分享技術才有這些總結,希望這篇文章對大家有用。


相關文章