最近公司项目紧张
所以服务器环境的部署都比较急手。
本来我想着用docker容器的方式来管理各个算法各个服务
经研究一段docker技术发现确实是个好东西。
在一台服务器被多人应用的时候需要各种各样的环境来做管理
其中Anaconda等都可以做多环境隔离。跑题了……
解决CUDA10.1和NVIDIA GPU新版驱动430.xx序列造成黑屏或循环登录问题
循环问题之前遇到很多次,网络有很多解决方案方法,但是都是重新装驱动、X11配置等等。
不能解决特殊情况的服务器。
经过几天的折腾,我和陈老师究其系统原因深入了下。并把解决过程记录如下
特此向陈老师学习专研的精神,不放过疑问的态度学习。
————————————————
版权声明:本文为CSDN博主「Arnold-FY-Chen」的原创文章
原文链接:https://blog.csdn.net/XCCCCZ/article/details/101953646
到目前为止,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 update
然后执行下面的命令查看可安装的驱动版本列表发现只有430.26版,没有430.50:
ubuntu-drivers devices
那就安装这个430.26吧,执行下面的命令:
sudo apt 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/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
然后
reboot
登录可以进入桌面了,进入桌面后,执行nvidia-smi可以看到Nvidia显卡信息列出来了。执行
nvidia-persistenced --persistence-mode
可以执行缓存模式,当有多张N卡时让nvidia-smi命令很快有结果输出,也可以顺便检验一下各个NVIDIA GPU卡是否确实可以了。
上面其实还有几个疑问尚未查清:
一是 如果把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 )再逐一弄明白,反正现在对显卡驱动的路径和加载、主副显卡的切换的控制弄得比较明白了,后面查找到问题原因和予以解决应该可以,以后再回头补充。