到目前爲止,CUDA最新版仍然是10.1版,只是出了update2 https://developer.nvidia.com/cuda-downloads,自CUDA10.1開始,使用run文件安裝過程中有了較大的變化,步驟進行了簡化,也不再包含opengl文件所以無需--no-opengl-files參數,但是對於裝有集成顯卡+N卡的雙顯卡的環境,安裝CUDA10.1有可能會造成問題。
訓練用的AI服務器使用的OS是Ubuntu16.04,桌面使用的Unity(注意:如果使用GNOME,在使用 sudo apt install nvidia-430安裝驅動後據說可以登錄進入桌面,沒有下面說的Unity的循環登錄問題),安裝集成顯卡(ASPEED)和另外有幾張RTX2080TI卡,根據某模型的需要,安裝CUDA10.1後(沒有選擇GPU Driver 418.xx,只安裝了CUDA Tookit),重啓後服務器黑屏了桌面始終出不來,於是用最新的430.50的run文件安裝GPU驅動,然後桌面是可以出來了,但是輸入用戶和密碼後又退回登錄狀態,也就是循環登錄,進不去桌面,把以前對付低版本CUDA (<=10.0)和低版本NVIDIA GPU驅動(<400)造成黑屏或循環登錄的多種辦法都試盡了,還是循環登錄進不去。
後來把430版驅動卸掉又用CUDA10.1內自帶的418版的驅動安裝了一下,還是不行,折騰了一天第二天想既然run文件安裝的不行,那用二進制驅動文件安裝驅動效果會怎麼樣呢,於是查了下網上的ppa源按照下面的步驟添加ppa源:
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
然後執行下面的命令查看可安裝的驅動版本列表發現只有430.26版,沒有430.50:
ubuntu-drivers devices
那就安裝這個430.26吧,執行下面的命令:
sudo apt-get install nvidia-430
這個命令會安裝NVIDIA GPU卡的430.26版驅動到/usr/lib/nvidia-430/下,而且同時生成一個/usr/lib/nvidia-430-prime目錄,這個nvidia-430-prime下面有ld.so.conf文件,是用於指定主顯卡的驅動的加載路徑的,可以用於加載N卡自己的也可以是集成顯卡的驅動,默認值是/usr/lib/nvidia-430-prime,也就是指向這個目錄自己,所以,可以建立鏈接把你打算做爲主顯卡的顯卡的驅動文件鏈接到這個目錄下,也可以修改ld.so.conf內容,把路徑改爲要加載的驅動所在的路徑。
安裝完後,執行下面的命令生成NVIDIA卡的xorg.conf配置文件:
sudo nvidia-xconfig
再reboot,結果這時會循環登錄,不理它,按CTRL+ALT+F1進入console並登錄進去,如果打算把集成顯卡作爲主顯卡,以讓xorg等進程不佔用N卡的內存,確認下面這些給集成顯卡用的intel相關驅動包是否存在,不存在則安裝:
sudo apt-get install –reinstall xserver-xorg-video-intel libgl1-mesa-glx libgl1-mesa-dri
然後,爲了使intel卡和NVIDIA卡同時可用(驅動在系統啓動時都需加載),必須修改/usr/lib/nvidia-430-prime/ld.so.conf內容(這是指向自己所在的這個目錄,這是錯誤的,需要修改!因爲/usr/lib/nvidia-430-prime/下面並沒有顯卡驅動文件),把
/usr/lib/nvidia-430-prime
修改爲(紅色爲必須,黑色爲可選):
/usr/lib/i386-linux-gnu/mesa
/usr/lib/i386-linux-gnu/mesa-egl
/usr/lib/x86_64-linux-gnu/mesa
/usr/lib/x86_64-linux-gnu/mesa-egl
/usr/lib/nvidia-430
/usr/lib32/nvidia-430
然後有兩種辦法讓上面的配置生效,一是執行下面的切換主卡的命令觸發配置生效
sudo prime-select intel
注意:如果主卡已經是Intel卡,那麼需要先執行
sudo prime-select nvidia
再執行:
sudo prime-select intel
第二種辦法就是直接執行sudo ldconfig命令。這樣,上面的配置纔會生效到/etc/ld.so.cache文件裏,系統重啓時纔會加載指定的驅動文件。
最後,以二進制文件方式安裝驅動後,需要把/usr/lib/nvidia-430/bin路徑加入到PATH中,不然執行nvidia-smi之類的命令會報錯說找不到這個文件,如果還報錯說某些so文件找不到之類,則需要把/usr/lib/nvidia-430路徑加入到LD_LIBRARY_PATH中。
修改 ~/.bashrc,增加:
export PATH=$PATH:/usr/lib/nvidia-430/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia-430
安裝完nvidia-430,nvidia-smi和nvidia-persistenced都安裝在/usr/lib/nvidia-430/bin/下,執行
sudo nvidia-persistenced --persistence-mode
可以執行緩存模式,當有多張N卡時讓nvidia-smi命令很快有結果輸出,也可以順便檢驗一下各個NVIDIA GPU卡是否確實可以了。
然後
reboot
登錄可以進入桌面了,進入桌面後,執行nvidia-smi可以看到Nvidia顯卡信息列出來了。
但是有個奇怪問題是 系統重啓後再執行
sudo nvidia-persistenced --persistence-mode
總是說 command not found,哪怕你再手工再執行一遍
export PATH=/usr/lib/nvidia-430/bin:$PATH
還是沒用,但其實文件是存在的,執行
sudo /usr/lib/nvidia-430/bin/nvidia-persistenced --persistence-mode
是可以的。
reboot後執行nvidia-persistenced報錯找不到nvidia-persistenced時,不要安裝它(它其實是存在的,只是要使用全路徑執行,不知道爲何),注意單獨安裝nvidia-persistenced會觸發先刪除nvidia-430驅動:
sudo apt-get install nvidia-persistenced
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
bbswitch-dkms dkms lib32gcc1 libc6-i386 libjansson4 libvdpau1 libxnvctrl0
mesa-vdpau-drivers nvidia-prime nvidia-settings screen-resolution-extra
vdpau-driver-all xserver-xorg-legacy
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
libcuda1-430 nvidia-430 nvidia-opencl-icd-430
The following NEW packages will be installed:
nvidia-persistenced
0 upgraded, 1 newly installed, 3 to remove and 56 not upgraded.
這時需要再安裝nvidia-430,安裝nvidia-430時默認會卸載掉已安裝的nvidia-persistenced:
sudo apt-get install nvidia-430
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libcuda1-430 nvidia-opencl-icd-430
The following packages will be REMOVED:
nvidia-persistenced
The following NEW packages will be installed:
libcuda1-430 nvidia-430 nvidia-opencl-icd-430
0 upgraded, 3 newly installed, 1 to remove and 56 not upgraded.
另外,上面其實還有幾個疑問尚未查清:
一是 如果把N卡設置爲主卡的話,爲何Unity桌面能出來但是仍舊是循環登錄;
二是 爲何用CUDA10.1的run文件安裝即使沒有選擇安裝它內部自帶的418版GPU driver也會把系統搞黑屏(這意味着把主顯卡(集成顯卡或者N卡)的驅動的加載都搞沒了),CUDA10.1相對於以前的CUDA版本有較大變化,懷疑它有bug,在安裝過程中可能修改了庫文件的加載配置還是怎麼的,不清楚;
三是 NVIDIA 4xx序列的GPU驅動相對於以前3xx序列的驅動似乎有了大的改動,用4xx驅動的run文件安裝後會導致Unity桌面循環登錄總進不去的問題,用以前解決舊版CUDA和3xx序列驅動時期解決問題的辦法去試圖解決都沒用,這是爲什麼不知道;
四是 服務器使用的集成顯卡是知名度不高的ASPEED,不是英特爾HD 530/620/630之類的顯卡,是不是ASPEED本身有什麼兼容性不好的地方,換成英特爾的顯卡就沒這問題?不知道。
因爲服務器要急用,沒多少時間讓我折騰,這些問題只能等我後面雙11時自己買了機器後(我中意的居然國慶節一分錢都沒降價,t...d )再逐一弄明白,反正現在對顯卡驅動的路徑和加載、主副顯卡的切換的控制弄得比較明白了,後面查找到問題原因和予以解決應該可以,以後再回頭補充。