名词介绍
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 安装成功!
原文