一台机器上多设备

只需添加 GPU 卡到单个机器,您就可以获得主要的性能提升。 事实上,在很多情况下,这就足够了。 你根本不需要使用多台机器。 例如,通常在单台机器上使用 8 个 GPU,而不是在多台机器上使用 16 个 GPU(由于多机器设置中的网络通信带来的额外延迟),可以同样快地训练神经网络。

在本节中,我们将介绍如何设置您的环境,以便 TensorFlow 可以在一台机器上使用多个 GPU 卡。 然后,我们将看看如何在可用设备上进行分布操作,并且并行执行它们。

安装

为了在多个 GPU 卡上运行 TensorFlow,首先需要确保 GPU 卡具有 NVidia 计算能力(大于或等于3.0)。 这包括 Nvidia 的 Titan,Titan X,K20 和 K40(如果你拥有另一张卡,你可以在 https://developer.nvidia.com/cuda-gpus 查看它的兼容性)。

如果您不拥有任何 GPU 卡,则可以使用具有 GPU 功能的主机服务器,如 Amazon AWS。 在 ŽigaAvsec 的博客文章中,提供了在 Amazon AWS GPU 实例上使用 Python 3.5 设置 TensorFlow 0.9 的详细说明。将它更新到最新版本的 TensorFlow 应该不会太难。 Google 还发布了一项名为 Cloud Machine Learning 的云服务来运行 TensorFlow 图表。 2016 年 5 月,他们宣布他们的平台现在包括配备张量处理器(TPU)的服务器,专门用于机器学习的处理器,比许多 GPU 处理 ML 任务要快得多。 当然,另一种选择只是购买你自己的 GPU 卡。 Tim Dettmers 写了一篇很棒的博客文章来帮助你选择,他会定期更新它。

您必须下载并安装相应版本的 CUDA 和 cuDNN 库(如果您使用的是 TensorFlow 1.0.0,则为 CUDA 8.0 和 cuDNN 5.1),并设置一些环境变量,以便 TensorFlow 知道在哪里可以找到 CUDA 和 cuDNN。 详细的安装说明可能会相当迅速地更改,因此最好按照 TensorFlow 网站上的说明进行操作。

Nvidia 的 CUDA 允许开发者使用支持 CUDA 的 GPU 进行各种计算(不仅仅是图形加速)。 Nvidia 的 CUDA 深度神经网络库(cuDNN)是针对 DNN 的 GPU 加速原语库。 它提供了常用 DNN 计算的优化实现,例如激活层,归一化,前向和后向卷积以及池化(参见第 13 章)。 它是 Nvidia Deep Learning SDK 的一部分(请注意,它需要创建一个 Nvidia 开发者帐户才能下载它)。 TensorFlow 使用 CUDA 和 cuDNN 来控制 GPU 卡并加速计算(见图 12-2)。

1524830422813

您可以使用nvidia-smi命令来检查 CUDA 是否已正确安装。 它列出了可用的 GPU 卡以及每张卡上运行的进程:

1524830581469

最后,您必须安装支持 GPU 的 TensorFlow。 如果你使用virtualenv创建了一个独立的环境,你首先需要激活它:

  1. &# x24; cd &# x24;ML_PATH
  2. # Your ML working directory (e.g., HOME/ml)
  3. &# x24; source env/bin/activate

然后安装合适的支持 GPU 的 TensorFlow 版本:

  1. $ pip3 install --upgrade tensorflow-gpu

现在您可以打开一个 Python shell 并通过导入 TensorFlow 并创建一个会话来检查 TensorFlow 是否正确检测并使用 CUDA 和 cuDNN:

  1. >>> import tensorflow as tf
  2. I [...]/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally
  3. I [...]/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally
  4. I [...]/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally
  5. I [...]/dso_loader.cc:108] successfully opened CUDA library libcuda.so.1 locally
  6. I [...]/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally
  1. >>> sess = tf.Session()
  2. [...]
  3. I [...]/gpu_init.cc:102] Found device 0 with properties:
  4. name: GRID K520
  5. major: 3 minor: 0 memoryClockRate (GHz) 0.797
  6. pciBusID 0000:00:03.0
  7. Total memory: 4.00GiB
  8. Free memory: 3.95GiB
  9. I [...]/gpu_init.cc:126] DMA: 0
  10. I [...]/gpu_init.cc:136] 0: Y
  11. I [...]/gpu_device.cc:839] Creating TensorFlow device
  12. (/gpu:0) -> (device: 0, name: GRID K520, pci bus id: 0000:00:03.0)

看起来不错!TensorFlow 检测到 CUDA 和 cuDNN 库,并使用 CUDA 库来检测 GPU 卡(在这种情况下是 Nvidia Grid K520 卡)。