天天看點

Ubuntu16.04安裝cuda9.0+cudnn7.0

Ubuntu16.04安裝cuda9.0+cudnn7.0

這篇記錄拖了好久,估計是去年6月份就已經安裝過幾遍,然後一方面因為俺比較懶,一方面後面沒有經常在自己電腦上跑算法,比較少裝cuda和cudnn。但是最近課餘時間還行,索性一起整理出來,友善以後檢視。

檢查自己的計算機是否具備CUDA安裝條件

  • 檢查GPU是否支援CUDA
    lspci | grep -i nvidia
               
    顯示出NVIDIA GPU版本資訊
    Ubuntu16.04安裝cuda9.0+cudnn7.0
  • 去CUDA的官網檢視自己的GPU版本是否在CUDA的支援清單中(https://developer.nvidia.com/cuda-gpus)
    uname -m && cat /etc/*release
               
    Ubuntu16.04安裝cuda9.0+cudnn7.0
  • 驗證是否安裝了gcc
    gcc --version
               
    如果沒有,那就安裝之
    sudo apt install gcc
               
  • 驗證系統是否安裝kernel header和 package development
    uname -r
    sudo apt install linux-headers-$(uname -r)
               
    Ubuntu16.04安裝cuda9.0+cudnn7.0
    滿足要求後,便可進行下面的正式安裝過程。

    注意:CUDA提供兩種安裝方式:package manager安裝和runfile安裝。

    這裡我選擇runfile安裝.。采用runfile安裝,CUDA自帶的驅動可能無法定位核心資訊,是以我們先安裝NVIIDA驅動。

安裝NVIDIA驅動

  • 事先有裝過但失敗的,先解除安裝
    sudo apt remove --purge nvidia*
               
  • 禁用nouveau驅動
    lsmod | grep nouveau
               

    有輸出,則代表nouveau正在運作, 需要我們手動禁掉nouveau。

    在Ubuntu16.04中,我們可以通過以下操作禁用nouveau:

    1).在/etc/modprobe.d中建立檔案blacklist-nouveau.conf

    sudo vim /etc/modprobe.d/blacklist-nouveau.conf
               
    在檔案中輸入以下内容:
    blacklist nouveau
    options nouveau modeset=0
               
    2)執行
    sudo update-initramfs -u
               
    3)檢視nouveau是否已經成功禁用
    lsmod | grep nouveau
               
    注意:若無内容輸出,則禁用成功。若仍有内容輸出,請檢查上述操作,并重複。操作無誤但仍有輸出,則可重新開機,進入使用者登入界面時(不要登入進桌面),按Ctrl+Alt+F1進入字元終端界面,輸入使用者名和密碼進行登入,登入成功後,再次檢視
    這時,我們應該已經成功禁用了nouveau,無輸出
  • 關閉圖形化界面
    sudo service lightdm stop
               
  • 安裝驅動

    NVIDIA驅動安裝也有多種方式,runfile檔案形式的安裝和apt安裝

    我用的是apt安裝:

    1).添加Graphic Drivers PPA

    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt-get update
               
    2).尋找合适的驅動版本
    ubuntu-drivers devices
               
Ubuntu16.04安裝cuda9.0+cudnn7.0
如上圖,我的顯示卡它建議的是 nvidia-418

  3).安裝nvidia driver
           
sudo apt install nvidia-418
           
速度比較慢,應該不是ubuntu源的問題,用了牆外的伺服器apt install速度也還是不快,安心等”戴“吧
4).安裝完成後,重新開機
           
sudo reboot
           
5).進入桌面,執行下面的指令,檢視驅動的安裝狀态
           
sudo nvidia-smi
 sudo nvidia-settings
           
![](https://img2018.cnblogs.com/blog/1092854/201903/1092854-20190327215611050-860464418.png)
           

安裝CUDA

  • 到NVIDIA官網中,找到CUDA9.0并下載下傳,下載下傳連結

之後,按Ctrl+Alt+F1進入字元終端界面,登入後關閉圖形化界面

sudo service lightdm stop
           

這邊我其實用的是指令行直接下載下傳,因為我不喜歡等下再去找檔案,而且cuda那個貌似直接下載下傳也有點毒,每次到最後就停在那裡了,令人生氣,是以可以的話我一般用指令行下載下傳(下面就有一個例子)

wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run

找到下載下傳檔案,鍵入類似指令安裝:

sudo sh cuda_9.0.176_384.81_linux-run
           

會有很長一段,直接ctl+c跳過,出現類似下面的選項,除了第二個選擇“是否為NVIDIA安裝驅動”,

選擇否,不然之前的顯示卡驅動就白折騰了。

可以按給出的選擇

Ubuntu16.04安裝cuda9.0+cudnn7.0

最後會看到cuda驅動、sample、tookit已經安裝成功,但缺少一些庫。

Ubuntu16.04安裝cuda9.0+cudnn7.0
添加這些庫
           
sudo apt install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
           
重新啟動圖形化界面
           
sudo service lightdm start
           
同時按Alt + ctrl +F7,傳回到圖形化登入界面。
           
如果能夠成功登入,則表示不會遇到循環登入的問題,基本說明CUDA的安裝成功了
檢查Device Node Verification
           
ls /dev/nvidia*
           
Ubuntu16.04安裝cuda9.0+cudnn7.0
a、若結果顯示
           
/dev/nvidia0    /dev/nvidiactl    /dev/nvidia-uvm
           
或顯示出類似的資訊,應該有三個(包含一個/dev/nvidia-uvm的),則安裝成功。
           
如果隻有兩個或者一個都沒有,文末有記錄解決方法。
設定環境變量
           
sudo vim ~/.bashrc
           
注意:.bashrc是目前使用者生效的環境變量,(比如我是lzm)如果想對全部使用者生效,可以在/etc/profile檔案中設定
按i(inset)進行編輯,在打開的檔案末尾,添加以下兩行,然後按esc 後按:wq儲存退出
           
export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
           
儲存檔案,讓環境變量生效
           
source ~/.bashrc
           
檢查上述的環境變量是否設定成功。

  a.驗證驅動版本
           
cat /proc/driver/nvidia/version
           
b.驗證CUDA Toolkit
           
nvcc -V
           
c.最後,嘗試編譯cuda提供的例子,看cuda能否正常運作

  打開終端輸入
           
cd /home/lzm(user_name)/NVIDIA_CUDA-9.0_Samples
 make
           
系統就會自動進入到編譯過程,整個過程大概需要十幾到二十分鐘,請耐心等待。如果出現錯誤的話,系統會立即報錯停止。如果編譯成功,最後會顯示Finished building CUDA samples。運作編譯生成的二進制檔案,編譯後的二進制檔案預設存放在NVIDIA_CUDA-9.0_Samples/bin中。
接着在終端中輸入 :
           
cd bin/x86_64/linux/release
 ./deviceQuery  

           
結果如下圖所示,其中 Result = PASS代表成功,CUDA安裝且配置成功,若失敗 Result = FAIL
           
Ubuntu16.04安裝cuda9.0+cudnn7.0
最後檢查一下系統和CUDA-Capable device的連接配接情況
           
./bandwidthTest

           
看到顯示Result=PASS則成功

![](https://img2018.cnblogs.com/blog/1092854/201903/1092854-20190327220028933-368340141.png)
           

安裝CUDNN

cuDNN的安裝是建立在我們成功安裝cuda的基礎上的,本來我是想用終端直接下載下傳cudnn的像上面的cuda一樣,但是當我wget的時候發現報錯了:(HTTP request sent, awaiting response… 404 Not Found) 才想起來cuDNN是需要登陸NVIDIA賬号才能下載下傳的。

官網下載下傳連接配接

Ubuntu16.04安裝cuda9.0+cudnn7.0

這裡我以tgz檔案的安裝為例

Attention:

(這邊有個要注意的,因為我之前下載下傳過的是tgz壓縮包,直接按下面指令解壓就行。然後今天下載下傳是以solitairetheme8結尾的,然後剛開始我不知道linux是用什麼指令解壓這種檔案的,是以就去查了一下,就是直接重命名這玩意然後按下面指令解壓就🆗了)

  • 解壓tgz檔案
tar -xzvf cudnn-9.0-linux-x64-v7.tgz
           
  • 複制檔案到cuda安裝路徑下
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
   sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
   sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
           
  • 然後檢視cudnn版本,出現如下圖則安裝成功
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
           
Ubuntu16.04安裝cuda9.0+cudnn7.0
Bingo!!!好了,記錄一遍也好累啊,真想再重新驗證一遍看看是不是完美相容。可是我有點懶,不想去開其他的機子了,隻測試了Ubuntu16.04的可以安裝,其他的版本不曉得,不過基本思想是一樣的

可能出現的問題

ls /dev/nvidia*
           

可能出現

ls: cannot access/dev/nvidia*: No such file or directory
           

或者隻出現

/dev/nvidia0    /dev/nvidiactl
           

選項中的一個或兩個,但沒有/dev/nvidia-uvm,即檔案顯示不全。

解決方法:

首先要添加一個啟動腳本,如果是第一次打開這個檔案,它應該是空的(除了一行又一行的#注釋項外)。這檔案的第一行是

#!/bin/sh -e
           
把-e去掉(這步很重要,否則它不會加載這文本的内容),然後把下列内容複制到exit 0之前并儲存退出。
           
/sbin/modprobe nvidia

if [ "$?" -eq 0]; then
# Count the number of NVIDIA controllers found.
NVDEVS=`lspci | grep -i NVIDIA`
N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`

N=`expr $N3D + $NVGA - 1`
for i in `seq 0 $N`; do
mknod -m 666 /dev/nvidia$i c 195 $i
done

mknod -m 666 /dev/nvidiactl c 195 255

else
exit 1
fi

/sbin/modprobe nvidia-uvm

if [ "$?" -eq 0 ]; then
# Find out the major device number used by the nvidia-uvm driver
D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`

mknod -m 666 /dev/nvidia-uvm c $D 0
else
exit 1
fi
           

再次檢視

ls /dev/nvidia*
           

結果顯示:

Ubuntu16.04安裝cuda9.0+cudnn7.0

其中三個包括 /dev/nvidia-uvm即可。