第 2 章 TensorFlow环境搭建

第 2 章 TensorFlow环境搭建

本章主要介绍如何在Ubuntu平台、Windows平台和Mac平台上安装TensorFlow以及加速GPU计算的CUDA和cuDNN。在本章最后,我们会运行一个简单的测试程序,验证TensorFlow是否安装成功。

2.1 安装环境介绍

目前,TensorFlow社区推荐的安装和运行环境是Ubuntu,它同时也支持Mac和Windows上的安装部署。

因为在深度学习的计算过程中,大量操作是向量和矩阵的计算,而GPU在向量和矩阵计算速度方面比CPU有一个数量级的提升,并且深度学习在GPU上的运算效率更高,所以推荐在配有GPU的机器上运行TensorFlow程序。

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,它是专门针对深度学习框架设计的一套GPU计算加速方案,其最新版本提供了对深度神经网络中向前向后的卷积池化以及RNN的性能优化。

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

2.1.3 查看机器的GPU信息

下面分别从Windows和Linux系统上查看机器的GPU信息。

  1. Windows

    在“运行”对话框里输入dxdiag,如图2-1所示,然后点击“确定”按钮,此时会打开“DirectX诊断工具”窗口。点击其中的“显示”标签页,可以查看机器的显卡信息,如图2-2所示。

    图2-1 输入dxdiag命令

    {%}

    图2-2 查看Windows的显卡信息

    可以看到,这个机器上的显卡是GeForce GTX 950。

  2. Linux

    在Linux终端输入命令:

    lspci  | grep -i vga

    显示结果示例如下:

    root@ubuntu:~$ lspci | grep -i vga
    02:00.0 VGA compatible controller: NVIDIA Corporation Device 1b02 (rev a1)
    03:00.0 VGA compatible controller: NVIDIA Corporation Device 1b02 (rev a1)
    82:00.0 VGA compatible controller: NVIDIA Corporation Device 1b02 (rev a1)
    83:00.0 VGA compatible controller: NVIDIA Corporation Device 1b02 (rev a1)

    可以看到,这个机器上有4块显卡。如果要查看其中每块显卡的更加详细的信息,比如查看02:00.0这块显卡的详细信息,可以输入命令:

    lspci -v -s 02:00.0

    此时显示的信息如下:

    root@ubuntu:~$ lspci -v -s 02:00.0
    02:00.0 VGA compatible controller: NVIDIA Corporation Device b02 (rev a1) (prog-if 00
        [VGA controller])
      Subsystem: NVIDIA Corporation Device 1df
      Physical Slot: 13
      Flags: bus master, fast devsel, latency 0, IRQ 26
      Memory at d3000000 (32-bit, non-prefetchable) [size=6M]
      Memory at 83fe0000000 (64-bit, prefetchable) [size=56M]
      Memory at 83ff0000000 (64-bit, prefetchable) [size=2M]
      I/O ports at 6000 [size=128]
      [virtual] Expansion ROM at d4000000 [disabled] [size=12K]
      Capabilities: <access denied>
      Kernel driver in use: nvidia
      Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia

    安装完NVIDIA驱动后,还可以通过nvidia-smi命令来查看显卡的实际使用情况,这点会在2.3节中说明。

2.2 安装TensorFlow

TensorFlow的Python语言API支持Python 2.7和Python 3.3以上的版本。GPU版本推荐使用CUDA Toolkit 8.0和cuDNN v6版本。CUDA和cuDNN的其他版本也支持,不过需要通过自己编译源代码的方式安装。

注意 通过pip等方式安装时,需要机器连接到互联网。

2.2.1 安装pip

pip是用来安装和管理Python包的管理工具,这里首先介绍它在各个平台上的安装方法。在安装pip之前,请先自行安装好Python。

  1. Ubuntu/Linux

    在Ubuntu/Linux平台上安装pip的命令如下:

    # Python 2.7上安装pip
    $ sudo apt-get install python-pip python-dev
    
    # Python 3.5上安装pip
    $ sudo apt-get install python3-pip
  2. Mac

    在Mac系统上安装pip的命令如下:

    $ sudo easy_install pip
    $ sudo easy_install --upgrade six
  3. Windows

    手动在Windows系统上安装pip的步骤如下。

    (1) 在Python官网上(详见https://pypi.python.org/pypi/pip#downloads)下载pip。

    (2) 解压文件,通过如下命令行安装pip:

    > python setup.py install

    (3) 在Windows环境变量的PATH变量的最后添加“\Python安装目录\Scripts”。

    在Windows系统上,除了手动安装配置之外,也可以在安装Python 3.5的过程中勾选pip,自动安装pip。首先,从Python的官网上下载Python 3.5的安装程序(详见https://www.python.org/downloads/release/python-352/),并且在其安装过程中勾选pip,将pip一起安装上。

    目前,TensorFlow在Windows上只支持64位的Python 3.5版本。

2.2.2 通过pip安装TensorFlow

TensorFlow已经把最新版本的安装程序上传到了PyPI,所以我们可以通过最简单的方式来安装TensorFlow (这要求pip版本在8.1版本或者更高)。下面我们分别看看如何在Linux、Mac和Windows系统上安装TensorFlow。

  1. Linux和Mac

    安装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
  2. Windows

    在Windows系统上安装TensorFlow与其他平台稍有不同。因为目前Windows上只支持Python 3.5版本,所以需要使用pip 3来安装。

    在Windows系统上安装CPU版本的TensorFlow的命令如下:

    C:\> pip3 install --upgrade tensorflow

    在Windows系统上安装GPU版本的TensorFlow的命令如下:

    C:\> pip3 install --upgrade tensorflow-gpu

    TensorFlow在Windows上依赖MSVCP140.DLL,这里需要提前安装Visual C++ 2015 redistributable (x64位),其下载地址为https://www.microsoft.com/en-us/download/details.aspx?id=53587,下载文件为vc_redist.x64.exe。

2.2.3 源码编译安装TensorFlow

有时候,我们需要单独自定义一下TensorFlow的安装,比如我们的CUDA是7.5版本的,这时可能需要自己编译源码进行安装。这里只介绍在Ubuntu系统上如何通过源码编译安装。

  1. 从git上下载源码

    首先,从git上下载源码:

    git clone https://github.com/tensorflow/tensorflow
  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
  3. 编译TensorFlow

    最后,编译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
    # 到这里就已经编译好whl文件了,然后可以通过pip安装
    # 安装编译好的TensorFlow
    sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.3*.whl

    注意,在编译安装的过程中可能出现一些其他依赖需要手动安装,相关命令如下:

    # 根据运行出错的提示可能需要安装funcsigs和pbr
    # 通过如下命令安装funcsigs和pbr
    sudo pip install funcsigs
    sudo pip install pbr

2.3 NVIDIA驱动安装

如果你的显卡是NVIDIA的显卡,需要去其官网(详见http://www.nvidia.cn/)下载与显卡对应的驱动程序并且安装。

在Linux系统下,下载驱动完成后,给文件添加可执行权限,然后使用sudo命令直接运行安装即可:

$ sudo chmod +x NVIDIA-Linux-x86_64-xxx.xx.run
$ ./NVIDIA-Linux-x86_64-xxx.xx.run

驱动安装完成后,我们可以通过如下命令来查看显卡的使用情况:

nvidia-smi

运行结果如图2-3所示。

图2-3 nvidia-smi命令的运行结果

这说明NVIDIA的驱动和CUDA已经安装成功了。图2-3表示本机有4个GPU,GPU核心为TITAN X (Pascal),每个GPU有12GB显存。因为没有在上面跑任何程序,所以目前GPU显存利用了0 MB,GPU利用率为0%。

此外,在Windows上安装NVIDIA驱动时,有图形界面,此时从官网上下载好安装程序并配置好路径后,直接傻瓜式安装即可。

2.4 安装CUDA和cuDNN

如果我们要使用TensorFlow的GPU版本,并且机器上安装的GPU又是NVIDIA厂商出的显卡,此时还需要安装CUDA和cuDNN库。

2.4.1 Linux下安装CUDA 

根据自己的系统,选择不同版本的CUDA下载安装(下载地址详见https://developer.nvidia.com/cuda-downloads),这里推荐安装最新的CUDA 8。

安装过程会提示一些选项,需要注意的是,我们已经在2.3节中安装了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

接下来,将CUDA的安装路径添加到系统环境变量中,此时只需在/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.4.2 Linux下安装cuDNN

根据自己的系统环境和CUDA版本,选择下载cuDNN(推荐安装CUDA 8.0和cuDNN v6.0),其下载地址为https://developer.nvidia.com/rdp/cudnn-download

这里以cuDNN v6.0和CUDA 8.0为例,说明一下具体的安装过程:

# 以cuDNN的v6.0版本和CUDA 8.0为例
sudo tar -xzvf cudnn-8.0-linux-x64-v6.0.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

2.4.3 Windows和Mac系统下安装CUDA

在Windows和Mac系统上安装CUDA时,只需要直接从官网(详见https://developer.nvidia.com/cuda-downloads)下载对应平台的安装程序即可。

在下载界面中,可以选择不同的平台,如图2-4所示,这里可以选择Windows、Linux或者Mac OSX。

图2-4 选择目标平台

2.4.4 Windows和Mac系统下安装cuDNN

在Windows和Mac系统上安装cuDNN时,只需要直接从官网下载对应平台的安装程序即可,下载地址详见https://developer.nvidia.com/rdp/cudnn-download

在cuDNN下载界面中,也可以选择不同的平台,如图2-5所示,这里可以选择Windows、Linux或者Mac OSX。

图2-5 Windows和Mac OSX平台下的cuDNN安装程序下载

2.5 安装测试

好,如果顺利的话,这时我们已经成功安装好了TensorFlow,现在简单测试一下:

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

上面这段代码正常运行的话,会打印出TensorFlow的版本号,这里是1.3.0(如果TensorFlow出了更新的版本,将显示其他更高的版本号)。

常见问题

如果在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了。

目录