ubuntu16.04下安裝cuda9.0+nvidia-384+cudnn7.1.4+tensorflow1.9。
本機配置:i7-8700 GTX1070。經測試,本方案在i7-9700K 泰坦XP上也適用:
在安裝之前首先感謝實驗室師弟寫的部落格,但是寫的估計有點亂,為了實驗室以後裝cuda這些東西方便一些,這裡配上圖,改進了一下之前師弟寫的教程,更易懂一點:
1.安裝nvidia-384:
進入軟體更新,附加驅動,選擇nvidia-384,之後點選右下角的應用更改,然後輸入密碼,等它安裝:
安裝成功之後會提示我們重啟:
然後我們選擇重啟。
重啟之後我們進入終端,輸入命令:
nvidia-smi
如果能顯示出下圖類似的資訊,則說明安裝成功了:
2.檢查相關環境配置:
在安裝之前我們先更新一下,具體操作如下所示:
之後:
可能需要更新一些東西,我們輸入y,然後回車就可以啦。之後系統就會自動下載更新一些東西。裝完之後我們會顯示如下資訊:
就是不報錯就可以了,我們接下來做一些測試:
1.驗證自己的電腦是否有一個可以支援CUDA的GPU:
你可以在電腦的配置資訊中找到顯示卡的具體型號,如果你是雙系統,在windows下的裝置管理器中也可以查到顯示卡的詳細資訊;在ubuntu下面的話,你可以通過下面這行命令來簡單檢視一下NVIDIA GPU版本資訊:
lspci | grep -i nvidia
2.驗證自己的linux版本是否支援CUDA:
uname -m && cat /etc/*release
3.驗證系統是否安裝了gcc
gcc --version
其實這個剛裝完系統的話應該都裝好了,但是為了保險起見,你還是可以檢視一下,如果你沒有安裝的話,你可以採取下面的命令對其進行安裝:
sudo apt-get install build-essential
4.驗證系統是否安裝了kernel header和package development:
a.檢視正在執行的系統核心版本:
uname -r
b.安裝對應kernel版本的kernel header和package development:
sudo apt-get install linux-headers-$(uname -r)
這個的話表示系統中已經有了,不用重複安裝。
如果以上各項檢查均滿足要求的話,接下來就可以正式地進入安裝介面了,如果有些地方沒有滿足要求的話,你需要參考cuda的官方文件,裡面有詳細的針對每個問題的解決方案。在以下連結中可以找到:https://docs.nvidia.com/cuda/
3.安裝cuda:
我們按照上述方案進行選擇,之後選擇下載Base Installer。下載完成之後的話,我們會在ubuntu的下載目錄下找到:
但是我一般將其安裝在home資料夾下面,所以我需要將其複製到home資料夾下面:
之後的話,我們可以採用MD5檢驗序號,看看序號是否會對得上:
cuda_9.0.176_384.81_linux.run
可以看到這裡的版本是對到的,那麼沒有什麼問題,一切都很正常。接下來的話,我們需要採用runfile安裝cuda:
1.禁用nouveau驅動:
lsmod | grep nouveau
可以看到,我的電腦是沒有輸出的。如果有輸出的話則代表nouveau正在載入,我們需要手動禁止掉(由於我的電腦是已經被禁止掉了的,所以下面禁止的方法並沒有試驗過,大家慎重一點):
Ubuntu的nouveau禁用方法:
a、在/etc/modprobe.d中建立檔案blacklist-nouveau.conf,命令如下:
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
在檔案中輸入以下內容:
blacklist nouveau options nouveau modeset=0
b.執行命令:
sudo update-initramfs –u
之後再次檢視是否禁止成功:
lsmod | grep nouveau
若無內容輸出,則禁用成功,若仍有內容輸出,請檢查操作,並重覆上述操作。
2.按Alt + ctrl +F1進入命令列介面:
輸入自己的使用者名稱以及密碼:
這裡的話會顯示中文亂碼,我們可以下載一個包來解決這個問題:
sudo apt-get install fbterm
之後啟動它:
sudo fbterm
然後我們進入zhiqianghe這個使用者(每個人設定的不同):
su zhiqianghe
得到下面的介面:
之後我們關閉圖形化介面:
sudo service lightdm stop
之後我們再切換到我們cuda檔案的位置,在我這裡就是在當前目錄下,然後我們執行它:
sudo sh cuda_9.0.xx_xx_linux.run
對應自己的檔名稱。之後我們進入nvidia的協議裡面,需要我們看他的協議:
我們敲回車,敲到100%
之後它顯示問我們是不是接受這個東西,我們在終端輸入accept。
然後提示是否安裝nivdia的驅動,我們不需要安裝這個,輸入n,之後敲回車:
遇到提示是否安裝openGL ,選擇no(如果你的電腦跟我一樣是雙顯,且主顯是非NVIDIA的GPU在工作需要選擇no,否則可以yes),其他都選擇yes或者預設即可。(如果您的電腦是雙顯示卡且在這一步選擇了yes,那麼你極有可能安裝完CUDA之後,重啟圖形化介面後遇到登入介面迴圈問題:輸入密碼後又跳回密碼輸入介面。 這是因為你的電腦是雙顯,而且用來顯示的那塊GPU不是NVIDIA,則OpenGL Libraries就不應該安裝,否則你正在使用的那塊GPU(非NVIDIA的GPU)的OpenGL Libraries會被覆蓋,然後GUI就無法工作了。)
安裝成功後,會顯示installed,否則會顯示failed。
之後我們重新啟動圖形化介面:
sudo service lightdm start
如果能夠成功登入,則表示不會遇到迴圈登入的問題,基本說明CUDA的安裝成功了。如果不能進入的話,參考以下方案,否則跳過:
如果你遇到了重複登陸情況,不用急著重灌系統,官方教程上有提及,原因上一步的注中有提及,在安裝openGL時你可能不注意選擇了yes,請解除安裝cuda,然後重灌。 解除安裝:由於登陸進入不到圖形使用者介面(GUI),但我們可以進入到文字使用者介面(TUI)
在登陸介面狀態下,按Ctrl + Alt + f1,進入TUI 執行 $ sudo /usr/local/cuda-9.0/bin/uninstall_cuda_9.0.pl $ sudo /usr/bin/nvidia-uninstall 然後重啟 $ sudo reboot 重新安裝.run 再次安裝時請一定留意,在提示是否安裝OpenGL時,你的是雙顯示卡應該選則n。
進入ubuntu之後我們重啟電腦:
sudo reboot
之後檢查Device Node Verification
ls /dev/nvidia*
包含一個類似/dev/nvidia-uvm的,則安裝成功。
大多數結果可能會是這樣 ls: cannot access/dev/nvidia*: No such file or directory 或是這樣的,只出現 /dev/nvidia0 /dev/nvidiactl a中的一個或兩個,但沒有/dev/nvidia-num,即檔案顯示不全。 不用著急也不用急著重灌系統(我在安裝時就是這種情況),官方指導中有詳細的解決方案,但是我的方法和官方稍微有些出入。
首先要新增一個啟動指令碼(新增啟動指令碼的方法大致有兩種,我採用最直接的方法,另一種可以先建立一個檔案然後通過mv的方式移動到啟動資料夾下,可自行百度) 執行 $ sudo vi /etc/rc.local 如果你是第一次開啟這個檔案,它應該是空的(除了一行又一行的#註釋項外)。這檔案的第一行是 #!/bin/sh -e 把-e去掉(這步很重要,否則它不會載入這文字的內容) 然後把下列內容除了#!/bin/bash外複製到其中,(before exit 0 )儲存退出。
#!/bin/bash /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 下次重啟時,你應該能直接看到/dev目錄下的三個nvidia的檔案 輸入:$ ls /dev/nvidia* 結果顯示:/dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm
成功!
由於我這裡是一次成功,所以上述方案僅供參考,並沒有實踐過。
接下來我們設定環境變數:
sudo gedit /etc/profile
上述命令會開啟一個檔案,我們在末尾新增兩行:
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\ ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
我這裡裝的是cuda9.0如果你們裝的不是的話,這個cuda-9.0這個目錄就還得改一下。
如果是32位系統的話:
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib\ ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
之後我們選擇重啟電腦:
sudo reboot
a.之後我們檢查上述環境是否設定成功:
cat /proc/driver/nvidia/version
得到上述結果。
b.再驗證CUDA Toolkit:
nvcc -V
得到下圖結果:
如果你的是:
The program 'nvcc' is currently not installed. You can install it by typing: sudo apt-get install nvidia-cuda-toolkit
這樣的話,那就表明環境變數沒有新增成功,你需要按照上文中說的新增環境變數,再去新增一下。
接下來我們嘗試編譯一下cuda的例子:
我們首先需要進入NVIDIA_CUDA-9.0_Samples這個資料夾下面,在這下面開啟終端,然後make一下:
我這裡的話也是一次就成功了,如果出現沒有gcc報錯的話,我們可以安裝一下:
sudo apt-get install gcc
如果編譯成功,最後會顯示Finished building CUDA samples,如下圖所示:
之後的話,我們執行編譯生成的二進位制檔案:進入到這個NVIDIA_CUDA-9.0_Samples/bin/x86_64/linux/release資料夾下面,輸入:./deviceQuery
./deviceQuery
結果如下圖所示:看到類似如下圖片中的顯示,則代表CUDA安裝且配置成功,其中 Result = PASS代表成功,若失敗 Result = FAIL:
最後再檢查一下系統和CUDA-Capable device的連線情況:
終端輸入 : $
./bandwidthTest
看到類似如下圖片中的顯示,則代表成功:
4.安裝cudnn:
然後提示我們登入,有帳號的話就登入,沒有的話就註冊一個:
之後我們點選上圖的安裝包進行下載:
我們將其解壓,解壓之後名稱會變為cuda:
之後我們將其移入home資料夾下面,然後進入cuda的include資料夾下面,執行下面這個命令複製標頭檔案:
sudo cp cudnn.h /usr/local/cuda/include/
之後在終端進入cuda/lib64資料夾下面,執行以下命令:
#複製動態連結庫
sudo cp lib* /usr/local/cuda/lib64/
#刪除原有動態檔案
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.7
#生成軟銜接
sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7
#生成軟連結
sudo ln -s libcudnn.so.7 libcudnn.so
隨後需要將路徑/usr/local/cuda/lib64 新增到動態庫:
sudo gedit /etc/ld.so.conf.d/cuda.conf
在開啟的檔案裡面輸入:
/usr/local/cuda/lib64
終端下接著輸入命令使連結生效:
sudo ldconfig
之後檢視一下是否連結成功:
sudo ldconfig -v
可以看到,我們這裡是有這個檔案的。ldconfig命令的用途主要是在預設搜尋目錄/lib和/usr/lib以及動態庫配置檔案/etc/ld.so.conf內所列的目錄下,搜尋出可共享的動態連結庫(格式如lib*.so*),進而創建出動態裝入程式(ld.so)所需的連線和快取檔案。
之後用下面這個命令檢視是否安裝成功:
5.安裝Tensorflow:
我們首先看一下有沒有python:
一般都有,沒有的話安裝一下:
之後安裝一下pip:
sudo apt-get install python-pip
更新一下pip:
sudo pip install -U pip
安裝tensorflow-gpu 1.9.0:
sudo pip install tensorflow-gpu==1.9.0
之後進入python輸入以下命令:
import tensorflow as tf
print(tf.__version__)