第2章 Tensorflow环境搭建
本章主要介绍在几个主要的平台上,如何安装Tensorflow,以及简单的运行测试。
2.1 安装环境
目前TensorFlow社区推荐的环境是Ubuntu, 但是TensorFlow同时支持Mac,Windows上的安装部署。
因为深度学习计算过程,大量的操作是向量和矩阵的计算,而GPU在向量和矩阵计算方面比CPU有一个数量级的速度提升,所以深度学习在GPU上运算效率更高。
2.1.1 CUDA简介
显卡厂商NVIDIA推出的运算平台CUDA(Compute Unified Device Architecture),是一种通用的并行计算架构,该架构使GPU能够解决复杂的计算问题,它包含了CUDA指令集以及GPU内部的并行计算引擎。提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。程序开发人员通过C语言,利用CUDA的指令接口,就可以编写CUDA架构的程序。
2.1.2 CuDNN简介
CuDNN的全称是CUDA Deep Neural Network library,CuDNN是专门针对深度学习框架设计的一套GPU计算加速方案,最新版本的CuDNN提供了对深度神经网络中的向前向后的卷积,池化,以及RNN的性能优化。目前大部分深度学习框架都支持CuDNN。
目前包括TensorFlow在内的大部分深度学习框架,都支持CUDA。所以,为了让我们的深度神经网络的程序在TensorFlow上跑的更加好,推荐配置至少一块支持CUDA和CuDNN的NVIDIA的显卡。
2.2 TensorFlow的安装
Tensorflow的Python语言API支持Python2.7和Python3.3以上的版本。GUP版本推荐使用Cuda Toolkit 8.0和CuDNN v5.版本,Cuda和CuDNN的其他版本也支持,不过需要自己编译源代码的方式安装。
2.2.1 通过pip安装TensorFlow
pip是用来安装和管理Python包的管理工具。TensorFlow可以很方便的通过Pip来安装。
首先介绍pip在各个平台的安装方法。
2.2.1.1 安装Pip
在安装Pip之前请先自行安装好Python。
在Ubuntu/Linux系统上安装pip
#python2.7上安装pip
$ sudo apt-get install python-pip python-dev
#python3.5上安装pip
$ sudo apt-get install python3-pip
在Mac系统上安装pip
$ sudo easy_install pip
$ sudo easy_install --upgrade six
在Windows系统上安装Pip
# 去Python官网下载pip
https://pypi.python.org/pypi/pip#downloads
#解压文件,通过命令行安装pip
> python setup.py install
# 设置环境变量
在Windows的环境变量的PATH变量的最后添加"\Python安装目录\Scripts"
2.2.1.2 如何通过pip安装
Tensorflow已经把最新版本的安装程序上传到了Pypi,所以我们可以通过最简单的方式来安装TensorFlow。 (要求pip版本在8.1版本或者更高)
安装CPU版本的TensorFlow
#Python2.7
sudo pip install tensorflow
#Python3.5
sudo pip3 install tensorflow
安装支持GUP版本的TensorFlow
#Python2.7
sudo pip install tensorflow-gpu
#Python3.5
sudo pip3 install tensorflow-gpu
注意:目前在Windows上只支持64位的Python3.5版本。TensorFlow在Windows上依赖MSVCP140.DLL,需要提前安装Visual C++ 2015 redistributable (x64 version),并且将MSVCP140.DLL添加到环境变量PATH里。
在Windows系统上安装CPU版本(0.12版本)
C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-0.12.0-cp35-cp35m-win_amd64.whl
在Windows系统上安装GPU版本(0.12版本)
C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.0-cp35-cp35m-win_amd64.whl
2.2.2 源码编译安装TensorFlow
有时候我们需要单独自定义一下TensorFlow的安装,比如我们的cuda是7.5版本的,这个时候我们可能需要自己编译源码进行安装。(这里只介绍在Ubuntu系统上)
2.2.2.1 从git上下载源码:
git clone https://github.com/tensorflow/tensorflow
2.2.2.2 安装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
2.2.2.3 编译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
2.3 Cuda和CuDNN安装
如果我们要使用TensorFlow的GPU版本的话,我们还需要安装Cuda和CuDNN库。
2.3.1 NVIDIA驱动安装
驱动下载地址
http://www.nvidia.com/download/driverResults.aspx/106780/en-us
驱动安装
$ sudo chmod +x NVIDIA-Linux-x86_64-367.44.run
$ ./NVIDIA-Linux-x86_64-367.44.run
2.3.2 Cuda安装
根据自己的系统选择不同版本的Cuda下载安装。
下载地址
https://developer.nvidia.com/cuda-downloads
安装过程会提示一些选项,需要注意的是,我们在2.3.1已经安装了NVIDIA的驱动,所以在提示是否需要安装NVIDIA Accelerated Graphics Driver的时候选择n
选择参考如下:
Do you accept the previously read EULA?
accept/decline/quit: accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 361.77?
(y)es/(n)o/(q)uit: n
Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: y
Enter Toolkit Location
[ default is /usr/local/cuda-8.0 ]: [回车]
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y
Install the CUDA 8.0 Samples?
(y)es/(n)o/(q)uit: n
安装成功后,提示我们需要把路径添加到环境变量里
Please make sure that
- PATH includes /usr/local/cuda-8.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root
在/etc/profile或者~/.bashrc中添加如下内容:
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64/:$LD_LIBRARY_PATH
#然后执行 source /etc/profile 或者 source ~/.bashrc
2.3.3 CuDNN安装
根据自己的系统环境和Cuda的版本,选择下载CuDNN。
下载地址
https://developer.nvidia.com/rdp/cudnn-download
安装过程
#以CuDNN的v5.1版本,Cuda 8.0为例
sudo tar -xzvf cudnn-8.0-linux-x64-v5.1.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
设置环境变量
#编辑/etc/profile或者~/.bashrc文件,在末尾添加如下内容(根据自己的安装路径和版本请自行修改对应内容)
export LD_LIBRARY_PATH=/usr/local/cudnn/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$CUDA_HOME/lib"
export PATH="$CUDA_HOME/bin:$PATH"
#然后执行 source /etc/profile 或者 source ~/.bashrc
安装完成之后,让我们来测试一下CUDA,运行:
nvidia-smi
结果如下:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.48 Driver Version: 367.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX TIT... Off | 0000:04:00.0 Off | N/A |
| 27% 67C P0 77W / 250W | 0MiB / 12205MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX TIT... Off | 0000:83:00.0 Off | N/A |
| 29% 69C P0 78W / 250W | 0MiB / 12206MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 GeForce GTX TIT... Off | 0000:84:00.0 Off | N/A |
| 0% 60C P0 58W / 250W | 0MiB / 12206MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
说明NVIDIA的驱动和cuda已经安装成功了。
上面的显示表示本机有3个GPU,GPU核心GeForce GTX TITAN,每个GPU有12G显存,因为没有在上面跑任何程序,所以目前GPU显存利用了0M,GPU利用率0%。
2.4 安装测试
好,如果顺利的话,到这里我们已经成功安装好了TensorFlow,那么让我简单测试一下安装是否成功。
$ python
...
>>> import tensorflow as tf
>>> print(tf.__version__)
0.12.0-rc1
上面这段代码,正常运行会打印出来TensorFlow的版本号,这里是“0.12.0-rc1”
常见问题:
如果在import tensorflow as tf之后,打印出来cuda的so或者cudnn的so没有找到, 一般是因为cuda或者cudnn的路径没有添加到环境变量里。
我们再跑一个简单的计算,看看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成功了。