一.參考:
https://blog.csdn.net/QLULIBIN/article/details/78714596
https://www.jianshu.com/p/00c37b09f0f3
二.安裝過程
1、檢查自己的電腦環境是否具備安裝CUDA的條件
1) 驗證自己的電腦是否有一個可以支持CUDA的GPU
你可以電腦的配置信息中找到顯卡的具體型號,如果你是雙系統,在Windows下的設備管理器中也可以查到顯卡的詳細信息;
你也可以在ubuntu的終端中輸入命令:
$ lspci | grep -i nvidia ,
會顯示出你的NVIDIA GPU版本信息,不過不是很詳細。
然后去CUDA的官網查看自己的GPU版本是否在CUDA的支持列表中。
2) 驗證自己的Linux版本是否支持 CUDA(Ubuntu 18.04沒問題)
輸入命令:
$ uname -m && cat /etc/*release
結果顯示:
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
......
3) 驗證系統是否安裝了gcc
在終端中輸入:
$ gcc –version
結果顯示:
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609
......
若未安裝請使用下列命令進行安裝:
sudo apt-get install build-essential
4) 驗證系統是否安裝了kernel header和 package development
a、查看正在運行的系統內核版本:
在終端中輸入:
$ uname –r
結果顯示:
4.10.0-40-generic
b、在終端中輸入:
$ sudo apt-get install linux-headers-$(uname -r)
可以安裝對應kernel版的kernel header和package development
結果顯示:
......
升級了 0 個軟件包,新安裝了 0 個軟件包,要卸載 0 個軟件包,有 4 個軟件包未被升級。
表示系統里已經有了,不用重復安裝。
若以上各項驗證檢查均滿足要求,便可進行下面的正式安裝過程。如果沒有滿足要求的話,可以參考cuda的官方文檔,里面有詳細的針對每個問題的解決方案。
3、選擇安裝方式
CUDA提供兩種安裝方式:package manager安裝和runfile安裝, package manager 安裝方式相對簡單一些,但是我在閱讀別人博客的過程中發現選擇這種方式在安裝過程中問題可能多一點,失敗的概率較大。為了減少不必要的麻煩我選擇runfile安裝方式。
下載cuda安裝包:cuda官網下載,根據系統信息選擇對應的版本,runfile安裝的話最后一項要選擇 runfile文件。
下載完后,用MD5 檢驗,如果序號不和,得重新下載(由於當時沒有保存,這里我采用了別人的截圖,注意這里的cuda版本號,人家采用的cuda_8.0)
輸入命令:
$ md5sum cuda_9.0.176_linux.run
四、runfile安裝cuda
1) 禁用 nouveau驅動
終端中運行:
$ lsmod | grep nouveau
,如果有輸出則代表nouveau正在加載。需要我們手動禁掉nouveau。
Ubuntu的nouveau禁用方法:
a、在/etc/modprobe.d中創建文件blacklist-nouveau.conf
輸入命令:
$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf (利用vi編輯器編輯和保存文件)
在文件中輸入一下內容:
blacklist nouveau
options nouveau modeset=0
b、執行:
$ sudo update-initramfs –u
c、再執行:
$ lsmod | grep nouveau
若無內容輸出,則禁用成功,若仍有內容輸出,請檢查操作,並重復上述操作。
注:vi是Linux終端下或控制台下常用的編輯器,基本的操作方式為:vi /路徑/文件名
例如:vi /etc/fstab表示顯示/etc/fstab文件的內容。使用鍵盤上的Page Up和Page Down鍵可以上下翻頁;按下Insert鍵,可以見到窗口左下角有“Insert”字樣,表示當前為插入編輯狀態,這時從鍵盤輸入的內容將插入到光標位置;再按下Insert鍵,左下角將有“Replace”字樣,表示當前為替換編輯狀態,這時從鍵盤輸入的內容將替換光標位置的內容。編輯完內容后,按下Esc鍵,並輸入“:wq”,然后回車就可以保存退出。
如果不想保存而直接退出,則按下Esc鍵后,輸入“:q!”,然后回車即可。“wq”表示Write和Quit,即保存退出;“q!”表示忽略修改強行退出。
以下操作建議手機拍照,建議把下載的cuda_10.0.130_410.48_linux.run文件重命名為cuda.run並移動到Home文件夾下(為了安裝方便)
2) 重啟電腦,進入登錄界面的時候,不要登錄進入桌面(否則可能會失敗,若不小心進入,請重啟電腦),直接按Ctrl+Alt+F6進入文本模式(命令行界面),登錄賬戶。
3) 輸入
$ sudo service lightdm stop
關閉圖形化界面
4) 切換到cuda安裝文件的路徑:$ cd Home/
運行
$ sudo sh cuda_7.5.18_linux.run
按照提示一步步操作
注:a、一定要按照提示)輸入相應字符,例如有的需要輸入accept,有的需要輸入yes;
b、遇到提示是否安裝openGL ,選擇no(如果你的電腦跟我一樣是雙顯,且主顯是非NVIDIA的GPU在工作需要選擇no,否則可以yes),其他都選擇yes或者默認即可。(如果您的電腦是雙顯卡且在這一步選擇了yes,那么你極有可能安裝完CUDA之后,重啟圖形化界面后遇到登錄界面循環問題:輸入密碼后又跳回密碼輸入界面。
這是因為你的電腦是雙顯,而且用來顯示的那塊GPU不是NVIDIA,則OpenGL Libraries就不應該安裝,否則你正在使用的那塊GPU(非NVIDIA的GPU)的OpenGL Libraries會被覆蓋,然后GUI就無法工作了。)
安裝成功后,會顯示installed,否則會顯示failed。
5) 輸入 $ sudo service lightdm start 重新啟動圖形化界面。
同時按住Alt + ctrl +F1,返回到圖形化登錄界面,輸入密碼登錄。
如果能夠成功登錄,則表示不會遇到循環登錄的問題,基本說明CUDA的安裝成功了。
如果你遇到了重復登陸情況,不用急着重裝系統,官方教程上有提及,原因上一步的注中有提及,在安裝openGL時你可能不注意選擇了yes,請卸載cuda,然后重裝。
卸載:由於登陸進入不到圖形用戶界面(GUI),但我們可以進入到文本用戶界面(TUI)
在登陸界面狀態下,按Ctrl + Alt + f6,進入TUI
執行
$ sudo /usr/local/cuda-10.0/bin/uninstall_cuda_10.0.pl $ sudo /usr/bin/nvidia-uninstall
然后重啟
$ sudo reboot
重新安裝.run 再次安裝時請一定留意,在提示是否安裝OpenGL時,你的是雙顯卡應該選則n。
6) 重啟電腦,檢查Device Node Verification。
執行
$ ls /dev/nvidia*
可能出現a、b兩種結果,請對號入座。
a、若結果顯示
/dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm
或顯示出類似的信息,應該有三個(包含一個類似/dev/nvidia-nvm的),則安裝成功。
b、大多數結果可能會是這樣
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
成功!
7) 設置環境變量。
終端中輸入
$ sudo gedit /etc/profile
在打開的文件末尾,添加以下兩行。
64位系統:
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}}
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}}
保存文件,並重啟。因為source /etc/profile是臨時生效,重啟電腦才是永久生效。
這里有點與官方安裝文檔稍有不同,需要說明:
官方文檔里說只需在終端中運行上述兩條export語句即可,但如果不將它們不寫入/etc/profile文件的話,這樣的環境變量在你退出終端后就消失了,不起作用了,所以寫入才是永久的做法。
8) 重啟電腦,檢查上述的環境變量是否設置成功。
a、 驗證驅動版本
敲入
$ cat /proc/driver/nvidia/version
結果顯示
NVRM version: NVIDIA UNIX x86_64 Kernel Module 384.81 Sat Sep 2 02:43:11 PDT 2017
GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)
b、 驗證CUDA Toolkit
敲入
$ nvcc -V 會輸出CUDA的版本信息
如果是這樣的:
The program 'nvcc' is currently not installed. You can install it by typing:
sudo apt-get install nvidia-cuda-toolkit
可能是環境配置沒有成功,請重復上述步驟7)。
三、遇到的問題
- 安裝cuda環境檢查時,
輸入:
$ sudo apt-get install linux-headers-$(uname -r)
出現
“無法定位軟件包linux-header-4.15.0-29-generic”的問題,更新下apt-get即可
sudo apt-get update
2.安裝完成后文件夾檢查時,未發現該路徑,添加啟動腳本時,由於18.04按照systemd方式啟動,在添加啟動腳本時廢了些功夫,參照https://www.cnblogs.com/airdot/p/9688530.html和http://www.cnblogs.com/defifind/p/9285456.html完成
ubuntu-18.04不能像ubuntu14一樣通過編輯rc.local來設置開機啟動腳本,通過下列簡單設置后,可以使rc.local重新發揮作用。
1、建立rc-local.service文件
sudo vi /etc/systemd/system/rc-local.service
2、將下列內容復制進rc-local.service文件
[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target
3、創建文件rc.local
sudo vi /etc/rc.local
4、將下列內容復制進rc.local文件(根據上面的介紹修改內容)
#!/bin/sh
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/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
echo "看到這行字,說明添加自啟動腳本成功。" > /usr/local/test.log
exit 0
|
|
5、給rc.local加上權限
sudo chmod +x /etc/rc.local
6、啟用服務
sudo systemctl enable rc-local
sudo systemctl start rc-local.service sudo systemctl status rc-local.service
8、重啟並檢查test.log文件
cat /usr/local/test.log
如果能看到內容,說明設置成功,你就可以通過編輯rc.local文件來設置啟動腳本了
