解决Ubuntu20.04插入英伟达计算卡后无法开机问题-Ubuntu双显卡切换
- 问题详述
- 问题分析
- 问题解决-ubuntu双显卡切换
问题详述
本人新配了一台个人使用的机器学习服务器。对环境配置可能有影响的硬件如下:华硕B660M-plus WIFI D4,intel i7-12700k,英伟达tesla p40计算卡。英伟达tesla p40计算卡(长相类似显卡)是插在pciex16上的专业机器学习计算卡,不具备hdmi等显示输出接口,区别于机器学习常见的GTX和RTX系列显卡,也区别于丽台图形渲染显卡。
本人首先没有使用p40计算卡,仅使用cpu核显将机器点亮,装上了Win10+Ubuntu20双系统,两个系统一切运行良好。
紧接着在靠近cpu的一个pciex16接口上插上了tesla p40计算卡。
首先在win10上装了cuda10.2以及与之配套的驱动、cudnn、anaocnda、python、torch、torchvision,并成功运行了一个之前做过的机器学习项目,顺利完成。这说明卡和电脑本身都没问题。
其次,准备在ubuntu环境下配置环境。但是这时ubuntu突然打不开了。具体情况是,在ubuntu的grub界面选择启动ubuntu,紧接着没有进入登录界面,而是会黑屏报错,错误是什么intel version、usb、hdaudio等等的外设问题(前面一个开机的秒数,然后是具体的错误内容这样),我又将tesla p40计算卡从主板上拔了下来,ubuntu又恢复如初,能够重新正常开机进入系统,没有报错。这显然说明上面所述的报错并非导致无法开机的致命错误,问题出在这张英伟达p40计算卡上。
问题分析
问题出在这个英伟达计算卡上面。因为专业的tesla等系列计算卡是没有图形输出的。如果你用3090之类的卡去搞机器学习,3090上是有一个hdmi接口的,可以直接连显示器,但是p40上除了外接8pin电源接口以外一个其他插口也没有。即便如此,ubuntu发现了这是一个英伟达的卡,他就会默认这就是系统的显卡,应该由这个显卡给显示器供应图形信号,却浑然不知这张卡没有任何输出图形信号的能力。
在ubuntu grub中选择第一个选项启动ubuntu,会黑屏报错。我就选了第二个,advance option,然后进入了recovery mode,这样是可以成功进入图形化界面的,正常进入系统。首先我怀疑是新卡缺乏驱动,导致ubuntu笨蛋地将计算卡认作了显卡。于是我在blacklist.conf中禁用了一切英伟达驱动,然后安装了460版本的tesla p40驱动(安装tesla系列计算卡驱动的教程在网上一搜一大堆)。此时我在命令行中打nvidia-smi是能够正常出现计算卡的信息的。但是重启,选择正常启动ubuntu,还是报错。
于是我认为,即便已经安装了p40的驱动,但ubuntu还是很笨蛋,把图形信号的处理任务全都送给了p40(没插计算卡的时候这一任务是i7-12700k的核显完成的),导致无法开机。那么,如何把正常的图形信号处理任务送给核显,但仍然使用p40搞机器学习计算呢?
问题解决-ubuntu双显卡切换
我在百度上能搜到的ubuntu切换双显卡的方法都过于陈旧,是去一个目录下面去找vgaswitheroo什么的东西,vga都被淘汰多少年了,我在他们说的相应目录下也根本没有找到vga什么的文件,也没有类似的文件。显然这个方法失效了。
我的方法是:
第一,开机ubuntu grub页面,仍然选择第一个,正常启动ubuntu,进入报错界面。但报错归报错,此时的内核仍然是正常运行的,只不过缺乏一个图形信号处理的方法才导致无法正常显示登录界面。按ctrl+alt+f2,可以进入一个tty界面,这是一个纯文字界面,不需要图形信号。
第二,在tty界面,可以正常的进行全部命令行操作。输入用户名密码即可登录系统。需要安装一个英伟达出品的软件,prime-select。输入prime-select query即可显示当前优先使用哪个显卡。这个软件初次使用会报错没有安装,按照提示信息sudo apt-get install即可。然后sudo prime-select intel,这样就选择了intel的核心显卡作为了首选显卡。此时,重启机器,即可正常的进入ubuntu图形界面使用机器了。
第三,使用上述方法后,进入系统,在命令行输入nvidia-smi,居然看不到显卡信息了,报错信息说驱动无法和计算卡通信了,没办法,在图形界面打开terminal,再sudo prime-select nvidia,将英伟达再设为首选,机器学习的那一套就又能用了,nvidia-smi也工作正常了,再去安装cuda,cudnn,pytorch什么的就随意了。
最后,搞完机器学习,准备关机的时候,别忘了再sudo prime-select intel,如果不这样的话,下次开机图形界面还是起不来,又要去上面讲过的tty界面设置再重启。这就是ubuntu的笨蛋之处,哪怕这是一块完全没有图形输出能力的计算卡,也固执地要求人家去处理图形。如果你嫌麻烦,又恰好是linux爱好者,可以修改linux的开机关机配置文件,让机器自动去执行上述语句,也省的每次关机前手动做了。
题外话:为什么要用带有图形界面的ubuntu desktop,而不是ubuntu server?因为这只是一台个人工作站,在调试涉及图像处理的AI项目时需要预览模型的处理效果。如果真的需要大规模跑模型,就直接用超算了。