前言: 一開始我們實驗室嘗試用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.
參考文章:https://oldpan.me/archives/install-cuda9-1-unable-to-locate-the-kernel-source
參考文章:https://www.cnblogs.com/boyzgw/p/6227430.html
我的解決方案是降低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
則安裝成功。
如果不顯示這幾個文件,參考以下博客進行解決:
https://blog.csdn.net/QLULIBIN/article/details/78714596
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
結果顯示
gs@gs:~$ 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提供的例子
見文章:http://www.lxweimin.com/p/71bc5f02ecd2
14)重新啟動。一切都應該沒問題。
六、遠程連接安裝
這里安裝的是 windows 訪問Ubuntu的,你們可以在windows 系統運行mstsc,選擇ip端口訪問遠程Ubuntu桌面。
這個方便所有人一塊使用服務器
https://www.linuxidc.com/Linux/2017-09/147112.htm
- 安裝xrdp
使用快捷鍵"Ctrl+Alt+T"打開一個終端窗口,輸入"sudo apt-get install xrdp"-->回車-->輸入root用戶的密碼-->回車-->輸入"y"-->回車,安裝完成。 - 安裝vnc4server
輸入"sudo apt-get install vnc4server"-->回車-->輸入root用戶的密碼-->回車-->輸入"y"-->回車,安裝完成。 - 安裝xfce4
輸入"sudo apt-get install xubuntu-desktop"-->回車-->輸入root用戶的密碼-->回車-->輸入"y"-->回車-->輸入"echo "xfce4-session" >~/.xsession"-->回車-->輸入"sudo service xrdp restart"-->回車,安裝完成。 - 解決黑屏問題
vim /etc/xrdp/startwm.sh
在./etc/X11/Xsession前插入
xfce4-session
重啟xrdp
cd /etc/init.d/
./xrdp restart