扫雷之路:Ubuntu16.04+CUDA9.0+TensorFlow1.6

随着深度学习的流行,Ubuntu系统的安装量也逐年上升。网上关于Ubuntu+深度学习框架的安装介绍博客层出不穷,有些确实能帮我们避坑,但有些由于信息表述不全可能让某些需要江湖救急的同学遇到新坑。
前几天,装有双系统的电脑突然出现了Ubuntu16.04的循环登录问题。上网查找解决方案未果,只得重装。考虑到下次还可能遇到重装的“机会”,特将本次测试通过的“Ubuntu16.04+TensorFlow1.6”安装过程记录如下,作为避坑宝典。


###一. Ubuntu16.04

关于Ubuntu系统的安装,网上有很多指导的安装方法。我装Ubuntu的目的在于使用深度学习框架,以下给出Win10+Ubuntu16.04双系统的安装方法。

  • **准备磁盘空间:**在Win10系统下,打开磁盘管理器压缩出一个单独的盘用于Ubuntu的使用,压缩出来的盘应处于“未分配”状态。
  • **刻录U盘:**下载Ubuntu16.04的镜像文件,使用UltraISO刻录软件刻录U盘启动盘。
  • **BIOS设置:**重启电脑,进入BIOS,关闭Windows系统的快速启动(Fast Boot)选项。在BIOS中设置U盘为第一启动项,关闭电脑。
  • 安装Ubuntu
  1. 从U盘启动,进入刻录在U盘的Ubuntu系统。
  2. 按步骤流程,根据提示安装。
  3. 安装类型
    如果选“安装Ubuntu,与其他系统共存”,那么系统将自动在未分配的那部分空间按默认设置安装Ubuntu。如果选择“其它选项”,那么将需要自己选择用于安装Ubuntu的位置以及其他路径的挂载设置。这里我们选择“其它选项”,并将所有未分配空间挂在到根目录"/" (只有根目录是必须挂载的),文件系统设置为EXT4。
  4. 设置后续的地理位置(推荐选择你实际所在位置,软件源服务器的默认选择取决于此),设置账户名、机器名、密码,等待安装完成。

二. CUDA9.0

#####1. 安装显卡驱动
装有NVIDIA显卡的电脑,装完Ubuntu16.04之后图形界面使用的是默认的集成显卡,因此还需要安装显卡驱动。
说明】接下来的CUDA安装可能会自动安装NVIDIA Driver,因此可以尝试跳过显卡驱动安装步骤。Anyway,我是先单独装了显卡驱动后,再进行的后续步骤。如果求安全,那就遵循我的流程来。

  • 从NVIDIA官网下载本机显卡对应的驱动安装文件,例如:GeForce GTX 980 TI
    扫雷之路:Ubuntu16.04+CUDA9.0+TensorFlow1.6_第1张图片
  • 卸载可能存在的旧版NVIDIA驱动(对于新系统,可省略)
$sudo apt-get remove --purge nvidia*
  • 安装驱动可能需要的依赖(可选)
$sudo apt-get update
$sudo apt-get install dkms build-essential linux-headers-generic
  • 将nouveau驱动加入黑名单
$sudo nano /etc/modprobe.d/blacklist-nouveau.conf

在新建文件 blacklist-nouveau.conf 中加入如下内容:

  blacklist nouveau
  blacklist lbm-nouveau
  options nouveau modeset=0
  alias nouveau off
  alias lbm-nouveau off
  • 禁用nouveau内核模块
$echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
$sudo update-initramfs -u
  • 重启后,进入字符终端界面(Ctrl+Alt+F1),关闭图形界面管理器
$sudo service lightdm stop
  • cmd进入到驱动文件目录,安装驱动
$sudo chmod u+x NVIDIA-Linux-x86_64-361.45.11.run
$sudo ./NVIDIA-Linux-x86_64-361.45.11.run
  • 驱动安装结束后,恢复图像界面管理器,并重启。
 $sudo service lightdm start
 $reboot

#####2. 安装CUDA9.0
写这篇博客的最重要的原因是:TensorFlow官网安装界面的最新版本CUDA9.1和TensorFlow1.6 根本是个坑!!! 我最开始按着官网指导流程走到了最后,测试TensorFlow时出现了"Error: can not find cublas9.0.so"。上网查了一些方法觉得不靠谱,因此才决定重来一遍。只是将CUDA9.1换成了CUDA9.0, 结果成功了!由此判断TensorFlow1.6并不支持CUDA9.1或者说支持得不好。所以,“不要安装最新版本“”是个亘古不变的真理!实践证明CUDA9.0+TensorFlow1.6是可以的。 【下载CUDA9.0】

  • **装前检查 **
    根据官网指导,一步一步检查CUDA的预装条件,包括处理(可能是卸载)此前安装的NVIDIA Driver:
$sudo apt-get --purge remove           # cuda* and nvidia* respectively
  • **安装方式 **
    这里有Runfile Installation和Package Installation两种方式。从操作的简单性和可靠性而言,强烈推荐采取Package Installation。考虑到网络的稳定性问题,推荐选择下载deb(local),因为deb(network)需要在线获取pub-key,很可能由于网络问题一直卡住。在字符终端界面(Ctrl+Alt+F1)执行以下四行命令即可(Ignore those Patch):
    扫雷之路:Ubuntu16.04+CUDA9.0+TensorFlow1.6_第2张图片
  • **检验安装 **
    重启后,打开终端输入:
$nvidia-smi
$nvcc -V

如果cmd界面有信息输出,则表明文件安装正常。输入第二条命令时,可能会提示未安装cuda-toolkits,按提示的命令(仅一行命令,无坑)安装后,即可正常调用”nvcc -V”查看cuda版本。
继续按照官网指导界面的验证步骤:7.1 Mandatory Actions 以及 7.2 Recommended Actions,直到测试通过。

#####3. 安装cuDNN
cuDNN的安装主要是下载文件,并复制到指定目录,相对简单。这里选择下载压缩包的方式操作。首先选择与已安装的CUDA9.0相符合的版本,这里不推荐选最新版本,测试通过的机器选择的是:cuDNN v7.0.5
扫雷之路:Ubuntu16.04+CUDA9.0+TensorFlow1.6_第3张图片
下载”cuDNN v7.0.5 Library for Linux”之后,按以下官网指示的步骤进行操作。安装完成后,验证还需要额外下载以上列表中的Code Samples and User Guide for Ubuntu16.04(Deb)提供测试样例代码。
扫雷之路:Ubuntu16.04+CUDA9.0+TensorFlow1.6_第4张图片

最后根据TensorFlow官网安装流程,还要运行以下命令安装libcupti-dev。值得说明的是,直接按官网提示输入:$sudo apt-get install cuda-command-line-tools, 将提示找不到这个库。实际上,在最后加个版本号之后:$sudo apt-get install cuda-command-line-tools-9.0,将显示该库已安装妥当,继续后面的TensorFlow安装即可。


###三. TensorFlow1.6
安装好NVIDIA Driver和CUDA, cuDNN之后,只要保证了各个模块版本兼容,TensorFlow的安装十分简单。这里选择虚拟环境Anaconda的安装方式:
扫雷之路:Ubuntu16.04+CUDA9.0+TensorFlow1.6_第5张图片
【注意】最后一步中那个URL即决定了TensorFlow的版本,2018.03.17提供的是1.6(与cuda9.1不兼容,与cuda9.0兼容)。
最后,在cmd终端输入以下测试程序,不报错则说明安装成功了。

# Python
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

###其他说明:

  1. PyCharm安装
    从PyCharm官网下载Ubuntu版:https://www.jetbrains.com/pycharm/download/#section=linux。解压下载安装包,打开终端cmd定位到解压目录下的pycharm-xxx/bin,运行pycharm.sh即可打开Pycharm软件的界面。这时将图标锁定到任务栏可能显示为“灰色问号图标”。这是因为第一次运行该命令时,系统自动在 ~/.local/share/applications 目录下创建了快捷方式jetbrains-pycharm-ce.desktop,我们只需要去该目录删除这个快捷方式文件即可。
  2. 宇宙最强命令:$sudo apt-get install -f
    不同于apt命令,dpkg是Debian软件包管理器的基础,被用于安装、卸载和供给和.deb软件包相关的信息。dpkg本身是一个底层的工具,本身并不能从远程包仓库下载包以及处理包的依赖的关系,需要将包从远程下载后再安装。因此,很有可能在用dpkg命令安装软件时,报出依赖关系不满足的错误"error: unmet dependencies"。这时,可以尝试运行这条宇宙最强命令,系统将自动去解决安装所依赖的包。再次运行dpkg安装命令即可。
  3. 软件源设置
    在Ubuntu系统的安装过程中,会有选择地理位置的步骤。这个位置除了用于决定显示时间的时区,还与系统默认设置的软件源有关,一般设置距离目标机器地理位置近的软件源服务器。如果你安装过程填选的位置与你实际位置距离较远,那么你在cmd终端运行软件列表更新命令:$sudo apt-get update时,就可能出现卡住的现象。当然有时候是其他原因导致的软件源列表更新卡顿。这时候你可以尝试手动更改系统的软件源服务器选择。

Notice: 本人对Linux系统不太熟悉(仅半年经验),这篇博客仅是记录一套经实践检验切实可行的安装方案。其间如果有表述不准确或者错误的地方,欢迎留言指正!

你可能感兴趣的:(编程技术类)