Tensorflow 环境搭建 1.6.0

本章主要介绍在几个主要的平台上, 如何安装 Tensorflow, 以及简单的运行测试

名词介绍

CUDA 简介

显卡厂商 NVIDIA 推出的运算平台 CUDA (Compute Unified Device Architecture), 是一种通用的并行计算架构, 该架构使 GPU 能够解决复杂的计算问题, 它包含了 CUDA 指令集以及 GPU 内部的并行计算引擎。

提供了硬件的直接访问接口, 而不必像传统方式一样必须依赖图形 API 接口来实现 GPU 的访问, 从而给大规模的数据计算应用提供了一种比 CPU 更加强大的计算能力。程序开发人员通过 C 语言, 利用 CUDA 的指令接口, 就可以编写 CUDA 架构的程序。

CuDNN 简介

CuDNN (CUDA Deep Neural Network library) 是专门针对深度学习框架的 GPU 计算加速方案, 支持卷积、池化和 RNN 的性能优化。大部分深度学习框架, 包括 TensorFlow, 都支持 CuDNN。

目前包括 TensorFlow 在内的大部分深度学习框架, 都支持 CUDA。所以, 为了让我们的深度神经网络的程序在 TensorFlow 上跑的更加好, 推荐配置至少一块支持 CUDA 和 CuDNN 的 NVIDIA 的显卡。

安装环境

Tensorflow 推荐在 Ubuntu 16.04.1 LTS 上进行安装, 但同时也支持 Mac 和 Windows。深度学习计算需要大量的向量和矩阵计算, 使用 GPU 可以有一个数量级的速度提升

# 可以显示服务器信息,测速
wget -qO- bench.sh | bash

----------------------------------------------------------------------
CPU model            : Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
Number of cores      : 40
CPU frequency        : 1200.031 MHz
Total size of Disk   : 15120.4 GB (22.2 GB Used)
Total amount of Mem  : 257851 MB (632 MB Used)
Total amount of Swap : 7812 MB (0 MB Used)
System uptime        : 8 days, 1 hour 6 min
Load average         : 0.00, 0.00, 0.00
OS                   : Ubuntu 16.04.1 LTS
Arch                 : x86_64 (64 Bit)
Kernel               : 4.4.0-31-generic
----------------------------------------------------------------------

安装 TensorFlow

TensorFlow 的 Python API 支持 Python 2.7 和 Python 3.3 以上版本。GPU 版本推荐使用 CUDA Toolkit 8.0 和 CuDNN v5 版本。

通过 pip 安装 TensorFlow

安装 CPU 版本的 TensorFlow

# Python 2.7
sudo pip install tensorflow

# Python 3.5
sudo pip3 install tensorflow

安装支持 GPU 版本的 TensorFlow

# Python 2.7
sudo pip install tensorflow-gpu

# Python 3.5
sudo pip3 install tensorflow-gpu

源码编译安装 TensorFlow

从 GitHub 下载源码

git clone https://github.com/tensorflow/tensorflow

安装 Bazel

Bazel 是 Google 开源的一套自动化构建工具, 可以通过源的方式安装, 也可以通过编译源码安装, 这里只介绍最简单的通过源的安装方式

先安装 JDK8

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

添加 Bazel 源的地址

echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -

安装 Bazel

sudo apt-get update
sudo apt-get install -y bazel

编译 TensorFlow

过程中会进行一些参数路径选择, 根据需要自己配置

cd tensorflow
./configure
# 添加 --config=cuda 表示 GPU 版本
bazel build -c opt --config=cuda --define=use_fast_cpp_protos=true /tensorflow/tools/pip_package:build_pip_package

# 编译生成的 whl 文件会放在 /tmp/tensorflow_pkg 目录
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

# 安装编译好的 TensorFlow
sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-0.12*.whl

编译安装过程中可能出现一些其他的依赖, 需要手动安装

# 根据运行出错的提示可能需要安装 funcsigs 和 pbr
sudo pip install funcsigs
sudo pip install pbr

CUDA 和 CuDNN 安装

要使用 TensorFlow 的 GPU 版本, 需安装 CUDA 和 CuDNN 库

NVIDIA 驱动安装

驱动下载地址: NVIDIA 驱动下载

sudo chmod +x NVIDIA-Linux-x86_64-367.44.run
./NVIDIA-Linux-x86_64-367.44.run

CUDA 安装

根据系统选择 CUDA 版本

下载地址: CUDA 下载

安装过程会提示一些选项, 需要注意的是, 我们在上一步已经安装了 NVIDIA 的驱动, 所以在提示是否需要安装NVIDIA Accelerated Graphics Driver 的时候选择 n

选择参考如下: 请先阅读完许可文件, 以下是非 root 安装步骤

Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit: n

Install the CUDA 9.0 Toolkit?
(y)es/(n)o/(q)uit: y

Enter Toolkit Location
 [ default is /usr/local/cuda-9.0 ]: /home/acesheep/cuda-9.0

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y

/usr/local is not writable.
Do you wish to run the installation with 'sudo'?
(y)es/(n)o: n

sudo permissions are required to create the symbolic link.
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: n

Install the CUDA 9.0 Samples?
(y)es/(n)o/(q)uit: y

Enter CUDA Samples Location
 [ default is /home/acesheep ]:

Installing the CUDA Toolkit in /home/acesheep/cuda-9.0 ...
Installing the CUDA Samples in /home/acesheep ...
Copying samples to /home/acesheep/NVIDIA_CUDA-9.0_Samples now...
Finished copying samples.

安装成功后, 提示我们需要把路径添加到环境变量里

Please make sure that
 -   PATH includes /home/acesheep/cuda-9.0/bin
 -   LD_LIBRARY_PATH includes /home/acesheep/cuda-9.0/lib64, or, add /home/acesheep/cuda-9.0/lib64 to /etc/ld.so.conf and run ldconfig as root

root 用户在 /etc/profile 或者非 root 用户在 ~/.bashrc 文件中添加如下内容

export PATH=/home/acesheep/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH=/home/acesheep/cuda-9.0/lib64/:$LD_LIBRARY_PATH

# 然后执行 source, 使其立即生效
source /etc/profile
source ~/.bashrc

CuDNN 安装

下载地址: CuDNN 下载

以 CuDNN 的 v7.1 版本, Cuda 9.0 为例

cp cudnn-9.0-linux-x64-v7.1.solitairetheme8 cudnn-9.0-linux-x64-v7.1.tgz
tar xvf cudnn-9.0-linux-x64-v7.1.tgz
cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.1.2
cuda/lib64/libcudnn_static.a

设置环境变量

root 用户在 /etc/profile 或者非 root 用户在 ~/.bashrc 文件, 在末尾添加如下内容

export CUDA_HOME=/home/acesheep/cuda-9.0
export LD_LIBRARY_PATH="$HOME/cuda/lib64/:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="$CUDA_HOME/lib64/:$LD_LIBRARY_PATH"
export PATH="$CUDA_HOME/bin:$PATH"

# 然后执行 source, 使其立即生效
source /etc/profile
source ~/.bashrc

安装完成之后, 让我们来测试一下 CUDA, 运行 nvidia-smi

Thu Mar 29 15:55:46 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  TITAN Xp            Off  | 00000000:04:00.0 Off |                  N/A |
| 23%   28C    P0    59W / 250W |      0MiB / 12189MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  TITAN Xp            Off  | 00000000:05:00.0 Off |                  N/A |
| 23%   29C    P0    60W / 250W |      0MiB / 12189MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  TITAN Xp            Off  | 00000000:08:00.0 Off |                  N/A |
| 23%   33C    P0    61W / 250W |      0MiB / 12189MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  TITAN Xp            Off  | 00000000:09:00.0 Off |                  N/A |
| 23%   35C    P0    62W / 250W |      0MiB / 12189MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   4  TITAN Xp            Off  | 00000000:85:00.0 Off |                  N/A |
| 23%   30C    P0    60W / 250W |      0MiB / 12189MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   5  TITAN Xp            Off  | 00000000:86:00.0 Off |                  N/A |
| 23%   35C    P0    60W / 250W |      0MiB / 12189MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   6  TITAN Xp            Off  | 00000000:89:00.0 Off |                  N/A |
| 23%   30C    P0    60W / 250W |      0MiB / 12189MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   7  TITAN Xp            Off  | 00000000:8A:00.0 Off |                  N/A |
| 23%   29C    P0    59W / 250W |      0MiB / 12189MiB |      3%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

说明 NVIDIA 的驱动和 CUDA 已经安装成功了

上面的显示表示本机有 8 个GPU, GPU 核心 GeForce GTX TITAN Xp, 每个 GPU 有 12G 显存, 因为没有在上面跑任何程序, 所以目前 GPU 显存利用了 0M, GPU 利用率 0%

测试 TensorFlow

好, 如果顺利的话, 到这里我们已经成功安装好了 TensorFlow, 那么让我简单测试一下安装是否成功

$ python
...
>>> import tensorflow as tf
>>> print(tf.__version__)
1.6.0

上面这段代码, 正常运行会打印出来 TensorFlow 的版本号, 这里是 1.6.0

我们再跑一个简单的计算, 看看 TensorFlow 是否运行正常。输入如下代码

$ python
...
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(1)
>>> b = tf.constant(2)
>>> c=sess.run(a + b)
>>> print("1+2= %d" % c)
1+2= 3
>>>

如果你的这段代码可以正常输出 Hello, TensorFlow!1+2= 3, 那么恭喜你, TensorFlow 安装成功!


原文

Tensorflow环境搭建

最后更新于 2018-03-30
使用 Hugo 构建
主题 StackJimmy 设计