在 Linux 平台安装 NVIDIA GPU 计算的 TensorFlow

  本文整理了在 Linux 平台上安装和配置 TensorFlow 并使用 NVIDIA GPU 进行计算的方法。使用环境为 Linux Mint 18.3 + NVIDIA GeForce GTX 970。

1. 确认要求

1.1. 确认显卡 Compute Capability

  首先需要有一块 CUDA Compute Capability 在 3.0(从源码编译)或 3.5(使用 Binary)之上的 NVIDIA 显卡。显卡的 CUDA Compute Capability 可以在这里查询,GeForce GTX 970 在 CUDA-Enabled GeForce Products 条目下,其 Compute Capability 为 5.2,满足要求。

1.2. 确认软件版本

  要让 TensorFlow 利用 GPU 进行运算,需要安装 CUDAcuDNN。前往 TensorFlow 官方文档查看其支持的 CUDA 和 cuDNN 版本,目前 TensorFlow 的要求为:

  • CUDA® Toolkit 9.0
  • cuDNN v7.0

  注意 TensorFlow 可能不支持最新版本的 CUDA 和 cuDNN。

2. 安装显卡驱动

  CUDA 对 NVIDIA 显卡驱动的版本有要求,如目前最新的 CUDA 9.1 就要求使用 390 以上版本的驱动。系统自带的闭源驱动版本比较旧,建议手动安装最新版本。

  首先添加 Repository:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

  目前最新驱动为 390,安装 nvidia-390 和管理工具 nvidia-settings

sudo apt install nvidia-390 nvidia-settings

  重启后,使用 nvidia-smi 可以看到显卡相关信息,如:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.25                 Driver Version: 390.25                    |
|-------------------------------+----------------------+----------------------+
| 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 970     Off  | 00000000:01:00.0  On |                  N/A |
| 33%   42C    P8    17W / 210W |    210MiB /  4041MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      7578      G   /usr/lib/xorg/Xorg                            89MiB |
|    0      7989      G   cinnamon                                      35MiB |
|    0      8262      G   ...-token=983884134DD5BD52433DF8F51D5427C8    80MiB |
+-----------------------------------------------------------------------------+

3. 安装 CUDA

  接下来安装 CUDA 9.0,在CUDA Toolkit 9.0 Downloads可以根据系统情况选择安装方式,这里选择如下(Linux Mint 18.3 基于 Ubuntu 16.04):

  • Operating System:Linux
  • Architecture:x86_64
  • Distribution:Ubuntu
  • Version:16.04
  • Installer Type:run file (local)

  选择完毕后会看到下载链接,下载得到一个 cuda_9.0.176_384.81_linux.run 文件,安装该文件:

sudo sh cuda_9.0.176_384.81_linux.run

  开头的 License 可以按 Ctrl+C 跳过,后续选择如下:

  • Do you accept the previously read EULA? -> accpet
  • You are attempting to install on an unsupported configuration. Do you wish to continue? -> y
  • Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81? -> n (CUDA 自带驱动版本比较低,在第 1 步已经安装过最新驱动,这里不再安装)
  • Install the CUDA 9.0 Toolkit? -> y
  • Enter Toolkit Location -> 输入安装目录,这里保持默认路径 /usr/local/cuda-9.0 不变
  • Do you want to install a symbolic link at /usr/local/cuda? -> y (会在 /usr/local 下创建一个名为 cuda 的符号链接,指向 /usr/local/cuda-9.0)
  • Install the CUDA 9.0 Samples -> 根据需要选择,如果输入 y,则后续还需指定 Sample 的安装目录

  安装完成后,需要设置 PATH 和 LD_LIBRARY 环境变量,编辑 .bashrc:

sudo nano ~/.bashrc

  在其中加入:

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

  另外 TensorFlow 的文档中还要求安装 cuda-command-line-tools,它已经包含在了 CUDA 里,只需加入 LD_LIBRARY_PATH 环境变量即可。再在 .bashrc 中加入:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/extras/CUPTI/lib64

  上面 /usr/local/cuda-9.0 为 CUDA 安装目录,如果没有使用默认路径,注意更换为实际安装路径。

4. 安装 cuDNN

  cuDNN 可以在这里下载,需要注册并同意 cuDNN Software License Agreement。选择 Download cuDNN v7.0.5 (Dec 5, 2017), for CUDA 9.0 下的 cuDNN v7.0.5 Library for Linux,下载得到一个压缩包 cudnn-9.0-linux-x64-v7.tgz。解压后,进入解压目录,目录中有一个 cuda 文件夹,执行以下命令:

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*

  上面的 /usr/local/cuda 为安装 CUDA 时建立的符号链接,如果没有建立,则需替换为 CUDA 的安装路径。

5. 安装 TensowFlow

  这里在 Anaconda Environment 中安装 TensowFlow。首先在这里下载并安装 Anaconda,选择 Python 3.6 版本。

  然后创建名为 tensorflow 的 Environment,Python 版本为 3.6,并安装 nb_conda,nb_conda 用于在 Jupyter Notebook 中切换 Environment。

conda create -n tensorflow python=3.6 anaconda nb_conda

  接着启动名为 tensorflow 的 Environment:

source activate tensorflow

  安装 TensorFlow:

pip install --ignore-installed --upgrade tfBinaryURL

  注意将 tfBinaryURL 替换为 TensorFlow 包的 URL,最新的包可以在这里找到,选择 Python 3.6 下的 GPU support 版本。

6. 验证安装和常见问题

  安装完成后,保持在 tensorflow Environment 中,使用这里的方法验证安装结果。

  如果在 import tensorflow 时出现找不到 libcuda.so.1 的 ImportError,则可以尝试安装 libcuda1-390,这里 390 对应显卡驱动版本:

sudo apt-get install libcuda1-390

  此问题发生在 Mint 18.3 系统,而在 Ubuntu 16.04 下安装就没有问题。