问题来源
之前在我的笔记本上安装cuda9.0的时候一路通畅,没有遇到特别大的问题,安装完后cuda9.0就可以直接使用,而cuda9.0的包是从官网下下来的。
现在在实验室的服务器上重新装一遍,截止到2018.3.29,官网最新的是cuda9.1的包,肯定用新的的啊,于是直接下载过来安装了,但显然以linux的尿性,不可能让你一下子成功的。于是,安装cuda9.1的过程中遇到了这样的问题:
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.
提示没有定位到内核source packages,什么情况,我的内核很正常啊,我也安装官网的要求进行了linux-headers的安装,此时,我的内核是4.13.0-38-generic。
服务器配置
配置不用多说,cpu为i7-7800x、主板为x299、显卡为1080ti单张,弄过深度学习在服务器上用ubuntu来进行实验的同志们应该都知道N卡与ubuntu驱动有一些冲突,解决方法早已经有了,我之前写过一篇:https://oldpan.me/archives/ubuntu16-04-nvidia-cuda-gtx965m
这里就不多说了。
问题解决办法
经过google和百度,得知原因很简单:cuda9.1和 ubuntu16.04中linux内核4.13不兼容!
好吧,看来内核4.13.0不能用,要换成4.4.0。
更换内核
linux更换内核很简单,一个系统中可以安装多个内核,也可以在开机的时候通过grub来选择要启动的内核。首先我们要做的是先看自己系统中现在存在几个内核。
提前了解
使用uname -r
查看当前使用的内核。
然后我们明确几个有关内核的文件:
- /etc/default/grub 定义了有关启动过程的一系列设置,比如设置内核启动顺序、系统等待启动时间、或者启动过程中相关设置等;
- /boot/grub/grub.cfg 注意一下这个文件是由上一个文件而自动生成的,不建议修改这个文件的内容
- /etc/grub.d 是操作系统菜单目录,也是由系统生成,我们也不用修改。
更换方法
我当前的内核是4.13.0,我要安装4.4.0的内核,使用下面的命令:
sudo apt-get install linux-headers-4.4.0-98-generic linux-image-4.4.0-98-generic
执行完这个命令之后,可以到/boot/grub中看现在存在的kernels
安装完新的内核后,更换到新的内核(并不是新版本,我就是从4.13转为4.4)的方法:
- 进入grub启动界面,在系统启动时按住shift一段时间即可,选择你刚才安装的内核即可(每次都要这样选,有点麻烦)。
- 查看当前内核启动顺序
grep menuentry /boot/grub/grub.cfg
,然后修改/etc/default/grub
中的内容修改GRUB_DEFAULT,默认为0,根据顺序改成你要启动的内核顺序就行(从0开始)。 - 第二个方法有可能失败,终极方法是删除掉所有多余内核!直接修改/boot/grub/grub.cfg中的内容:在/boot/grub目录中,执行
sudo rm -rf *4.13.0-38*
这个命令是删除掉这个目录内所有4.13内核的文件,然后将/boot/grub/grub.cfg中所有有关4.13的信息全部删除。全部给为新的内核。
修改/etc/default/grub中GRUB_DEFAULT=”Ubuntu,Linux 4.4.0-98-generic“
最后弄完别忘了执行sudo update-grub
来对你之前的设置进行更新。
结果
更换内核以后就可以进行cuda9.1的安装了。
相关问题链接:
https://blog.csdn.net/eidolon_foot/article/details/79128264
https://www.cnblogs.com/boyzgw/p/6227430.html
https://askubuntu.com/questions/537607/correct-kernel-source-path