《面向机器智能的TensorFlow实践》安装TensorFlow10

  1. 云栖社区>
  2. 博客>
  3. 正文

《面向机器智能的TensorFlow实践》安装TensorFlow10

华章计算机 2017-05-19 15:25:16 浏览1638
展开阅读全文
本节书摘来自华章出版社《面向机器智能的TensorFlow实践》一书中的第1章,第节,作者山姆·亚伯拉罕(Sam Abrahams)丹尼亚尔·哈夫纳(Danijar Hafner)[美] 埃里克·厄威特(Erik Erwitt) 阿里尔·斯卡尔皮内里(Ariel Scarpinelli),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

安装TensorFlow

在开始使用TensorFlow之前,需要先将其安装到计算机中。幸运的是,TensorFlow官网提供了一份在Linux和Mac OS X系统中安装TensorFlow的完整分步指南。本章对安装中将会出现的不同选项如何选择给出了一些建议,并提供了一些关于能够与TensorFlow很好地集成的其他第三方软件的信息。此外,本章还给出一份从源代码构建和安装TensorFlow的参考,以帮助用户安装带有GPU支持的TensorFlow。

如果用户对Pip/Conda、虚拟环境,或从源码安装程序已经非常熟悉,则可放心地参考如下官方指南:

https://www.tensorflow.org/versions/master/get_started/os_setup.html

2.1 选择安装环境

许多软件都会使用一些库和独立维护的软件包。对于开发者而言,这是一件好事,因为这种做法有利于代码复用,而且他们可专注于创建新的功能,而无需重复造轮。然而,这种做法也会付出一定的代价。如果某个程序的正常运行必须依赖于另一个库,则用户或这款软件必须确保任何运行该程序代码的机器都已安装了依赖库。乍看上去,这几乎不算一个问题—只需随这款软件一起安装所需的依赖库不就行了?不幸的是,这种方法会带来一些意想不到的后果,而且常常如此。

设想如下场景:你找到一款出色的软件—软件A,下载后开始安装。在执行其安装脚本时,软件A需要另外一款依赖软件。如果你的计算机中缺少这个依赖软件,则需进行安装。我们称之为软件依赖项(software dependency)。假设该依赖项的当前版本号为1.0。软件A先安装1.0版的依赖项,然后再对自身进行安装,一切都进行得很顺利。再假设将来的某个时候,你偶然发现了另一款希望安装的软件—软件B。软件B需要使用2.0版的依赖项,相对于1.0版,这个版本做出了重大改进,且不具备向下兼容性。鉴于这个依赖项的发行方式,无法做到1.0和2.0两个版本同时运行,因为这将导致使用它时产生二义性(这两个版本的都会作为依赖项被导入,应使用哪个版本?)。最终,软件B将用2.0版的依赖项覆盖1.0版,并完成自身的安装。经历一番艰辛后,你才发现软件A与2.0版依赖项不兼容,因此完全被破坏,情况顿时变得很糟。如何才能在同一台机器上既可运行软件A,也可运行软件B?这个问题非常重要,因为TensorFlow也依赖于若干开源软件。利用Python(用于将TensorFlow打包的编程语言),可采取多种方式避免上述依赖冲突问题。

代码库内部的软件包依赖。无需依赖于系统级的软件包或库,开发者可将所需版本的依赖库放在自己的代码中,并在局部引用。按照这种方式,软件所需的所有代码都是可直接操控的,不会受到外部变动的影响。然而,这种方式并非无懈可击。首先,它增加了安装该软件所需的磁盘空间,这意味着安装时间更长、使用成本更高。其次,用户可能已经以全局方式安装了依赖库,这意味着局部版本完全是多余的,会占用不必要的空间。最后,依赖库在将来可能会推出修复若干严重安全漏洞的关键的、保持向下兼容性的更新。这时,对代码库中依赖库的更新将无法借助软件包管理器,而只能由软件开发者手工完成。不幸的是,最终用户对此无从插手,因为何时直接包含依赖库完全是由开发者决定的。有一些依赖库由于没有被包含进TensorFlow,因此必须单独安装。

使用依赖环境。一些软件包管理器中包含可创建虚拟环境的相关软件。在一个环境中可完全独立地维护特定版本的软件而不受其他环境的影响。借助Python,有多种选择。对于Python的标准发行版,Virtualenv是直接可用的。如果使用的是Anaconda,它会包含一个内置的虚拟环境系统及其软件包管理器—Conda。稍后,笔者将会介绍如何使用这两种工具安装TensorFlow。

使用容器。容器(如Docker)是将软件与完整的文件系统,包括其运行时和依赖库打包的轻量级方案。因此,任何可运行一个容器的机器(包括虚拟机在内)都能够与任何运行该容器的其他机器对其中所包含的软件获得完全相同的运行效果。与简单地激活Virtualenv环境或Conda环境相比,虽然从Docker中启动TensorFlow需要略多一点的步骤,但当需要将代码在不同实例(无论是虚拟机还是物理的服务器)上进行部署时,它在不同运行时环境中的一致性使其成为无价之宝。下文将介绍如何安装Docker,并创建你自己的TensorFlow容器(以及如何使用官方的TensorFlow镜像)。

一般而言,如果准备在单机上安装和使用TensorFlow,笔者建议采用Virtualenv或Conda的虚拟环境。它们能够以较小的代价解决依赖冲突问题,且易于设置。一旦创建完毕,便几乎一劳永逸。如果准备将TensorFlow代码部署到一台或多台服务器中,则值得创建一个Docker容器镜像。虽然所需的步骤略多,但却会大大降低在多服务器上部署的成本。笔者不推荐既不使用虚拟环境,也不使用容器的TensorFlow安装方法。

2.2 Jupyter Notebook与matplotlib

在数据科学工作流中频繁使用的两款出色的软件是Jupyter Notebook和matplotlib。它们与NumPy协同使用已有多年,TensorFlow与NumPy的紧密集成使得用户可采用他们熟悉的工作模式。两者均为开源软件,且采用的许可协议均为BSD。

利用Jupyter Notebook(前身为iPython Notebook),可交互式地编写包含代码、文本、输出、LaTeX及其他可视化结果的文档。这使得它在依据探索分析创建报告时极为有用,因为可将创建可视化图表的代码直接在图表的旁边展示出来,也可利用Markdown单元以格式丰富的文本分享你对于某个特定方法的见解。此外,对于设计原型的想法,Jupyter Notebook也极为出色,因为你可回顾和编辑部分代码,然后从笔记本中直接运行。与许多其他要求逐行执行代码的交互式Python环境不同,Jupyter Notebook允许将代码写入逻辑块中,这使得调试脚本中特定部分相对容易。在TensorFlow中,这个特性是极有价值的,因为典型的TensorFlow程序已经被划分为“计算图的定义”和“运行计算图”两部分。

matplotlib是一个绘图库,它允许用户使用Python创建动态的、自定义的可视化结果。它与NumPy无缝集成,其绘图结果可直接显示在Jupyter Notebook中。matplotlib也可将数值数据以图像的形式可视化,这个功能可用于验证图像识别任务的输出,并将神经网络的内部单元可视化。构建在Matplotlib之上的其他层,如Seaborn,可用于增强其功能。

2.3 创建Virtualenv环境

为保持依赖项的干净整洁,下面介绍如何利用Virtualenv创建虚拟的Python环境。首先需要确保Virtualenv与pip(Python的包管理器)均被安装。运行下列命令(根据操作系统的不同,选择相应的命令):

1. 64位Linux系统

 

2. Mac OS X

 

至此,准备工作已完成,接下来创建一个包含该虚拟环境的目录,以及将来可能会创建的任意虚拟环境:

 

接下来,利用Virtualevn命令创建虚拟环境。在本例中,它位于~/env/tensorflow下。

 

一旦创建完毕,便可利用source命令激活该虚拟环境:

 

我们希望当使用pip安装任何软件时都确保该虚拟环境处于活动状态,从而使Virtualenv能够对各依赖库进行追踪。

虚拟环境使用完毕后,需用下列deactivate命令将其关闭:

 

由于将频繁使用虚拟环境,创建一个激活虚拟环境的快捷方式而非每次键入完整的source...命令便很有价值。接下来的命令将向~/.bashrc文件添加一个bash别名,使在需要启动虚拟环境时只需键入tensorflow:

 

要测试该快捷方式是否生效,可重启bash终端,并键入tensorflow:

 

2.4 TensorFlow的简易安装

如果只是希望尽快上手实践一些入门的例子,而不关心是否有GPU支持,则可从TensorFlow官方预制的二进制安装程序中择一。请确保你的Virtualenv环境处于活动状态,并运行下列与你的操作系统和Python版本对应的命令:

1. Linux 64位安装

 

2. Mac OS X安装

 

从技术角度,可以使用带有GPU支持的预制TensorFlow二进制安装程序,但它需要特定版本的NVIDIA软件,且与未来版本不兼容。

2.5 源码构建及安装实例:在64位Ubuntu Linux上安装GPU版TensorFlow

如果希望使用带有GPU支持的TensorFlow,那么最可能的选择是从源码构建和安装。本节给出了一个完整的安装参考实例,详细介绍了安装和运行TensorFlow所需的每一具体步骤。请注意,本示例中的操作系统为64位Ubuntu Linux发行版,因此如果你使用的是其他Linux发行版,则可能需要对某些命令进行修改(如apt-get)。如果希望在Mac OS X上从源码构建TensorFlow,笔者推荐TensorFlow官网的安装指南:

https://www.tensorflow.org/versions/master/get_started/

os_setup.html#installation-for-mac-os-x

2.5.1 安装依赖库

这里假定你已安装了python-pip、python-dev和python-virtualenv。

构建TensorFlow需要事先安装少量依赖库。按照所安装的Python版本,执行下列命令:

1. Python 2.7

 

2. Python 3

 

2.5.2 安装Bazel

Bazel是一款基于谷歌内部软件的开源构建工具。在本书写作之时,为从源码构建TensorFlow,需要Bazel,因此我们必须自行安装该软件。Bazel官网中有一份非常完整的安装指南,本节只介绍一些最基本的步骤。

第一件事是确保系统中已安装Java Development Kit 8(JDK 8)。下列命令会将Oracle JDK 8代码库添加到apt源中,然后进行安装:

 

对于Ubuntu 15.10版及后续版本,也可安装Oracle JDK的替代软件OpenJDK 8。安装后者更为容易,也是笔者所推荐的,可使用下列命令在系统中安装OpenJDK:

 

在继续下一步之前,请验证Java已被正确安装:

 

Java安装完毕后,还需要安装少量其他依赖库:

 

接下来,需要下载Bazel安装脚本。为此,既可前往GitHub上的Bazel发行页面,也可使用下列wget命令。请注意,对于Ubuntu系统,需要下载“bazel-xxx-installer-linux-x86_64.sh”:

# 下载Bazel 0.3.0

 

最后,将所下载的安装脚本的权限修改为可执行的,并运行它:

 

通过使用--user选项,Bazel将被安装到$HOME/bin目录。为确保该路径被添加到环境变量PATH中,可通过下列命令对~/.bashrc进行更新:

 

重启bash终端,并运行bazel,以确保一切可正常工作:

 

非常棒!接下来,需要安装一些能够支持GPU运算的依赖软件。

2.5.3 安装CUDA软件(仅限NVIDIA GPU)

如果拥有一款支持CUDA的NVIDIA GPU,则可安装带有GPU支持的TensorFlow。支持CUDA的显卡清单可从下列网址获取:

https://developer.nvidia.com/cuda-gpus

除了确保你的GPU榜上有名,还需注意与显卡“计算能力(compute capability)”有关的量化数字。例如,GeForce GTX 1080的计算能力为6.1,而GeForce GTX TITAN X的计算能力为5.2。在编译TensorFlow时需要用到这个数字。在确定可利用CUDA后,要做的第一件事便是注册NVIDIA的“Accelerated Computer Developer Program”。为了下载安装CUDA和cuDNN所需的所有文件,这个步骤是必需的。注册链接如下:

https://developer.nvidia.com/accelerated-computing-developer

当注册完成后,你会希望下载CUDA。前往下列链接,并使用如下操作指南:

https://developer.nvidia.com/cuda-downloads

 

1)在“Select Target Platform(选择目标平台)”下方,选择下列选项:

Linux

x86_64

Ubuntu

14.04/15.04

deb(本地)

2)单击“Download(下载)”按钮,将安装文件保存在你的计算机中。该文件体积较大,因此完成下载可能需要一段较长的时间。

3)导航至包含所下载的安装文件的目录,并运行下列命令:

 

上述命令执行完毕后, CUDA将被安装到/usr/local/cuda目录下。

接下来,需要下载cuDNN,它是一款专为深度神经网络设计的基于CUDA的加速库。单击如下页面的“Download”按钮:

https://developer.nvidia.com/cudnn

用在前面创建的账号登录后,将看到一份简短的调查问卷。完成问卷后,可通过单击问卷下方的按钮进入下载页面。单击“I Agree to the Terms...”以接受下载许可协议。由于前面安装的是CUDA 7.5,所以需要下载cuDNN for CUDA 7.5(本书写作之时,笔者使用的是cuDNN v5.0)。

单击“Download cuDNN v5 for CUDA 7.5”,将下载选项展开。

 

单击“cuDNN v5 Library for Linux”,下载经过压缩的cuDNN文件。

 

导航至下载好的.tgz文件,运行下列命令,将必要的文件复制到/usr/local/cuda目录下:

 

以上便是安装CUDA所需的所有步骤。由于所有依赖库都已细心安装,接下来便可安装TensorFlow了。

2.5.4 从源码构建和安装TensorFlow

首先需要克隆GitHub上的TensorFlow代码库,然后进入其所在目录:

 

进入上述目录后,运行./configure脚本,将所使用的编译器、CUDA版本等信息通知给Bazel。请确保已记录显卡的“计算能力”数字(上文中已介绍过):

 

# 注意:若使用Python 3,需要指定为/usr/bin/python3

 

Google Cloud Platform支持目前正处于封闭alpha测试阶段。如果能够访问该程序,可在回答Google Cloud Platform支持问题时选择y(Yes)。

配置完成后,便可利用Bazel创建一个用于创建Python二进制文件的可执行程序:

 

执行上述命令需要相当长的一段时间,具体时长取决于你的计算机性能。待Bazel完成上述任务后,运行输出的可执行程序,并传入一个表示Python wheel文件存储路径的参数:

 

上述命令将在~/tensorflow/bin下创建一个Python.whl文件。请确保你的“tensor-flow”Virtualenv环境处于活动状态,然后用pip安装该wheel文件(请注意该二进制文件的具体名称会依所安装的TensorFlow版本、所使用的操作系统和Python版本而不同):

 

如果你拥有多台硬件配置类似的机器,则可使用该wheel文件在这些机器上实现TensorFlow的快速安装。

至此,TensorFlow便安装完毕!最后介绍如何安装Jupyter Notebook和matplotlib。

2.6 安装Jupyter Notebook

首先,运行下列命令安装ipython—一个极为有用的交互式Python内核,它也是Jupyter Notebook的核心。笔者强烈推荐同时安装Python 2和Python 3内核,以便获得更多的选择(即执行下列所有命令):

 

此后,通过两个命令便可让你马上体验Jupyter Notebook。首先安装依赖项build-essential:

 

然后,用pip安装Jupyter Notebook(若使用的是Python 3,则使用pip3):

 

官方的安装指南可从Jupyter网站的下列页面获取:

http://jupyter.readthedocs.io/en/latest/install.html

2.7 安装matplotlib

在Linux/Ubuntu上安装matplotlib的方法非常简单,只需运行下列命令:

 

就是这样简单!

2.8 测试TensorFlow、Jupyter Notebook及matplotlib

下面通过一些虚设代码来复查所有软件是否都能正常工作。创建一个名为“tf-notebooks”的目录以便进行测试。进入该目录,并运行Jupyter Notebook。同样,请确保“tensorflow”环境处于活动状态。

 

最后一条命令将启动一个Jupyter Notebook服务器,并在你默认的网页浏览器中打开该软件。假设tf-notebooks目录下没有任何文件,那么将看到一个空的工作空间,以及消息“Notebook list is empty”。要创建新的笔记,可单击页面右上角的“New”按钮,然后选择“Python 2”或“Python 3”,具体选择哪个取决于安装TensorFlow时使用的是哪个版本的Python。

 

新笔记将自动打开,呈现在眼前的将是一块用于工作的白板。下面为这个笔记设置一个新名称。在页面的顶端单击“Untitled”。

 

之后会弹出一个用于对笔记本重命名的窗口,也可用于修改笔记本文件的名称(扩展名为.ipynb)。你可使用任何自己喜欢的名称,在本例中笔者将其命名为“My First Notebook”:

 

下面来看实际的界面。我们注意到旁边有一个“In [ ]:”方块的空单元格,你可在该单元格内直接键入代码,而且它可容纳多行代码。下面将TensorFlow、NumPy以及matplotlib的pyplot模块导入该笔记本:

 

 

要运行该单元格,只需同时按下shift键和回车键。该单元格中的代码执行完成后,其下方会自动创建一个新的单元格。我们注意到左边方框中的提示符变成了“In [1]:”,这意味着该单元格是在内核中运行的第一个代码块。在该笔记本中键入下列代码,使用单元格的数量取决于你的需求。你可利用单元格中的分隔符将相关代码很自然地组织在一起。

 

 

 

下面这行代码非常特殊,值得专门介绍:

 

这是一条专门的命令,用于通知笔记本将matplotlib图表直接显示在浏览器中。

下面逐行分析其余代码,如果你不理解某些术语,请不必担心,后面章节还会一一进行讲解:

1)用TensorFlow定义一个由随机数构成的2×20的矩阵,并将其赋给变量a。

2)启动TensorFlow Session,并将其赋予一个sess对象。

3)用sess.run()方法执行对象a,并将输出(NumPy数组)赋给out。

4)将这个2×20的矩阵划分为两个1×10的向量x和y。

5)利用pyplot模块绘制散点图,x对应横轴,y对应纵轴。

如果所有软件均已正确安装,你将得到与上图类似的输出结果。这虽然只是向前迈出的小小一步,但我们毕竟已经开始上手尝试TensorFlow,但愿这能给你带来一个良好的体验。

要想通过更多、更全面的教程了解Jupyter Notebook的细节,请参考如下页面中的示例:

http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/examples_index.htm

2.9 本章小结

至此,你应当已经拥有了一个可工作的TensorFlow版本。下一章将介绍若干TensorFlow的基础概念,并用这个库构建自己的模型。如果在安装TensorFlow中遇到任何问题,建议首先参考如下的官方指南:

https://www.tensorflow.org/versions/master/get_started/os_setup.html

 

 

 

 

PART 2

TensorFlow

网友评论

登录后评论
0/500
评论
华章计算机
+ 关注