1. 程式人生 > >伺服器(Dell T360+2塊Tesla P100)配置顯示卡驅動和cuda最終版(終於配置好了)

伺服器(Dell T360+2塊Tesla P100)配置顯示卡驅動和cuda最終版(終於配置好了)

前言: 一開始我們實驗室嘗試用deb安裝包的方法安裝NVIDIA Tesla P100對應的顯示卡驅動和CUDA,但是總是出現重複登入的問題,迫不得已我們最後採用比較繁瑣的用run檔案安裝顯示卡驅動和CUDA的方法。(還是建議先用deb檔案安裝一下試試,因為比較簡便。)
首先明確一下,我沒有安裝NVIDIA驅動程式。我改為運行了cuda.run檔案,並在提示我時安裝了NVIDIA驅動程式。
1)下載相關CUDA.run檔案。
2)安裝前準備

$ sudo apt-get update
$ sudo apt-get install build-essential

3)無需建立xorg.conf檔案。如果你有一個,刪除它(假設你安裝了新的作業系統)。

$ sudo rm /etc/X11/xorg.conf 

4)遮蔽系統自帶的顯示卡驅動nouveau
在這裡插入圖片描述
新建blacklist-nouveau.conf檔案,輸入命令:

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

往檔案中寫入:

blacklist nouveau
options nouveau modeset=0

儲存並退出。這一步是為了禁掉Ubuntu自帶開源驅動nouveau。
然後執行命令:

sudo update-initramfs -u

接下來需要重啟,輸入reboot命令,重啟後執行:

lsmod | grep nouveau

檢視nouveau模組是否被載入。如果什麼都沒輸出,則已成功禁用。
5)使用下面命令禁用X server

sudo service lightdm stop

會出現黑屏,然後同時按:Ctrl + Alt + F1,然後輸入使用者名稱和密碼。

6)轉到您擁有CUDA驅動程式的目錄,然後執行

$ chmod a+x cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb

7)現在,執行命令進行安裝,請注意,我明確不希望安裝OpenGL標誌:

$ sudo bash cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb --no-opengl-libs

8)我的會出現以下問題,如果您的沒有問題,可跳過這一步。

Installing the NVIDIA display driver... 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.

參考文章:Oldpan部落格-安裝cuda9.1核心問題:Unable to locate the kernel source
參考文章:zgwLinux-Ubuntu16.04修改核心啟動
我的解決方案是降低ubuntu16.04系統的核心。網上有很多方法,都是坑,我採用瞭如下方法,親測有效!
下面開始將我係統的核心由4.15.0-29降為4.4.0-98
(1)使用下面命令回到圖形介面

sudo service lightdm restart

(2)基本知識
linux更換核心很簡單,一個系統中可以安裝多個核心,也可以在開機的時候通過grub來選擇要啟動的核心。首先我們要做的是先看自己系統中現在存在幾個核心。

使用uname -r檢視當前使用的核心。

然後我們明確幾個有關核心的檔案:

/etc/default/grub 定義了有關啟動過程的一系列設定,比如設定核心啟動順序、系統等待啟動時間、或者啟動過程中相關設定等;
/boot/grub/grub.cfg 注意一下這個檔案是由上一個檔案而自動生成的,不建議修改這個檔案的內容
/etc/grub.d 是作業系統選單目錄,也是由系統生成,我們也不用修改。
(3)開始更換,使用下面命令安裝4.4.0的核心

sudo apt-get install linux-headers-4.4.0-98-generic linux-image-4.4.0-98-generic

執行完這個命令之後,可以到/boot中看現在存在的kernels
在這裡插入圖片描述

(4)修改/boot/grub/grub.cfg中的內容。
使用以下命令開啟這個檔案:

sudo gedit /boot/grub/grub.cfg

找到如下程式碼塊:

 linux	/boot/vmlinuz-4.15.0-29-generic root=UUID=8086863d-2eca-415d-85d1-1bebdcf0ef3a ro  quiet splash $vt_handoff
	initrd	/boot/initrd.img-4.15.0-29-generic
}

將其改為自己想使用的核心,我的如下:

linux	/boot/vmlinuz-4.4.0-98-generic root=UUID=8086863d-2eca-415d-85d1-1bebdcf0ef3a ro  quiet splash $vt_handoff
	initrd	/boot/initrd.img-4.4.0-98-generic

然後找到如下程式碼塊:

submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-8086863d-2eca-415d-85d1-1bebdcf0ef3a' {

將此行程式碼下的與4.15.0-29相關的程式碼全部刪除:

menuentry 'Ubuntu, with Linux 4.15.0-29-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-29-generic-advanced-8086863d-2eca-415d-85d1-1bebdcf0ef3a' {
		recordfail
		load_video
		gfxmode $linux_gfx_mode
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		set root='hd0,gpt3'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3  8086863d-2eca-415d-85d1-1bebdcf0ef3a
		else
		  search --no-floppy --fs-uuid --set=root 8086863d-2eca-415d-85d1-1bebdcf0ef3a
		fi
		echo	'Loading Linux 4.15.0-29-generic ...'
	        linux	/boot/vmlinuz-4.15.0-29-generic root=UUID=8086863d-2eca-415d-85d1-1bebdcf0ef3a ro  quiet splash $vt_handoff
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.15.0-29-generic
	}
	menuentry 'Ubuntu, with Linux 4.15.0-29-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-29-generic-init-upstart-8086863d-2eca-415d-85d1-1bebdcf0ef3a' {
		recordfail
		load_video
		gfxmode $linux_gfx_mode
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		set root='hd0,gpt3'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3  8086863d-2eca-415d-85d1-1bebdcf0ef3a
		else
		  search --no-floppy --fs-uuid --set=root 8086863d-2eca-415d-85d1-1bebdcf0ef3a
		fi
		echo	'Loading Linux 4.15.0-29-generic ...'
	        linux	/boot/vmlinuz-4.15.0-29-generic root=UUID=8086863d-2eca-415d-85d1-1bebdcf0ef3a ro  quiet splash $vt_handoff init=/sbin/upstart
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.15.0-29-generic
	}
	menuentry 'Ubuntu, with Linux 4.15.0-29-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-29-generic-recovery-8086863d-2eca-415d-85d1-1bebdcf0ef3a' {
		recordfail
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		set root='hd0,gpt3'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3  8086863d-2eca-415d-85d1-1bebdcf0ef3a
		else
		  search --no-floppy --fs-uuid --set=root 8086863d-2eca-415d-85d1-1bebdcf0ef3a
		fi
		echo	'Loading Linux 4.15.0-29-generic ...'
	        linux	/boot/vmlinuz-4.15.0-29-generic root=UUID=8086863d-2eca-415d-85d1-1bebdcf0ef3a ro recovery nomodeset 
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.15.0-29-generic
	}

然後點選儲存!
(5)在/boot目錄中,執行以下命令刪除掉這個目錄內所有4.15核心的檔案

sudo rm -rf *4.15.0-29*

(6)執行下面命令來對你之前的設定進行更新。

sudo update-grub

(7)最後重啟,輸入下面命令檢查是否以更換到了4.4.0核心

uname -r

如果顯示核心已經更改為4.4.0,則從第5步開始重新安裝!
9)安裝過程中
接受EULA條件
安裝NVIDIA驅動程式說“是”
安裝CUDA工具包+驅動程式說“是”
安裝CUDA樣品說“是”
不用Nvidia重建任何Xserver配置。
10)安裝應該完成,但是我有以下小問題,如果您沒有問題,可以跳過這一步。

Missing recommended library: libGLU.so 
Missing recommended library: libX11.so 
Missing recommended library: libXi.so 
Missing recommended library: libXmu.so
.......

原因是缺少相關的依賴庫,安裝相應庫就解決了:

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev 

再次執行第7步進行安裝,就不再提示了。
11)重啟電腦,檢查Device Node Verification
執行:

 ls /dev/nvidia*

結果顯示

/dev/nvidia0  /dev/nvidiactl  /dev/nvidia-modeset  /dev/nvidia-uvm
或者
/dev/nvidia0      /dev/nvidiactl      /dev/nvidia-uvm

則安裝成功。
如果不顯示這幾個檔案,搜尋以下部落格進行解決:
QLULIBIN-Ubuntu 16.04 上安裝 CUDA 9.0 詳細教程
12)新增環境路徑變數:
終端中輸入

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}}

儲存檔案,並重啟。因為source /etc/profile是臨時生效,重啟電腦才是永久生效。
這裡有點與官方安裝文件稍有不同,需要說明:
官方文件裡說只需在終端中執行上述兩條export語句即可,但如果不將它們不寫入/etc/profile檔案的話,這樣的環境變數在你退出終端後就消失了,不起作用了,所以寫入才是永久的做法。

重啟電腦,檢查上述的環境變數是否設定成功
a、 驗證驅動版本,在終端中輸入以下命令:

cat /proc/driver/nvidia/version

結果顯示

[email protected]:~$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  384.130  Wed Mar 21 03:37:26 PDT 2018
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)

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)。
13)嘗試編譯cuda提供的例子
在簡書上搜文章:永興呵呵噠-ubuntu16.04以deb包方式安裝cuda9.0(package manager installation)
14)重新啟動。一切都應該沒問題。

六、遠端連線安裝

這裡安裝的是 windows 訪問Ubuntu的,你們可以在windows 系統執行mstsc,選擇ip埠訪問遠端Ubuntu桌面。
這個方便所有人一塊使用伺服器

  1. 安裝xrdp
    使用快捷鍵"Ctrl+Alt+T"開啟一個終端視窗,輸入"sudo apt-get install xrdp"–>回車–>輸入root使用者的密碼–>回車–>輸入"y"–>回車,安裝完成。
  2. 安裝vnc4server
    輸入"sudo apt-get install vnc4server"–>回車–>輸入root使用者的密碼–>回車–>輸入"y"–>回車,安裝完成。
  3. 安裝xfce4
    輸入"sudo apt-get install xubuntu-desktop"–>回車–>輸入root使用者的密碼–>回車–>輸入"y"–>回車–>輸入"echo “xfce4-session” >~/.xsession"–>回車–>輸入"sudo service xrdp restart"–>回車,安裝完成。
  4. 解決黑屏問題
    vim /etc/xrdp/startwm.sh
    #在./etc/X11/Xsession前插入
    xfce4-session
    #重啟xrdp
    cd /etc/init.d/
    ./xrdp restart