前言: 一开始我们实验室尝试用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_handoffinitrd /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_handoffinitrd /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' {recordfailload_videogfxmode $linux_gfx_modeinsmod gzioif [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fiinsmod part_gptinsmod ext2set root='hd0,gpt3'if [ x$feature_platform_search_hint = xy ]; thensearch --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 8086863d-2eca-415d-85d1-1bebdcf0ef3aelsesearch --no-floppy --fs-uuid --set=root 8086863d-2eca-415d-85d1-1bebdcf0ef3afiecho '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_handoffecho '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' {recordfailload_videogfxmode $linux_gfx_modeinsmod gzioif [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fiinsmod part_gptinsmod ext2set root='hd0,gpt3'if [ x$feature_platform_search_hint = xy ]; thensearch --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 8086863d-2eca-415d-85d1-1bebdcf0ef3aelsesearch --no-floppy --fs-uuid --set=root 8086863d-2eca-415d-85d1-1bebdcf0ef3afiecho '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/upstartecho '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' {recordfailload_videoinsmod gzioif [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fiinsmod part_gptinsmod ext2set root='hd0,gpt3'if [ x$feature_platform_search_hint = xy ]; thensearch --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 8086863d-2eca-415d-85d1-1bebdcf0ef3aelsesearch --no-floppy --fs-uuid --set=root 8086863d-2eca-415d-85d1-1bebdcf0ef3afiecho '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
结果显示
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提供的例子
在简书上搜文章:永兴呵呵哒-ubuntu16.04以deb包方式安装cuda9.0(package manager installation)
14)重新启动。一切都应该没问题。
六、远程连接安装
这里安装的是 windows 访问Ubuntu的,你们可以在windows 系统运行mstsc,选择ip端口访问远程Ubuntu桌面。
这个方便所有人一块使用服务器
- 安装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