深度学习实践中的 GPU 使用

GPU 是 NVIDIA 在发布 GeForce 256 时提出的概念。主要的公司包括NVIDIA(英伟达)、AMD、Qualcomm(高通)和 Intel(英特尔)。今天这篇文章主要讨论在深度学习使用中如何使用 GPU。

CUDA

CUDA 安装

# 查看 cuda 版本 
cat /usr/local/cuda/version.txt
# 查看 cudnn 版本 
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
# 查看 GPU 使用情况
nvidia-smi
# 一直刷新 GPU 使用情况
nvidia-smi -l
# 定时查看 GPU 使用情况
watch -n 0.1 nvidia-smi
TensorFlow GPU

在了解 TensorFlow 下 GPU 的使用之前,我们先来看一下tf.ConfigPrototf.ConfigProto一般用在创建 Session 时,对 Session 进行参数配置,具体使用如下:

with tf.Session(config=tf.ConfigProto())

以下为tf.ConfigProto几个重要参数:

# allow_soft_placement 表示如果指定设备不存在,是否允许 TF 自动分配设备
# log_device_placement 表示是否打印设备分配日志
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
# 让 TF 在运行过程中动态申请显存,需要多少就申请多少
config.gpu_options.allow_growth = True
# TF 会默认占满内存,这里保证只占用 40% 显存
config.gpu_options.per_process_gpu_memory_fraction = 0.4

控制使用哪块 GPU 的方法如下:

# 运行时设置
~/ CUDA_VISIBLE_DEVICES=0  python your.py # 使用 GPU 0
~/ CUDA_VISIBLE_DEVICES=0,1 python your.py # 使用 GPU 0, 1

# 程序中设置(要在 import tensorflow 之前)
os.environ['CUDA_VISIBLE_DEVICES'] = '0' #使用 GPU 0
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1' # 使用 GPU 0,1

如果要在特定的设备执行操作,可以这样做:

with tf.device('/cpu:0'):

具体使用的设备标识如下:

  • "/cpu:0": 使用 CPU
  • "/device:GPU:0": 使用第 0 块 GPU
  • "/device:GPU:1": 使用第 1 块 GPU

最后附上两个多 GPU 训练的例子:

  1. 简单的例子:https://nbviewer.jupyter.org/github/donnemartin/data-science-ipython-notebooks/blob/master/deep-learning/tensor-flow-examples/notebooks/4_multi_gpu/multigpu_basics.ipynb
  2. 复杂的例子:https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_multi_gpu_train.py
Pytorch GPU

在 Pytorch 中,GPU 是按需分配的。使用多 GPU 训练,只要用nn.DataParallel包装模型,并提高 batch size 就可以了。具体使用可以参考官方文档 1官方文档 2

Search

    Table of Contents