在 Linux 平台安装 NVIDIA GPU 计算的 TensorFlow
本文整理了在 Linux 平台上安装和配置 TensorFlow 并使用 NVIDIA GPU 进行计算的方法。使用环境为 Linux Mint 18.3 + NVIDIA GeForce GTX 970。
Contents
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 进行运算,需要安装 CUDA 和 cuDNN。前往 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 下安装就没有问题。