2.2 TensorFlow开发环境搭建
本书将使用TensorFlow的Python版本进行代码演示,因此我们首先需要安装Python开发环境。为了让Python开发环境能够最大程度地保持独立稳定,在演示或进行实验的时候能够最大程度地不受Python多版本引发的引用包错误、语法不支持等环境问题的困扰,我们将在环境搭建中引入环境虚拟化方案。本节将介绍两种环境虚拟化方案:一种是基于Python语言框架的Virtualenv;另一种是基于应用容器化的Docker方案。
2.2.1 基于Python语言框架的Virtualenv方案
Virtualenv是一种基于Python语言框架的库工具,目的是能够简单地创建隔离的Python开发环境。究其本质原因,笔者认为Python开发方面2.x版和3.x版长期拥有其固定的开发者群体和系统预装的情况难辞其咎,因此,本书使用Virtualenv进行开发环境隔离,而且使用Python 3.7作为开发语言框架版本,旨在希望能最大程度使读者朋友聚焦于算法实现和算法应用本身,而尽可能少地被开发环境本身干扰。本书的开发思想源于笔者多年从事IT开发和技术分享的思考,在分享过程中和学生、朋友以及编程爱好者交流,阻止他们登堂入室的显著问题之一就是无关细节消耗了巨大的信心和时间,因此本书中会有很多预置型的编程约定,目的是加强传递知识本身的效率,提升沟通效果。
1. 安装Python
安装Python需要访问Python官网网站(见图2.4),地址是https://www.python.org/。
图2.4 Python官方网站
然后进入下载页面,选择最新版本的Python 3.x安装程序,如图2.5所示。特别需要注意的是,请选择64位的安装程序,虽然32位的安装程序大多可以成功安装到系统中,但是由于目前TensorFlow并不支持32位操作系统,因此在后续安装TensorFlow的步骤中会因为找不到适合的安装包文件而导致安装失败。
图2.5 Python下载版本选择
很多系统中已经装有Python 2.x(一般为Python 2.7),可以利用重新指定路径的方式使系统默认Python命令调用Python 3。当然,不修改也没有问题。下面直接通过Python 3创建虚拟环境后,环境中将有且只有一个Python,而且Python的版本与我们的系统Python 3保持一致。
在Python 3.x的最新安装版本中已经包含pip依赖包管理工具,不需要再进行pip的安装。完成后,打开命令行操作界面,输入如下命令检测安装是否成功:
$ python3 --version $ pip3 –version
当然,熟悉命令行的读者也可以使用Mac下的使用Homebrew软件包管理器进行安装。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" export PATH="/usr/local/bin:/usr/local/sbin:$PATH" brew update brew install python # Python 3 如果是Ubuntu那么apt将会是一个不错的选择。 sudo apt update sudo apt install python3-dev python3-pip
2. 安装Virtualenv
Python虚拟环境Virtualenv用于将软件包安装与系统隔离开来,安装主要使用pip工具,通过初始化和激活过程完成虚拟环境的创建。
首先,我们需要完成安装流程,使用pip安装命令,在Ubuntu和Mac OS中还需要使用sudo取得系统权限。
(sudo) pip3 install -U virtualenv # system-wide install
Ubuntu和Mac OS是类UNIX系统,它们的创建方式很相似。
(1)创建一个新的虚拟环境,方法是选择Python解释器并创建一个./venv目录来存放它:
virtualenv --system-site-packages -p python3 ./venv
(2)使用特定于Shell的命令激活该虚拟环境:
source ./venv/bin/activate # sh, bash, ksh, or zsh
(3)当Virtualenv 处于有效状态时,Shell提示符带有 (venv) 前缀。
(4)在不影响主机系统设置的情况下,在虚拟环境中安装软件包。首先升级 pip:
pip install --upgrade pip pip list # show packages installed within the virtual environment
(5)之后退出Virtualenv,使用以下命令:
deactivate # don't exit until you're done using TensorFlow
在Windows中主要是激活方式有所不同。
(1)创建一个新的虚拟环境,方法是选择Python解释器并创建一个./venv目录来存放它:
virtualenv --system-site-packages -p python3 ./venv
(2)激活虚拟环境:
.\venv\Scripts\activate
(3)在不影响主机系统设置的情况下,在虚拟环境中安装软件包。首先升级pip:
pip install --upgrade pip pip list # show packages installed within the virtual environment
(4)之后退出Virtualenv,使用以下命令:
deactivate # don't exit until you're done using TensorFlow
3. 安装TensorFlow
首先我们要确认安装TensorFlow的软硬件需求,为了后续的开发更加顺利,软件系统尽量遵循谷歌官方的要求,而且要注意括号里面的限制内容。笔者由于教学的需要,曾经在以下系统上进行TensorFlow代码运行,综合考虑,在有一定的Linux系统使用经验的条件下,推荐大家使用Ubuntu 16.04或18.04。
- Ubuntu 16.04或更高版本(64位)
- Mac OS 10.12.6(Sierra)或更高版本(64位)(不支持GPU)
- Windows 7或更高版本(64位)(仅支持Python 3)
硬件方面的要求主要体现在对旧版本CPU的支持不友好方面。综合考虑时间等成本,如果你的机器很老,或者配置很低,那么推荐更换计算机或者更换硬件,原因是从TensorFlow 1.6开始,二进制文件使用AVX指令,这些指令可能无法在旧版CPU上运行,“工欲善其事,必先利其器”的古语放在这里可以说是很合适的。当然,如果准备从软件上解决,主要有两个途径:一个途径是使用1.6以下的版本,但是这种方案的副作用是需要适当修改后面的功能代码(不是太难);另一个途径是使用适合老式CPU的TensorFlow版本,推荐下载地址https://github.com/fo40225/tensorflow-windows-wheel。
接下来,我们会安装TensorFlow到启动成功的Virtualenv虚拟环境中。当然,你也可以安装到你的系统中。
如果要安装到虚拟环境中,就需要输入下面的命令:
pip install --upgrade tensorflow
安装到系统中的命令与虚拟环境安装命令类似:
pip3 install --user --upgrade tensorflow # install in $HOME
安装完成后,使用Python命令打开Python命令行,然后输入下面的命令并按回车键。如果TensorFlow安装失败,系统就会提示没有安装TensorFlow的错误信息;如果安装成功,就不会显示任何错误信息。
import tensorflow as tf
2.2.2 基于应用容器化的Docker方案
Docker是应用容器化目前流行的解决方案,使用简单,系统支持广泛。如果你使用的是Ubuntu系统,那么可以从软件仓库中安装Docker,Mac OS和Windows 10系统可以选择Docker对应的桌面端程序。如果使用的是Windows其他低版本的系统,那么建议使用第一种解决方案,因为实际测试结果表明,低版本的Windows Docker客户端可能存在很多兼容性问题。
Docker安装完成后,你可以下载TensorFlow的Docker镜像并进行运行。
下载Docker镜像的命令是:
docker pull tensorflow/tensorflow
我们使用下载的镜像验证TensorFlow的安装。Docker会在首次运行时下载新的TensorFlow映像:
docker run -it --rm tensorflow/tensorflow \ python -c "import tensorflow as tf"
在配置TensorFlow的容器中启动Bash Shell会话能够满足我们的一些调试类或测试类的需求。以下命令将会创建一个容器,在此容器中启动Python会话并导入TensorFlow。
docker run -it tensorflow/tensorflow bash
要在容器内运行在主机上开发的TensorFlow程序,请装载主机目录并更改容器的工作目录(-v hostDir:containerDir -w workDir):
docker run -it --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow python ./script.py
向主机公开在容器中创建的文件时可能会出现权限问题,通常情况下,最好修改主机系统上的文件。