设备:小米笔记本pro
显卡:MX150和intel UHD620
系统:ubuntu16.04
现象描述:笔记本为双系统环境,win10+ubuntu16.04,由于专业学习,需要安装cuda-toolkit做并行运算。按照tensorflow官方给的教程分别安装了tensorflow和cuda-toolkit(后者的安装步骤参考:https://www.tensorflow.org/install/gpu)。安装完之后,在python console中输入import tensorflow as tf,以验证tensorflow是否能正常使用,结果报错为:ImportError: libcuda.so.1: cannot open shared object file: No such file or directory。通过网络搜索了解到,报这个错是因为显卡驱动不是nvidia的驱动,因此按照“system settings-->system-->software&updates-->additional drivers”进入系统显卡驱动选择界面这里面我选了version 390.30 from nvidia-390(因为装的是cuda9.0,网上检索结果表明,cuda9.0依赖nvidia-390,因此就选了比较低的390(事实证明并不是这个样子的,摔))。噩梦从此开始,390驱动安装好之后,重启系统,然后画面就是不停地在黑屏与状态界面之间切换,即闪屏,闪了一会之后,稳定在状态界面,状态界面显示内容为:“/dev/nvme0n1p3: clean, 301086/1875968 files, 2492253/7500032 blocks”
问题解决:在网上找了很久,一个个的尝试,终于找到了对应的解决方案。
    1.停在状态界面后,按ctrl+alt+F3(或F2)组合键,进入tty3界面,先输入用户名,再输入密码。这里有几个坑:1)用户名不是我们在装系统的时候填的全名,而是后面缩写的用户名,这个用户名跟home目录下的文件对应的上一层文件目录一样,比如:/home/xxx/Documents,这个xxx就是我们的用户名;2)网上说的比较多的一个坑,即:输入密码的时候要用小键盘输入,不能用数字键盘输入,貌似linux对数字键盘输入不感冒。

    2.下面执行一些命令:

sudo apt-get purge *390*
sudo apt-get autoremove

     执行这些命令主要是为了删除nvidia-390,需要注意的是,在点“y”之前,要确认删除的都是与nvidia显卡驱动相关的文件,别删错东西了。

    3.然后重启,重新进入系统显卡驱动选择界面,注意,选version 396.44 from nvidia-396,一定要选from nvidia-396的,安装好该驱动之后,重启,正常进入系统,并重新测试了一下tensorflow的可用性,显示tensorflow是可用的。如果按照“system settings-->system-->details”进入系统信息界面,能够看到系统的显卡已经切换为 MX150了。

问题小结:至于from nvidia-390的驱动为什么不能用,有个说法是GDM和390驱动不兼容,而这个GDM(GNOME Display Manager)是ubuntu默认的管理用户登录的图形界面工具,因而导致了不能进入用户登录界面。如果真是这样子的话,或许可以通过把gdm切换为lightDM来解决390驱动的兼容问题,有兴趣的话可以一试(出问题了别找我呀,逃)

ref:

[1] https://www.reddit.com/r/Ubuntu/comments/8rt0ob/boot_is_stuck_at_devsdb2_clean/#ampf=undefined(怎么解决390)

[2] https://askubuntu.com/questions/58528/whats-the-difference-between-gdm-and-lightdm(什么是GDM)