一文详解全平台 TensorFlow 深度学习框架在线搭建 (CPU&GPU 支持)

工欲善其事,必先利其器。在开始深度学习课程之前,首要的是需要选择一台性能合适的机器来部署深度学习环境以进行学习试验。关于 “选择性能合适的机器”,一般意味着 “好的CPU”,“大内存”,“大硬盘”,“GPU支持”。当然考虑到经济问题以及以学习为优先,利用我们手头闲置的配置最好的机器就可以开始配置深度学习环境了(性能低)。

本文我们将详细介绍如何基于 Windows/ Centos6(7) / Ubuntu 单机或集群服务器搭建 TensorFlow [ CPU/GPU Support ] 深度学习单机或集群分布式学习开发环境。事实上,TensorFlow 集群分布式环境搭建就是多台单机服务器的重复安装过程,可以通过自动化部署完成。

最后,我们将在搭建好的深度学习环境中,运行和测试入门级的 TensorFlow 样例程序以验证安装是否成功。

更多 TensorFlow 框架搭建相关内容,请关注博主相关博文系列 ↓↓↓↓↓

之一 >>>> 一文详解全平台 TensorFlow 深度学习框架在线搭建 (CPU&GPU 支持)

之二 >>>> TensorFlow GPU 支持: Ubuntu16.04 + Nvidia GTX + CUDA + CUDNN


Before Reading

在安装 TensorFlow 之前,我们需要知道的是: TensorFlow 属于很高层的应用!!!高层应用的一个比较大的麻烦就是需要依赖的底层相关很多,如果底层依赖没有弄好的话,高层应用是没法玩转的。那么 解决 Tensorflow 应用和其相关底层的依赖关系 对于开发者的安装而言尤为重要。

TensorFlow 网络教程中,支持五种常用的 TensorFlow 安装方式,分别为:'原生' PipDockerVirtualenvAnaconda源码编译 来安装 TensorFlow。后文会对上述五种方式分别进行介绍,以方便我们根据具体的软硬件、以及应用需求采用不同的安装方式。

初学者一般 推荐使用 Anaconda 进行 TensorFlow 学习环境的安装,更多关于 Anaconda 的介绍,建议参考文档 >>> 【一文了解数据科学神器 Anaconda】。


Installation Options

这里,首先给出一般情况下的 TensorFlow 开发环境搭建场景,来帮助我们明确安装选择:

| >>>> 1 搭建 TensorFlow [CPU Support] 环境 ↓↓↓↓↓↓↓

搭建基于 CPU 运算的 TensorFlow 深度学习环境是最简单、最常见的,运算性能较低。

| >>>> 2 搭建 TensorFlow [GPU Support] 环境 ↓↓↓↓↓↓↓

搭建基于 GPU 运算的 TensorFlow 深度学习环境。建议先明确当前服务器所搭载独立显卡的相关信息(GPU 型号、计算性能等),然后参考后文附录【TensorFlow && NVIDIA 版本信息对照表】,选择安装相互兼容的显卡驱动(CUDA)、显卡加速包(CUDNN)以及 Tensorflow 版本。

| >>>> 3 搭建 TensorFlow 集群(既有集群/新建集群)分布式开发环境 ↓↓↓↓↓↓↓

在新建的服务器集群上搭建 TensorFlow 深度学习环境可以不断尝试安装,不用担心把服务器系统搞崩。但对于在既有集群搭建 TensorFlow 环境(生产/半生产环境),建议先从集群子节点开始一台台安装 TensorFlow,将安装风险降到最低。当然,如果还是担心有风险,可以先通过虚拟机重构伪集群开发环境测试安装过程。熟悉安装过程后,再开始实际安装,尽量将风险降到最低。

推荐使用 Docker 的安装方式,安全、无风险的批量部署(学习成本增加)~~~


预安装环境准备

关于下面给出的 3 点安装环境要求不用深究,后文你会看到相关详细解释:

  1. Linux 系统需要包含 较高版本的 GNU Glibc 库(Centos7 以上);
  2. 源码安装要求 Java_JDK 1.8 以上版本
  3. Python 2.7 或 Python 3.3 以上版本
  4. 为了支持分布式运算,TensorFlow 要求版本大于 0.8,V0.8 之前版本不支持分布式。

服务器操作系统选择

关于搭建 TensorFlow 深度学习开发环境的服务器(Server)的操作系统的选择,选择一个合适的 OS 可以帮我们减少很多的麻烦。

👇👇👇 Centos/Ubuntu Server Select 👇👇👇

| >>>> 1. Centos Server For Building TensorFlow ↓↓↓↓↓↓↓

如果选择 Centos Server,那么我们的 Centos 版本最好选择 Centos7Centos6 因为版本较低,其操作系统内置的库无法很好兼容 TensorFlow。虽可以解决,但会为安装带来更多的麻烦(可以通过升级一些运行时库得以解决)。

当然对于操作系统为 Centos6 的既有服务器,且不可以更换操作系统的安装需求,后文会对解决方法做详细说明。

| >>>> 2. Ubuntu Server For Building TensorFlow ↓↓↓↓↓↓↓

如果选择 Ubuntu Server(墙裂推荐),那么我们的 Ubuntu 版本最好是 Ubuntu 14.04/16.04/18.04。这里只是因为使用 Ubuntu14.04/16.04/18.04 的人较多,可以更好的帮我们解决安装以及使用 TensorFlow 过程中遇到的问题。

对于初学 TensorFlow 深度学习框架,仅仅想做做简单学习测试,强烈建议选择 Ubuntu!!!

👇👇👇 Windows Platform 👇👇👇

一般情况下,Windows 平台下搭建 TensorFlow 深度学习框架仅作为简单学习使用,无法更高效利用软硬件资源。故,我们更应该关注基于 Liunx Server 搭建学习、开发环境。


安装场景说明

实际搭建过程中,根据现有资源以及实际安装需求,你可能有两种选择:

  1. 安装以及配置全新的 Linux Server,部署 TensorFlow;
  2. 基于既有服务器环境,部署 Tensorflow 开发框架。

这一部分,我们分别介绍上述两种需求下 Linux Server 的注意事项 👇👇👇

1 >>> 全新 Linux Server

基于全新 Linux Server 部署 Tensorflow 学习开发框架预准备(推荐 Ubuntu):

[1.1] >>> Ubuntu Server 快速安装

↓↓↓↓↓↓↓ 工具准备 ↓↓↓↓↓↓↓

1
2
3
4
% I. Windows 操作系统电脑一台;
% II. 官网或其它国内镜像站下载 Ubuntu IOS 镜像文件;
% III. Windows 安装两款软件:PE 系统工具 && UltraISO Linux U 盘启动盘制作工具;具体使用方法百度,不做赘述。
% IV. U 盘 2 个:一个安装 PE 系统 U 盘启动盘,可以用来格式化 Server 机原有的磁盘分区,并设置 MBR(可防止 Linux 分区时磁盘柱头自动产生 1M 大小的空闲分区,无法引导);另一个用来制作 Linux 系统 U 盘启动盘;

↓↓↓↓↓↓↓ Setup ↓↓↓↓↓↓↓

使用上面制作好的 UltraISO Linux U 盘启动盘安装系统:安装方法见网络教程,网上有较为详细的安装教程,这里不做详细介绍。特别提到的是:安装系统时会进行系统分区。推荐手动分区,详细分区教程参考个人磁盘空间情况以及网络分区教程。

[1.2] >>> Ubuntu Server 快速配置

关于 Ubuntu Server 的初始配置可参考:

Ubuntu 基础配置参见 >>>> Ubuntu Server 快速配置指南


2 >>> 既有 Linux Server

对于在既有服务器搭建 TensorFlow 深度学习环境,需要明确当前服务器操作系统信息(Centos/Ubuntu)以及已部署环境信息

[2.1] >>> 察看 Linux 操作系统版本信息

1
2
3
4
5
6
7
8
$ lsb_release -a

% 运行输出:
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.9 (Final)
Release: 6.9
Codename: Final

[2.2] >>> 察看 Linux 系统内核版本(包括 GCC 版本信息)

1
2
3
4
$ cat /proc/version

% 运行输出:
Linux version 2.6.32-696.10.1.el6.x86_64 (mockbuild@c1bl.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Aug 22 18:51:35 UTC 2017

需要注意的是 >>>> Centos6(7) 服务器环境下还可能需要如下准备(【Centos6/7 环境准备】>>>> 针对既有服务器),Ubuntu14.04(16.04/18.04…)服务器环境可以直接跳过下一小节内容(推荐阅读)。


Centos6/7 环境准备

Centos 预安装环境准备(Ubuntu14.04 以上不需要):

1 >>> Python 版本问题

安装 TensorFlow 环境要求我们,Python 版本必须选择 2.73.3 以上版本。而 Centos6/7 中原生 Python 版本可能很老,所以需要我们在不影响到系统使用的前提下升级 Python。

1
2
# 察看当前 Centos 中系统 Python 版本:
$ python -V

例如我的服务器系统版本是 Centos6.9,通过查阅版本号发现:Centos 原生 Python 版本是 2.4.3,版本很旧了,升级系统 Python 版本是必须选择的。

👇👇👇 Python3.X && Python2.X:Select 👇👇👇

Python3.XPython2.X 的选择也很重要。我们知道 3.X2.X 有很多不同,基于 Python3.XPython2.X 的 Python 脚本不能很好互相兼容。这里我们推荐使用 Python3.X (原因不解释…)。于是,我们的一般想法是更新 Python 版本到 Python3.X,让其可以正常运行 Python3.X 的脚本。

Python 版本升级,引发如下问题 ↓↓↓↓↓↓

目前我们的情况是 >>>> 原生 Unix/Linux 系统已经自带有一个版本的 Python2.4,但它不是我们需要的 Python 版本,我们想要编译安装满足我们期待的 Python 版本(Python3)。

此时,我们将面临一种选择:是在原有版本基础上 Update(2.x –> 3.x) 呢?还是去 Setup 一个新版本的 Python(原生版本 Python 也保留)?

Update 存在的问题 >>>>

由于 Python 2.x 和 Python 3.x 兼容性问题,将 Python 2.x 直接升级到 Python 3.x 会产生一些问题(例如:Centos 系统下的很多很多基本的命令、软件包都要依赖系统默认原生的 Python 2.x 版本,例如 yum),直接升级后会导致相关依赖软件可能无法正常使用(尽管有繁琐的解决办法)。

Solution >>>>

事实上,一个系统中可以存在多个 Python 版本,也就是说新老版本 Python 是可以共存的(Python-Vers Management)。

所以,一般建议安装添加一个新版本的 Python(与系统原生 Python 版本共存),或者使用虚拟环境工具(Virtual Envs Tools)进行多版本管理(这里不用深究,Virtual Envs Tools 是一种优秀的 Python 多版本共存管理方案)。

| =============================================== Split Line ================================================== |

👇👇👇 正式开始 Python 更新 👇👇👇

[1] >>>> 更新 GCC

linux 平台下安装 Python 通常使用源码编译的方式。

故,GCC 版本太低会导致新版本 Python 包编译不成功,需要更新系统 gcc 版本:

1
$ yum -y install gcc

[2] >>>> 下载 Python 安装包

Python-3.3.0 为例

1
$ wget http://python.org/ftp/python/3.5.0/Python-3.5.0.tar.bz2

注意:按照上述命令下载的软件包会存放在你当前的工作目录下。链接中的数字对应的是 Python 版本号,你也可以把 3.5.0 换成你需要的版本。

[3] >>>> 解压已下载的二进制包并编译安装

1
2
3
4
5
6
7
$ tar -jxvf Python-3.5.0.tar.bz2 
$ cd Python-3.5.0
$ ./configure --prefix=/usr/local/python3.5
$ make all
$ make install
$ make clean
$ make distclean

[4] >>>> 设置软链接

建立软连接指向到当前系统默认 Python 命令的 bin 目录,让系统使用新版本 Python:

先不要执行这里的操作,请 依照最终方案执行,这里还提供一种其它解决思路(不推荐,影响了系统原生环境)

1
2
3
4
5
6
7
8
# 原始 Python 的版本为 2.4,所以为了保留 Python2.4,将原始 /usr/bin/python 改名为 Python2.4
$ mv /usr/bin/python /usr/bin/python2.4

# 将更新后的 python3.5 指向 /usr/bin/python,替换原始的 python2.4
$ ln -s /usr/local/python3.5/bin/python3.5 /usr/bin/python

# 查看当前默认 Python 版本
$ python -V

这样配置之后,系统默认的 Python 成功指向 Python3.5.0yum(依赖 Python2.4 的应用程序) 不能正常使用,还需要修改 yum 的配置文件。 下面我们给出如何通过修改相关配置文件来解决依赖 Python2.4 的应用程序无法正常调用的问题。以修改 yum 配置文件(其它应用程序类似)为例:

1
$ vim /usr/bin/yum

把文件头部的 #!/usr/bin/python 改成 #!/usr/bin/python2.4 即可。

当然,很多同学可能回说:“那我怎么能知道都有哪些应用程序的配置文件需要修改呢(都影响了那些应用程序)?”。

👇👇👇 最终方案 👇👇👇

故为了更安全的使用升级后的 Python 版本,我们可以不覆盖原本的 /usr/bin/python,而是在 /usr/bin/ 下新建一个 python3.5 链接。如下:

1
2
3
4
5
6
7
$ ln -s /usr/local/python3.5/bin/python3.5 /usr/bin/python3.5

或者:

# 为了防止覆盖问题(尽量不要在系统 /usr/bin 下进行覆盖),你可以:
$ ln -s /usr/local/python3.5/bin/python3.5 /usr/local/bin/python3.5
# 这里由于【/usr/local/bin/】 路径已在 PATH 中,故可以将 Python 解释器路径放于 `/usr/local/bin` 下。

这样,调用系统命令 python 时仍然指向的老版本的 Python2.4。当我们需要使用新版本的 Python 时,只需要使用 python3.5 即可实现调用。


2 >>>GNU GLIBC 库版本问题

注意:此处更新有风险,升级需谨慎(一般不要随意升级内核运行库)!!!看到 Centos 上搭建 TensorFlow 的难度了吧~~~~

服务器是 Centos6.X 系统,即使通过 pip 安装好了 TensorFlow,在运行 TF 样例时我们也会发现仍然会报 glibc 版本过低的错误。这是由于 Centos6 上 glibc 最多到 2.12 版本,而强行使用高版本的 glibc 会导致程序意外崩溃。

1
2
# Error:import tensorflow 时提示 GLIBC_2.14 找不到
importError: /lib64/libc.so.6: version `GLIBC_2.14' not found

你可以先跳过当期小节的学习,等后续测试 TF 样例时产生该问题再进行查看!!!

👇👇👇 解决方法 👇👇👇

[1] >>>> 安装或更新 GCC

注意,由于在上文 Python 升级时我们安装或更新过 GCC,故可以直接跳过该节。否则首先需要完成 安装或更新 GCC

首先察看当前系统的 gcc 版本: gcc –-version,然后 yum update gcc;如果没有 gcc 需要安装 gcc。后续 GLIBC 库升级需要使用 gcc 编译

下面我们开始看如何更新系统中的 GNU GLIBC 库

[2] >>>> 查看当前 GLIBC 支持的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root]$ strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE

可以看到,Centos6.9 自带的 Glibc 库最高版本是 2.12 ,所以需要对当前版本进行升级。

[3] >>>> 安装 GLIBC_2.17

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.17.tar.xz

$ tar -zxvf glibc-2.17.tar

$ cd glibc-2.17

$ mkdir build
$ cd build

$ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

$ make -j4
$ make install

% 等待安装成功即可。

[4] >>>> 察看更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root]$ strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE

此时,我们发现 Centos6glibc 库版本过低问题得以解决!如果升级不成功可以使用如下语句简单还原:

1
2
$ rm -rf /lib64/libc.so.6
$ LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6

| =============================================== Split Line ================================================== |

👇👇👇 可能引发的问题以及解决方法 👇👇👇

[1] >>>> GLIBC 升级失败导致系统崩溃

如果 GLIBC 升级后发生系统崩溃(使用命令会显示错误信息),可参见博文系列中 >>>> 【GLIBC 升级失败导致系统崩溃解决方法】。

[2] >>>> libstdc++.so.6 version `CXXABI_1.3.9’ not found

更新 GLIBC 后,在 import tensorflow 测试时可能还会产生一个问题:libstdc++.so.6: version 'CXXABI_1.3.9' not found (required by bin/opencv_test_core)?

这是由于 更新和安装 GCC 导致的。需要使用升级后的 gcc 的动态库去替换老版本的 gcc 动态库。

解决方法参见博文系列中 >>>> 【Libstdc++.so.6 Version ‘CXXABI_1.3.X’ Not Found】。


TensorFlow GPU 支持

TensorFlow Only CPUGPU enabled 版本区别:

当处理数据量较大时,支持 GPU 版本处理速度要比支持 CPU 版本运行速度更快。当数据量较小时,GPU 可能运行更慢。

👇👇👇 TensorFlow GPU 运算环境注意事项 👇👇👇

对于 TensorFlow GPU 环境,部署 CUDA/CuDNN 是必须的。

搭建基于 GPU 运算的 TensorFlow 深度学习环境时,需要根据服务器所搭载独立显卡的相关信息(GPU 型号、计算性能等),选择安装可相互兼容的显卡驱动(CUDA)、显卡加速包(CUDNN)以及相应的 TensorFlow 版本

并且,只有在安装了特定( CUDA && CuDNN)版本的服务器环境(如:CUDA Toolkit 8.0(7.5) && CuDNN v5.1(v4)64Ubuntu)下才可以通过 Pip 安装支持 GPU 的相应版本的 TensorFlow v1.0.0(1.1.0/1.2.0)。

↓↓↓↓↓↓ 关于 CUDA && CuDNN && TensorFlow 版本的选择问题 ↓↓↓↓↓↓

可以根据官方实测过的【Tensorflow && NVIDIA 版本信息对照表】进行选择,如下:

[1] >>>> For Linux/macOS >>>> 【TF CPU/GPU

[2] >>>> For Windows >>>> 【TF CPU/GPU

↓↓↓↓↓↓ 关于 TensorFlow + CUDA + CuDNN 环境搭建 ↓↓↓↓↓↓

所有 Ubuntu 下搭建 TensorFlow GPU + CUDA + CuDNN 运算环境的问题,可参见博文系列中 >>>> 【TensorFlow GPU 支持: Ubuntu16.04 + Nvidia GTX + CUDA + CUDNN】。

需要注意的是,最好先学习完 TensorFlow CPU 支持的环境搭建之后,再开始尝试 TensorFlow GPU 支持,TensorFlow 的安装方式都是一样的,唯一的区别在于 CUDA/CuDNN。


TensorFlow Setup

准备好 TensorFlow 预安装环境之后,接下来我们正式来看官方提供的不同安装方式的实现(你可以根据实际需要选择不同的安装方法):

使用原生 Pip 安装

推荐指数:⭐️⭐️

我们知道,PIP 是一种包管理工具(安装 Python 后自带),用于安装和管理 Python 丰富的类库。

同样的,通过 pip 可以安装已经打包好的 TensorFlow 应用以及 TensorFlow 所需要的依赖,可以较为方便地解决 Tensorflow 应用和其相关底层的依赖关系。

网络上,你可能查询到两种主流的使用原生 Pip 的方式安装 TensorFlow:

  • pip install tensorflow_v_xxx.whl:通过特定版本(v_xxx)的 TensorFlow Whl 安装包进行安装,安装过程较为繁琐;
  • pip install tensorflow from PIP-Sources:随着 TensorFlow 的流行,Pip 源中开始全面支持 TensorFlow 包的下载,之后你就可以像安装 Python 第三方类库一样安装 TensorFlow 框架了。

下面你可以分别看到上述两种安装方法的差异:

PIP Install From Sources

目前,Pip 源中已经开始全面支持 TensorFlow 包的下载了,你可以通过 Pip 安装 TensorFlow 框架就像安装其它 Python 第三方类库一样简单(以 TensorFlow 1.2 版本为例):

1
2
3
4
5
6
7
# For TensorFlow-CPU
$ pip install tensorflow==1.2

# 或:

# For TensorFlow-GPU
pip install tensorflow-gpu==1.2

可跳过当前小节~~~

起初,Pip 无法管理 TensorFlow,需要通过 TensorFlow 官方提供的 .whl 包进行安装,安装过程受网络波动影响较大。

PIP Install TensorFlow.whl

具体安装步骤如下(不再推荐,了解即可):

[1] >>>> Export TensorFlow.whl(CPU/GPU)URL

首先,我们给出一个 TensorFlow.whl 安装包下载地址(清华大学开源镜像站) ,提供了不同平台下、不同安装版本的 TensorFlow 安装包下载 URL,从这里我们可以获取到我们需要的 TensorFlow 版本。

然后,将 TensorFlow.whl URL 导入系统环境变量(TF_BINARY_URL)中,用于后续的下载:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
####### 寻找合适的 Tensorflow 安装包下载链接 #######

# 环境变量 $TF_BINARY_URL 根据你的实际需求(想要下载的 Tensorflow 版本)进行设置,典型选项如下:
# 注意,以下给出的 URL 均属于 Google 官方链接,下载时可能出现网络中断,你可以将其更换为清华大学开源镜像站 URL(目前可能已不再提供,Pip 源中已包含)。

# Ubuntu/Linux 64-bit, CPU only, Python 2.7
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.12.1-cp27-none-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7
# 需要 CUDA toolkit 8.0(7.5) and CuDNN v5(v4).
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.1-cp27-none-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.4
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.12.1-cp34-cp34m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4
# 需要 CUDA toolkit 8.0 and CuDNN v5.0
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.1-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.5
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.12.1-cp35-cp35m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 8.0 and CuDNN v5. For other versions, see "Installing from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-linux_x86_64.whl

# Mac OS X, CPU only, Python 2.7:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.1-py2-none-any.whl
# Mac OS X, GPU enabled, Python 2.7:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-0.12.1-py2-none-any.whl

# Mac OS X, CPU only, Python 3.4 or 3.5:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.1-py3-none-any.whl
# Mac OS X, GPU enabled, Python 3.4 or 3.5:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-0.12.1-py3-none-any.whl

[2] >>>> Install TensorFlow By TF_BINARY_URL

上面我们已经选择了合适版本的 TensorFlow URL,运行如下命令可完成 TensorFlow 的安装:

1
2
3
4
5
# Python 2 环境 
$ sudo pip install --upgrade $TF_BINARY_URL

# Python 3 环境
$ sudo pip3 install --upgrade $TF_BINARY_URL

耐心,这是完成环境搭建的最后一步,过程中会出现 网络连接超时 等问题(外网服务器下载)。如果一次无法成功安装 $TF_BINARY_URL,并且你确定你所配置的网络或网络代理等都正常。那么,多试几次,不厌其烦,如果出现下面的信息,则表示你快要成功了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
###### Python 3 成功运行记录如下 ######

You are using pip version 7.1.0, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Processing ./tensorflow_gpu-0.12.1-cp27-none-linux_x86_64.whl
Collecting mock>=2.0.0 (from tensorflow-cpu==0.12.1)
Using cached mock-2.0.0-py2.py3-none-any.whl
Collecting protobuf>=3.1.0 (from tensorflow-cpu==0.12.1)
Downloading protobuf-3.1.0.post1-py2.py3-none-any.whl (347kB)
100% |████████████████████████████████| 348kB 164kB/s
Collecting numpy>=1.11.0 (from tensorflow-cpu==0.12.1)
Downloading numpy-1.11.3.zip (4.7MB)
100% |████████████████████████████████| 4.7MB 34kB/s
Collecting wheel (from tensorflow-cpu==0.12.1)
Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
100% |████████████████████████████████| 69kB 58kB/s
Collecting six>=1.10.0 (from tensorflow-cpu==0.12.1)
Downloading six-1.10.0-py2.py3-none-any.whl
Collecting funcsigs>=1 (from mock>=2.0.0->tensorflow-cpu==0.12.1)
Downloading funcsigs-1.0.2-py2.py3-none-any.whl
Collecting pbr>=0.11 (from mock>=2.0.0->tensorflow-cpu==0.12.1)
Downloading pbr-1.10.0-py2.py3-none-any.whl (96kB)
100% |████████████████████████████████| 98kB 93kB/s
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/lib/python2.7/site-packages (from protobuf>=3.1.0->tensorflow-cpu==0.12.1)
Installing collected packages: funcsigs, six, pbr, mock, protobuf, numpy, wheel, tensorflow-cpu
Found existing installation: six 1.9.0
Uninstalling six-1.9.0:
Successfully uninstalled six-1.9.0
Running setup.py install for numpy
Successfully installed funcsigs-1.0.2 mock-2.0.0 numpy-1.11.3 pbr-1.10.0 protobuf-3.1.0.post1 six-1.10.0 tensorflow-cpu-0.12.1 wheel-0.29.0

如果以上下载过程发生中断,重新执行命令即可。如果你一次成功,那么恭喜。否则此处需要耐性!!!如若上述一直不成功,这里还提供一种解决思路:

1
2
3
4
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0rc0-py2-none-any.whl

# 然后,先 wget $TF_BINARY_URL(或浏览器)下载 tensorflow—xxx.whl 文件到本地;
# 最后使用 pip install *.whl 进行本地安装。

Pip 方法评价

以上安装过程在 Centos6.9(7) && ubuntu14.04/16.04/18.04 服务器环境下已测试通过。

↓↓↓↓↓↓ 优点 ↓↓↓↓↓↓

使用 Python 中原生 Pip 的安装方式,应该是几种安装方法中最简单、最快的一种。

↓↓↓↓↓↓ 缺点 ↓↓↓↓↓↓

缺点很明显,不能灵活定制。并且,由于属于直接安装于服务器原生 Python 环境中(未隔离),对原生开发环境有较大影响,不推荐使用该方法。


如果是玩数据玩 ML 的同学,如果你还不知道 Anaconda,你就 out 啦!!!

Anaconda 是一个基于 Python 的科学计算平台,这个平台里包含有 PythonRScala 等相关的绝大部分主流的用于科学计算的包,这极大的方便了开发人员的使用。

使用 Anaconda 安装

推荐指数:⭐️⭐️⭐️⭐️⭐️

Anaconda 是 Python 的一个发行版,如果把 Python 比作 Linux,那么 Anancoda 就是 CentOS 或者 Ubuntu。它通过 Conda 工具解决了 Python 开发者的两大痛点:

  1. 提供包管理 >>> 功能类似于 pip,Windows 平台安装 Python 第三方包经常失败的场景得以解决;
  2. 提供虚拟环境管理 >>> 功能类似于 Virtualenv,解决了多版本 Python 并存问题。

👇👇👇 通俗的讲 👇👇👇

使用 Anaconda 安装 TensorFlow 进行学习开发时,相当于将所有的 TensorFlow 底层依赖细节全部已经打包封装好了(包管理)!!!

并且,Anaconda 还能创建独立、隔离的 TensorFlow 运算环境(虚拟环境管理),相当于将 TensorFlow 的环境与其他环境做了隔离,这样你就可以将 TensorFlow 随便玩,爱怎么玩怎么玩,也不用担心破坏之前的环境!!!

像了解更多关于 Anaconda 的说明和使用方法,请关注博主相关博文系列中 >>>> 【一文了解数据科学神器 Anaconda


Setup Anaconda

要使用 Anaconda,首先要完成不同平台下 Anaconda 的安装与配置。

这里,我们先给出 Anaconda 官方网址 用于下载相应的安装包(下载较慢的话可以尝试前往 >>>【清华大学开源软件镜像站】)。

关于 Anaconda 详细的安装以及配置教程,请关注博主相关博文系列 >>>> 【一文了解数据科学神器 Anaconda】中 >>>> 小节【How to setup Anaconda?】说明,这里不再赘述。


Conda Tool

Conda 是 Anaconda 下用于包管理和环境管理的命令行工具,是 Anaconda 的核心。其可以看作是 pipVitualenv 的组合。

Anaconda 安装、配置成功后 conda 会被加入到环境变量中,因此可直接在命令行窗口运行 conda 命令:

1
2
3
4
5
6
# 测试安装是否成功
$ conda –V 或 which conda

# 假如安装的是 Python 2.7 对应的版本,运行:
$ python -V
# 可以看到:Python 2.7.12 :: Anaconda 4.3.30 (64-bit),说明安装成功。

1 >>>> Conda 虚拟环境管理

Conda 工具可以隔离出一个和当前系统 Python 环境分离、独立的虚拟环境,以实现多版本 Python 或 TensorFlow 环境切换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### [1] 创建虚拟环境 ###

# 基于 python3.6 创建一个名 Python3 的环境
$ conda create --name Python3 python=3.5
# 基于 python2.7 创建一个名为 Python2 的环境
$ conda create --name Python2 python=2.7

# 删除环境
$ conda remove -n Python2 --all

### [2] 切换虚拟环境 ###

# 激活 Python3 环境
$ activate Python3 # windows
$ source activate Python3 # linux/mac
# 退出 Python3 环境
$ source deactivate

# Python3 切换到 python2
$ activate python2

2 >>>> Conda 包管理

Conda(类似于 Pip)的包管理功能是对 pip 包管理器的一种补充。

如果当前已经激活了某个 Python 虚拟环境,那么就可以在当前环境使用 conda 安装第三方扩展了。

对于那些用 pip 无法安装成功的模块你都可以尝试用 conda 来安装,如果用 conda 找不到相应的包,当然你继续选择 pip 来安装包也是没问题的。

事实上,使用 Anaconda 安装 TensorFlow 环境就是 >>>> 使用 Conda 创建一个独立、隔离的 Python 虚拟环境,然后将 TensorFlow 作为一个 Python 第三方包进行安装,以创建隔离于操作系统原生环境的虚拟 TensorFlow 深度学习环境。

关于 Conda Tool 更详细的说明,请关注博主相关博文系列 >>>> 【一文了解数据科学神器 Anaconda】中 >>>> 小节【Conda 包以及虚拟环境管理工具】说明,这里不再赘述。


Conda&&Pip Channels

类似于 Pip 安装或更新失败,Anaconda 使用过程中如 conda install 创建环境失败或 conda update 更新失败等等,可能产生 HTTP error,如下:

1
2
3
4
5
6
7
Fetching package metadata .......
CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://nanomirrors.tuna.tsinghua.edu.cn/anaconda/cloud/linux-64/rpodata.json>
Elapsed: -

An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
ConnectTimeout(MaxRetryError("HTTPSConnectionPool(host='nanomirrors.tuna.tsinghua.edu.cn', port=443): Max retries exceded with url: /anaconda/cloud/linux-64/repodata.json (Caused by ConnectTimeoutError(<requests.packages.urllib3.connecton.VerifiedHTTPSConnection object at 0x7fb6d340dcc0>, 'Connection to nanomirrors.tuna.tsinghua.edu.cn timed out. (connct timeout=9.15)'))",),)

👇👇👇 产生原因以及解决方法 👇👇👇

PIP 一样,当需要安装或更新很多 Packages 时,你会发现 Conda 下载和更新速度有时很慢,最后导致崩掉。最主要原因是因为 Anaconda.org 的服务器在国外,网络时好时坏(波动较大)。

所幸的是,清华 TUNA、中科大等国内镜像源有 Anaconda 仓库的镜像,这意味着我们可以将默认 Anaconda 源换为 清华 TUNA 等国内镜像源(换源),以支持稳定的网络环境。

需要注意的是:国内镜像源需要获得 Anaconda 官方的授权才可以提供对外的镜像服务。2019 年清华、中科大由于暂时未获取到 Anaconda 授权,于 2019.05 月底暂停了很长一段时间的 Anaconda 镜像服务,目前已恢复!!!

关于 Conda&&Pip Channels 更详细的说明,请关注博主相关博文系列 >>>> 【一文了解数据科学神器 Anaconda】中 >>>> 小节【Conda&&Pip Channels】说明,这里不再赘述。


Setup TensorFlow

熟悉了 Anaconda 环境后,我们来看如何基于 Anaconda 虚拟环境来搭建 TensorFlow 深度学习环境:

[1] >>>> CUDA && CUDNN(GPU Support 版需要执行该步骤,CPU Support 跳过这一部分即可)

TensorflowCaffe 一样,也是支持 CPUGPU 两个版本。故也需要安装 CUDA && CUDNN。根据版本对照表信息这里推荐安装 CUDA 版本为 8.0CUDNN 版本为 5.1TensorFlow 版本为 1.2.0

搭建 TensorFlow GPU + CUDA + CuDNN 运算环境的问题,可参见博文系列中 >>>> 【TensorFlow GPU 支持: Ubuntu16.04 + Nvidia GTX + CUDA + CUDNN】。

[2] >>>> 为 TensorFlow 创建虚拟环境

Anaconda 的环境准备好了以后,接下来我们建立一个 Conda 的虚拟环境,给这个环境取名叫 for_tensorflow:

1
2
3
4
5
# Python 2.7
$ conda create -n for_tensorflow python=2.7

# Python 3.5
$ conda create -n for_tensorflow python=3.5

如果发现,无法成功创建(换源?),不要灰心,多创建几次会成功的。

[3] >>>> 激活创建好的虚拟环境

1
2
[root@localhost ~]# source activate tensorflow
(for_tensorflow)[root@localhost ~]#

注意,激活 tensorflow 环境后会发现用户名前出现 (for_tensorflow) 的标识,之后 TensorFlow 会被安装到该虚拟环境中。

[4] >>>> 虚拟环境中使用 Pip 安装 TensorFlow

实际上,for_tensorflow 虚拟环境中使用 Pip 安装 TensorFlow,和使用系统原生 Pip 安装 TensorFlow 一模一样:

  • pip install tensorflow_v_xxx.whl:通过特定版本(v_xxx)的 TensorFlow Whl 安装包进行安装,安装过程较为繁琐;
  • pip install tensorflow from PIP-Sources:随着 TensorFlow 的流行,Pip 源中开始全面支持 TensorFlow 包的下载,之后你就可以像安装 Python 第三方类库一样安装 TensorFlow 框架了。

具体安装步骤不再进行赘述,请参看前文~~~

[5] >>>> Problem:Glibc Update && libstdc++.so.6: version `CXXABI_1.3.9’ not found

Centos6/7 下可能出现 Glibc 库升级失败libstdc++.so.6: version 'CXXABI_1.3.9' not found 报错,而 Ubuntu 下安装不会出现该问题。

解决方法见 >>>> 【Centos6/7 环境准备】章节。


TF-Version Control

类似于 Python 多版本共存管理方案,借鉴 Conda 管理工具Conda 虚拟环境管理 使用方法,解决如何在一个 Anaconda 上装多个不同的 TensorFlow 版本。

我们可以通过为不同版本的 TensorFlow 分别创建不同的 Conda 虚拟环境,实现 TensorFlow 的多版本管理:

1
2
3
4
5
6
7
8
9
# For TensorFlow v1.1.0 CPU
$ conda create -n tensorflow_v1.1 python=3.5
$ activate tensorflow_v1.1
$ pip install tensorflow==1.1

# For TensorFlow v1.2.0 CPU
$ conda create -n tensorflow_v1.2 python=3.5
$ activate tensorflow_v1.2
$ pip install tensorflow==1.2

这样,你可以随时测试不同 TensorFlow 版本的差异,或适应不同工程项目对 TensorFlow 版本的要求。


Anaconda 激活环境困扰

每次运行 TensorFlow 程序前,都需要相应的虚拟环境中运行,你可以:

[1] >>>> 设置 TensorFlow 永久环境(开机自启)

每次运行 tensorflow 环境都需要启动环境,如何设置永久环境(写入用户配置文件):

1
2
$ printf './root/anaconda3/bin/activate tensorflow-3.5' >>~/.bashrc
$ source ~/.bashrc

[2] >>>> 快捷启动 TensorFlow 环境

不想设置永久环境(影响其他人使用),但每次启动 TensorFlow 环境时命令太长,如何设置命令别名:

1
2
3
4
## entertf 启动:tensorflow-py35 环境
$ printf '\nalias entertf="source /root/anaconda3/bin/activate tensorflow-py3.5"' >>~/.bashrc
## exittf 退出环境
$ printf '\nalias exittf="source deactivate"' >>~/.bashrc

TF-Services Support

Tensorflow 程序作为某工程项目(Python/JAVA/…)一部分,以提供算法支持,那么如何被调用?:

你可以很容易想到 >>>> 可以提供了一个 Python/Java 通过调用 shell 命令实现启动 TensorFlow 运算环境并执行目标程序的接口。

事实上,这不是一个好的方法。更多的 >>>> 将 TensorFlow 封装成一个 Python 微服务(例如:Flask 框架)>>>> 通过网络调用来交互,确保各程序之间的独立性


Anaconda 方法评价

以上安装过程在 Centos6.9(7) && ubuntu14.04/16.04/18.04 服务器环境下已测试通过。

↓↓↓↓↓↓ 优点 ↓↓↓↓↓↓

引入独立、隔离的虚拟环境管理,灵活定制,支持 TensorFlow 多版本管理。

↓↓↓↓↓↓ 缺点 ↓↓↓↓↓↓

唯一代价就是引入一定的学习成本,但学习 DeepLearning 你还能不接触 Anaconda?!!


使用 VirtualEnv 安装

关于 VirtualEnv 工具的使用说明,详情可参见 >>>> 【Pythoner 神器之 virtualenv】。

事实上,VirtualEnv 类似于 Conda 虚拟环境管理功能,也是创建出一个个独立、隔离的虚拟环境,以实现与原生环境的分离,且达到多版本管理的目的。

但 Anaconda 是一个生态圈,其功能远远大于 VirtualEnv,推荐使用 Anaconda。


使用 TF 源码编译安装

使用 TensorFlow 源代码编译安装的过程,就是将 TensorFlow 源代码编译成 Pip 安装包并完成安装的过程。

👇👇👇 全过程 👇👇👇

首先将 TensorFlow 源代码编译成 Pip 所使用的 wheel 文件 >>>> 然后使用 pip install 进行安装即可。

另外,你还需要准备 TensorFlow 源代码,JDK8 以上,Bazel 编译工具。如果想要支持 GPU,还需要部署 CUDA && CuDNN。

使用 TF 源码编译安装可以使用最新源码,并且编译得到的是支持本地 CPU/GPU 优化适配的版本,且支持灵活定制 TensorFlow。


使用 Docker 安装

Docker 是新一代的虚拟化技术,让开发者可以打包他们的应用以及相关依赖包到一个可移植的容器中,然后发布到任何流行的 Linux(内核版本高于 3.10)机器上。

Docker 支持大部分的操作系统:Linux[ubuntu/Centos/Debian/Red Hat/…]、Windows7 以上,以及 Mac OS 等。它可以将 TensorFlow 以及 TensorFlow 的所有依赖关系统一到 Docker 镜像中,从而大大简化安装过程。

当你通过 Docker 安装和运行 TensorFlow 时,它与你机器上之前已安装的软件包实现完全隔离。

未完待续~~~~

Docker 极其适合在大量相同环境机器构成的集群上,批量部署独立、隔离的 TensorFlow 环境。


TF-Envs Test

TensorFlow 深度学习环境安装、部署完成之后,这里我们将通过一个样例来测试是否安装成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(tensorflow-3.5) root@ubuntu-Lenovo-Product:~# python
Python 3.5.4 | packaged by conda-forge | (default, Dec 18 2017, 06:30:33)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print (sess.run(hello))
b'Hello, TensorFlow!'

>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print (sess.run(a+b))
42
>>>

样例结果与上述输出信息一致则表示 TensorFlow 安装成功!!!

| ============================================= Possible Problems ========================================== |

👇👇👇 import tensorflow as tf 导入问题 👇👇👇

↓↓↓↓↓↓ 1. Protocol Versions ↓↓↓↓↓↓

1
2
3
4
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.1.0If you cannot immediately regenerate your protos, some other possible workarounds are:
1. Downgrade the protobuf package to 3.20.x or lower.
2. Set PROTOCOL_BUPFERS_PYTHON_iMPLEMENTATION=python (but this will use pure-Python parsing and will be mch slower ,More information: https://developers. google.com/protocol-buffers/docs/news/2022-05-06#python-updates

仔细阅读报错信息就会发现,报错的主要原因是因为 protobuf 的版本太高而导致编译错误。你只需要按照编译器提示的信息在当前环境中下载 3.19.0 对应的版本即可:

1
$ pip install protobuf==3.19.0

↓↓↓↓↓↓ 2. NumPy Versions ↓↓↓↓↓↓

1
FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.

仔细阅读报错信息就会发现,报错的主要原因是因为 numpy 的版本太高而导致的警告信息,并不会引发报错。你可以在当前环境中降低其版本:

1
$ pip install numpy==1.16.0

| ================================================== Split Line =============================================== |

👇👇👇 如果 tf.Session() 时遇到问题 👇👇👇

1
I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use:SSE4.1 SSE4.2 AVX

上述输出是不影响 TensorFlow 使用的,可能你觉得这看起来也太难受了。解决方法如下:

1
2
3
4
5
6
# 1. 在代码开始导入:
>>>import os
>>>os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
>>>import tensorflow as tf

# 2. 使用 TensorFlow 源码编译安装 TensorFlow

Author

Waldeinsamkeit

Posted on

2018-04-01

Updated on

2024-02-29

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.