深度学习大火,为了赶上AI的班车,许多研究生本科生们都在搞深度学习。然而深度学习环境搭建必不可少,这篇文章是我多次为实验室搭建环境所积累起来的经验总结,希望所有看到这篇文章的同志们,可以顺利解决环境搭建的问题。
我们在用很多深度学习的框架,TensorFlow、Pytorch、caffe,都需要cuda的底层运算库 ,在windows上安装cuda库是比较容易的事情,但是在…linux上,麻烦那就大了。
我们一般遇到的问题
在装在n卡的服务器上,安装ubuntu16.04和Nvidia Driver, 一般会出现以下问题:
- 开机直接黑屏,无法安装ubuntu系统,或者一进去卡到 紫屏;
- 可以正确安装,但是进去的时候无限循环登录;
- 安装cuda9.1的时候会报错:
“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.”
以上的问题是我在多次安装的时候遇到的问题, 当然还有 很多细小的问题不一一提出,如果大家按照下面的解决方案都考虑到的话,安装应该会顺利很多。
解决方案有先后顺序
解决方案
1 禁用”nouveau” driver
首先将nouveau添加到黑名单blacklist.conf中,这样在linux启动时,就不会加载nouveau。
首先查看文件属性,如果受保护则修改属性:
ll /etc/modprobe.d/blacklist.conf
修改文件属性
sudo chmod 666 /etc/modprobe.d/blacklist.conf
使用vim进行修改
sudo vim /etc/modprobe.d/blacklist.conf
在文件最后添加以下几行
blacklist vga16fb blacklist nouveau blacklist rivafb blacklist rivatv blacklist nvidiafb
修改完毕后将文件权限改回来然后进行系统内核更新
sudo chmod 644 /etc/modprobe.d/blacklist.conf sudo update-initramfs -u
更新完内核后重启系统
重启系统后使用lsmod命令查看内核已经加载好的模块
lsmod | grep nouveau
如果执行后什么也不显示,说明禁用成功。
Ubuntu系统集成的显卡驱动程序是nouveau,不支持cuda而且性能不如nvidia driver,如果系统输入密码无法进入桌面,无限闪退重新输密码,这是因为nouveau驱动影响,可以在ubuntu系统启动显示登录界面后,按ctrl+alt+F1进入tty文本模式。将nouveau从linux内核卸载掉再安装NVIDIA官方驱动。就可以顺利进行桌面。
注意,如果一开始你就无法进入系统,这时候需要在开启的时候按住shift不放,再按e,进入grub界面,移动光标到quiet splash处,在后方加入nomodeset,在进入系统后,执行sudo vim /etc/default/grub
将GRUB_CMDLINE_LINUX_DEFAULT=
"quiet splash"
改为GRUB_CMDLINE_LINUX_DEFAULT=
"quiet splash nomodeset"
然后sudo
update-grub
!
2 关闭你的X server服务
CTRL+ALT+F1进如无界面终端,输入命令:sudo service lightdm stop
x服务管理服务器上所有的显示功能,当需要Linux提供界面的时候,系统就会建立一个或者数个X server,通过X协议跟窗口管理器交互,由独立于系统的应用程序来产生窗口,状态栏,按钮之类的交互界面。因为N卡驱动和X 服务有一些冲突,这里我们选择关闭。
3 更新系统
使用命令:
sudo apt-get update sudo apt-get upgrade -y sudo apt-get dist-upgrade -y
更新系统是必须的,但是这里需要注意的是,CUDA9.1和ubuntu16.04中4.10-4.13的内核不兼容,根据官方推荐使用4.4.0内核,如果你发现你的内核不是4.4.0(uname -r
)那么必须更换内核才可以继续往下走,更换方法:
https://oldpan.me/archives/install-cuda9-1-unable-to-locate-the-kernel-source
4 安装 build-essential package
命令:sudo apt-get install build-essential
一些包需要c/c++编译器,所以这个必须安装。
5 安装 linux source and headers
命令:
apt-get install linux-source apt-get source linux-image-$(uname -r) apt-get install linux-headers-$(uname -r)
如果你的系统内核比4.4.0旧,那么上面的命令应该可以解决“unable to locate the kernel source”这个问题,根据英伟达toolkit中的说法:”The CUDA Driver requires that the kernel headers and development packages for the running version of the kernel be installed at the time of the driver installation, as well whenever the driver is rebuilt. For example, if your system is running kernel version 3.17.4-301, the 3.17.4-301 kernel headers and development packages must also be installed.”
内核相关headers也必须都有才可以正确安装,当然如果你的内核够新,那么上面第一个命令可能不适合你,也可能会遭遇上述 第3个方案中说的那个问题。
安装cuda9.1
安装步骤和9.0相仿,具体可以看我之前写的这篇:
https://oldpan.me/archives/pytorch-gpu-ubuntu-nvidia-cuda90
总结
linux尿性就是这样,各种不兼容各种不合适,所幸我们有强大的网络后援团,也是多亏了很多网上的同志们无私分享技术才有 这些总结,希望这篇文章对大家有用。