使用 GPU 进行深度学习


随着人工智能技术的进步和越来越多的组织实施机器学习操作 (MLOps),公司正在寻找加快流程的方法。对于使用深度学习 (DL) 方法的组织来说尤其如此,因为运行深度学习方法非常耗时。可以使用本地或云端的图形处理单元 (GPU) 来加速此过程。

GPU 是专门为执行面向图形的任务而设计的微处理器。这些单元利用任务的并行处理,并可进行优化以提高人工智能和深度学习过程的性能。

GPU 是与深度神经网络结合使用以加速数据管道的强大工具。将 GPU 集成到数据处理中主要有两个原因。首先,与价格相同的中央处理器 (CPU) 相比,GPU 上的深度神经网络(DNN) 推理速度最高可提高 10 倍。第二个原因是,它允许 CPU 同时执行更多工作,并通过减轻 CPU 的部分工作负载来减少整体网络负载。

GPU 是与深度神经网络结合加速数据管道的强大工具。现场和云端解决方案在 DNN 解决方案中都具有各自独特的优势。

利用 GPU 的典型深度学习流程包括:

  • 数据预处理(由 CPU 处理)
  • DNN 训练或推理(由 GPU 处理)
  • 数据后处理(同样由 CPU 处理)
    这种方法最常见的瓶颈是 CPU RAM 和 GPU DRAM 之间的数据传输。因此,在构建数据科学管道架构时,有两个主要重点。第一是通过将多个样本(图像)聚合成一个批次来减少数据传输事务的数量。第二是通过在传输之前过滤数据来减少特定样本的大小。

深度学习模型的训练和实施需要深度神经网络 (DNN) 和包含数十万个数据点的数据集。这些 DNN 需要大量资源,包括内存、存储和处理能力。虽然中央处理器 (CPU) 可以提供这种能力,但图形处理单元 (GPU) 可以大大加快这一过程。

使用 GPU 进行深度学习的主要好处

专用 GPU 为实现 DNN 的系统带来三大显著优势:

  • 核心数量— GPU 通常具有大量核心,可以集群在一起,并且可以与 CPU 结合使用。这使您能够显著提高系统的处理能力。
  • 更高的内存带宽——GPU 可以提供比 CPU 更高的内存带宽(高达 750GB/s vs 50GB/s)。这使它们能够更轻松地传输快速深度学习所需的大量数据。
  • 灵活性— GPU 的并行能力使您可以将 GPU 组合成集群,并在这些集群之间分配任务。或者,您可以单独使用 GPU,并将集群分配给各个算法的训练。

何时不使用 GPU 进行深度学习任务

与 CPU 相比,GPU 计算速度更快,并且 GPU 是许多 AI 应用的必备组件。但在某些情况下,这种处理能力有点过头了,系统架构师应该考虑使用 CPU 来最大限度地减少预算压力。

这里我们还需要说几句关于 GPU 计算的成本。如前所述,GPU 的计算速度明显快于 CPU。不过,传输和处理数据的总时间成本可能超过您通过切换到 GPU 获得的速度。

因此,例如,在开发初期,即开发概念验证 (POC) 或最小可行产品 (MVP) 时,可以使用 CPU 进行开发、测试和登台服务器等初步活动。如果用户可以接受较长的响应时间,则生产服务器可以使用 CPU 进行 DNN 训练和推理,但理想情况下仅用于总持续时间较短的任务。

用于深度学习的本地 GPU 选项

当使用 GPU 进行本地实施时,有多个供应商可供选择。最受欢迎的两个选择是 NVIDIA 和 AMD。

英伟达

NVIDIA 之所以受欢迎,是因为它提供了第一方库,即 CUDA 工具包。这些库可以轻松建立深度学习流程,并构成使用 NVIDIA 产品的强大机器学习社区的基础。许多 DL 库和框架为 NVIDIA 硬件提供的广泛支持证明了这一点。

除了支持其 GPU 硬件之外,NVIDIA 还提供支持流行 DL 框架(包括 PyTorch)的库。Apex 库特别有用,其中包括几个快速融合优化器,例如 FusedAdam。

集成 NVIDIA GPU 的系统的缺点是,该公司最近对可使用 CUDA 的配置进行了限制。这些限制要求库只能与 Tesla 系列 GPU 一起使用,不能与较便宜的 RTX 或 GTX 硬件系列一起使用。这对训练 DL 模型的组织产生了严重的预算影响;考虑到尽管 Tesla GPU 的性能并不比其他选择高很多,但其成本却高达其他选择的 10 倍,这也是一个问题。

AMD

AMD 还提供了一套第一方库,称为 ROCm。这些库由 TensorFlow 和 PyTorch 以及所有重要的网络架构支持。然而,对新网络开发的支持有限,社区支持也是如此。

使用 AMD GPU 的另一个问题是,AMD 在其 DL 软件上的投资不如 NVIDIA 多。因此,除了价格较低之外,AMD GPU 提供的功能与 NVIDIA 相比有限。

使用 GPU 进行云计算
在训练 DL 模型的组织中,使用云资源越来越受欢迎。这些资源可以结合优化的机器学习服务提供按使用付费的 GPU 访问权限。在云计算资源的主要提供商(Microsoft Azure、AWS 和 Google Cloud)中,这三家都提供 GPU 资源以及一系列配置选项:

微软 Azure

Microsoft Azure 为 GPU 访问提供了 多种实例选项 。这些实例已针对高计算任务进行了优化,包括可视化、模拟和深度学习。

在 Azure 中,有三个主要实例系列可供选择:

  1. NC 系列:实例针对网络和计算密集型工作负载进行了优化。例如,基于 CUDA 和 OpenCL 的模拟和应用程序将使用 NC 系列实例。这些实例可访问 NVIDIA Tesla V100、Intel Haswell 或 Intel Broadwell GPU。
  2. ND 系列:实例针对深度学习的推理和训练场景进行了优化。这些实例可访问 NVIDIA Tesla P40、Intel Broadwell 或 Intel Skylake GPU。
  3. NV 系列:实例针对虚拟桌面基础架构、流式传输、编码和可视化进行了优化。NV 系列实例专门支持 DirectX 和 OpenGL。实例可访问 NVIDIA Tesla M60 或 AMD Radeon Instinct MI25 GPU。

亚马逊网络服务(AWS)

在 AWS 中,根据所需的处理能力和内存级别,有四种不同的选项,每种选项都有不同的实例大小。选项包括 EC2 P3、P2、G4 和 G3 实例。这些选项使您可以在 NVIDIA Tesla V100、K80、T4 Tensor 或 M60 GPU 之间进行选择。您可以根据实例扩展最多 16 个 GPU。

为了增强这些实例,AWS 还提供了 Amazon Elastic Graphics,这是一项服务,可让您将低成本的 GPU 选项附加到您的 EC2 模型。此服务允许您根据需要将 GPU 与任何兼容实例一起使用,从而为您的工作负载提供更大的灵活性。Elastic Graphics 提供对 OpenGL 4.3 的支持,并可提供高达 8GB 的​​图形专用内存。

谷歌云

与专用 GPU 实例不同,Google Cloud 允许您将 GPU 附加到现有实例。例如,如果您使用Google Kubernetes Engine,则可以创建可访问一系列 GPU 的节点池。这些 GPU 包括 NVIDIA Tesla K80、P100、P4、V100 和 T4 GPU。

Google Cloud 还提供 TensorFlow 处理单元 ( TPU )。这个专用单元包括多个用于执行快速矩阵乘法的 GPU。它提供的性能与启用 Tensor Cores 的 Tesla V100 实例相似。使用 TPU 的主要好处是它可以通过并行化节省成本。

每个 TPU 相当于四个 GPU,可实现相对较大的部署。此外,这些 TPU 现在至少部分受 PyTorch 支持。

2021 年最适合深度学习任务的 GPU 是什么?

在选择基础设施的时候,需要在本地方法和云方法之间做出决定。

云资源可以大大降低构建深度学习基础设施的财务门槛,这些服务还可以提供可扩展性和提供商支持。然而,这些基础设施最适合短期项目,因为持续使用资源可能会导致成本膨胀。

相比之下,本地基础设施前期成本更高,但灵活性更高。硬件可以在组件的有效使用寿命内进行尽可能多的实验,且成本稳定。选择使用本地配置的开发人员还可以完全控制其配置、安全性和数据。

对于刚刚起步的组织来说,云基础设施通常更有意义。这些部署使您能够以最少的前期投资开始运营,并可以让您有时间完善流程和要求。但是,一旦业务规模变得足够大,切换到本地部署可能是更明智的选择。

使用 GPU 进行 AI 训练

由于 GPU 是专用处理器,其指令集专注于快速图形处理,因此深度学习应用程序的开发人员面临着使用 GPU 执行的任务与其预期用途之间的转换问题。因此,Tensorflow、Pytorch 或 ONNX 等传统深度学习框架无法直接访问 GPU 核心来解决深度学习问题。相反,这些任务需要通过专门为此任务设计的多层独特软件进行转换,例如 CUDA 和 GPU 驱动程序。

虽然通用模式涵盖了使用 GPU 核心所需的最低软件层,但一些使用上述云计算服务的实现可能会在 AI 应用程序和 CUDA 层之间引入额外的组件。

但在实际的AI软件开发中,经常会出现新版本的AI应用程序、AI框架、CUDA和GPU驱动程序。这些新版本可能会在其余的开发环境和更新的组件之间引入难以解决的兼容性问题。

例如,安全漏洞可能需要使用与计算服务上当前版本的 CUDA 不兼容的新版本的 AI 框架。这又引出了一个问题:是否应该更新 CUDA 以修复新 AI 框架引入的兼容性冲突?其他使用不同 AI 框架但相同底层转换层的现有项目依赖于以前版本的 CUDA 进行应用,因此强迫多个项目将其开发系统堆栈与任何单个项目的需求保持一致是一种站不住脚的解决方案。

简而言之,在本例中,在系统上同时安装两个不同版本的 CUDA 是不可行的。解决这一僵局的方法是系统设计中的模块化。通过利用一种称为 dockerization 的技术,系统可以维护系统堆栈较高层的多个实例,并使用其中适合应用程序当前需求的实例。

该系统可以使用 Docker 和 Nvidia-docker 包装 AI 应用程序,将所有必要的依赖项(如 AI Framework 和适当版本的 CUDA)捆绑到容器中。这种方法允许系统在同一台计算服务机器上维护不同版本的工具(如 Tensorflow、Pytorch 和 CUDA)。

结论

为了快速发展,机器学习工作负载需要很高的处理能力。与 CPU 相比,GPU 可以提高处理能力,同时提供更高的内存带宽和并行能力。

AI 应用程序的开发人员可以在本地或云端使用 GPU。流行的本地 GPU 包括 NVIDIA 和 AMD。许多云供应商都可以提供基于云的 GPU,其中最突出的三个供应商是 Microsoft Azure、AWS 和 Google Cloud。在本地和云 GPU 资源之间进行选择时,应同时考虑预算和技能。

本地资源通常需要较高的前期成本,但从长远来看,回报会比较稳定。但是,假设某个组织没有运营本地资源所需的技能或预算。在这种情况下,他们应该考虑云产品,因为云产品更容易扩展,而且通常带有托管选项。