Ubuntu环境下NVIDIA GPU驱动问题笔记
在运维实验室GPU服务器的过程中,遇到的NVIDIA驱动问题。连续遇到后,结合网上的资料及与朋友的探讨来看,该问题比较常见,但有条理的、全的文档却没看到,因此我在此处记录踩坑和出坑的经验。
Ubuntu环境下NVIDIA GPU驱动问题笔记
1 问题描述
GPU服务器安装的是Ubuntu 16.04
LTS操作系统,每隔一段时间需要重启、重新开机后(因为停电、维护等),都会发现测试nvidia-smi
命令时,提示NVIDIA-SMI无法与NVIDIA驱动通信的报错,具体报错如下:
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
重新安装驱动后,有时候正常,有时候会出现GUI工作不正常的循环登录问题,具体表现为:GUI界面用户登录,输入正确的密码大约3秒钟后,并未进入桌面,而是屏幕一黑,又回到登录界面。不论试多少次,都是反复、重复登录,始终无法进入GUI桌面。
2 原因分析
据查,该问题的原因大致是,Ubuntu会自动更新Linux内核,而且Ubuntu对Linux内核的更新还比较频繁,重启后就会换成升级的新版本的Linux内核。而NIVIDIA驱动安装时是针对安装时的内核版本,编译生成驱动的内核模块的。因此,当内核的版本升级时,此前安装的NVIDIA驱动因内核模块无法与新内核版本兼容,而导致NVIDIA驱动无法工作,于是在通过nvidia-smi
检视GPU状态时出现无法与NVIDIA驱动正常通信,需要重新安装并运行最新版驱动的提示。
而GUI出现的循环登录问题,暂时还不理解具体的原因,应该是和GUI渲染与显卡的配置有关。服务器一般有一个显卡用于GUI渲染,和加速计算的GPU性能卡不同。具体原理存疑。
3 解决方案
首先,在NVIDIA官网下载最新版的GPU驱动;
随后,将驱动的*.run
文件权限设置为可执行:
1 | chomod 764 NVIDIA-Linux-x86_64-xxx.xx.run |
接下来,临时关闭显示服务lightdm
:
1 | sudo service lightdm stop |
此时屏幕进入字符模式,但未出现Shell,键盘按键Ctrl+Alt+F1~6
调出Shell(F1~6任选一个);
接下来需要输入登录的用户名、密码;
因为接下来装驱动需要以root
身份运行,因此这里直接切换到root
用户:
1 | sudo su root |
接下来卸载原驱动:
1 | /usr/bin/nvidia-uninstall |
- 注意:如果此前是用官方
*.run
文件安装的,需要通过官方卸载程序卸载;
或:
1 | sudo apt-get purge nvidia-* |
- 如果之前是通过apt安装的,则通过
apt-get
卸载干净;如果此前是通过*.run
文件安装的,该命令无法有效卸载。
卸载完成后,重新安装新驱动:
1 | ./NVIDIA-Linux-x86_64-xxx.xx.run |
一般按照默认选项即可;
注意:如果遇到循环登录问题,安装驱动时需要加上--no-opengl-files
选项:
1 | ./NVIDIA-Linux-x86_64-xxx.xx.run --no-opengl-files |
关于这个
--no-opengl-files
选项在该问题中的作用,暂时找不到可靠的、准确的解释。以下解释摘自:Ubuntu16.04 CUDA与OpenGL分离的环境配置(侵删) 这样安装的驱动不包含OpenGL部分,也就是不使用NVIDIA的驱动去加速Ubuntu的GUI界面和其它3D应用。OpenGL这部分就有劳Intel的核显了。(你要是还要用Ubuntu玩游戏,那请忽略此文,何必呢,装个Windows双系统呗,或者KVM+GPU Pass through,至于KVM怎么弄,有时间再详细写)。
这样,用核显做显示,性能很够用了,而且驱动很稳定,GUI再也没死过了。AMD的显卡驱动也还不错,插一个低端AMD卡专门做显示也是可以的。NVIDIA的私有驱动就专注于CUDA吧。
安装完成后,启动显示服务即可:
1 | service lightdm start |
至此,屏幕回到GUI界面,应可正常操作。
4 相关链接
我在搜索该问题时,发现这两种问题还是比较常见的,但网上的资料要么是没有针对性,要么是梳理混乱,不全,可读性、可操作性差,以下列举提对要点的几个链接: