在多个GPU上进行分布式训练
为什么以及如何使用多个GPU进行分布式训练
大规模训练AI模型的数据科学家或机器学习爱好者将不可避免地达到上限。当数据集大小增加时,处理时间可能会从几分钟增加到几小时到几天到几周!数据科学家转向包含多个GPU以及机器学习模型的分布式训练,以在很短的时间内加速和开发完整的AI模型。
我们将讨论GPU与CPU对机器学习的用处,为什么使用多个GPU进行分布式训练最适合大型数据集,以及如何开始使用最佳实践训练机器学习模型。
为什么GPU适合训练神经网络?
训练阶段是构建神经网络或机器学习模型中资源最密集的部分。神经网络在训练阶段需要数据输入。该模型基于数据集之间所做的更改,基于层中处理的数据输出相关预测。第一轮输入数据本质上形成了机器学习模型理解的基线;随后的数据集计算权重和参数以训练机器预测精度。
对于简单或少量的数据集,等待几分钟是可行的。然而,随着输入数据量的增加,训练时间可能会达到数小时、数天甚至更长。
CPU难以处理大量数据,例如对数十万个浮点数的重复计算。深度神经网络由矩阵乘法和向量加法等操作组成。
提高此过程速度的一种方法是使用多个GPU切换分布式训练。基于分配给训练阶段的张量核心的数量,用于分布式训练的GPU可以比CPU更快地移动过程。
GPU或图形处理单元最初设计用于处理重复计算,为视频游戏的图形推断和定位数十万个三角形。再加上大内存带宽和执行数百万次计算的先天能力,GPU非常适合通过数百个epoch(或模型迭代)进行神经网络训练所需的快速数据流,非常适合深度学习训练。
什么是机器学习中的分布式训练?
分布式训练承担训练阶段的工作量并将其分布在多个处理器上。这些微型处理器协同工作以加快训练过程,而不会降低机器学习模型的质量。由于数据被并行划分和分析,每个微型处理器在不同批次的训练数据上训练机器学习模型的副本。
结果在处理器之间进行通信(当批次完全完成时或每个处理器完成其批次时)。下一次迭代或epoch再次从一个稍微新训练的模型开始,直到它达到预期的结果。
在微型处理器(在我们的例子中是GPU)之间分配训练有两种最常见的方法:数据并行和模型并行。
数据并行
数据并行是数据的划分并将其分配给每个GPU以使用相同的AI模型进行评估。一旦所有GPU完成前向传递,它们就会输出梯度或模型的学习参数。由于有多个梯度,只有1个AI模型需要训练,梯度被编译、平均、缩减为单个值,最终更新模型参数,用于下一个epoch的训练。这可以同步或异步完成。
同步数据并行是我们的GPU组必须等到所有其他GPU完成梯度计算,然后再平均并减少梯度以更新模型参数。一旦更新了参数,模型就可以继续下一个epoch。
异步数据并行是GPU独立训练而无需执行同步梯度计算的地方。相反,梯度在完成时会传回参数服务器。每个GPU不等待另一个GPU完成计算,也不计算梯度平均,因此是异步的。异步数据并行需要一个单独的参数服务器用于模型的学习部分,因此成本更高一些。
在每一步之后计算梯度并对训练数据进行平均是最耗费计算的。由于它们是重复计算,因此GPU一直是加速此步骤以达到更快结果的选择。数据并行性相当简单且经济高效,但是有时模型太大而无法容纳在单个微型处理器上。
模型并行
与拆分数据相比,模型并行性在工作GPU之间拆分模型(或训练模型的工作负载)。分割模型将特定任务分配给单个工作人员或多个工作人员以优化GPU使用。模型并行可以被认为是一条人工智能装配线,它创建了一个多层网络,可以处理数据并行不可行的大型数据集。模型并行性需要专家来确定如何对模型进行分区,但会带来更好的使用和效率。
多GPU分布式训练更快吗?
购买多个GPU可能是一项昂贵的投资,但比其他选择要快得多。CPU也很昂贵,不能像GPU那样扩展。跨多个层和多个GPU训练机器学习模型以进行分布式训练可提高训练阶段的生产力和效率。
当然,这意味着减少训练模型所花费的时间,但它也使您能够更快地产生(和重现)结果并在任何事情失控之前解决问题。在为您的努力产生结果方面,它是训练数周与数小时或数分钟训练之间的差异(取决于使用的GPU数量)。
您需要解决的下一个问题是如何开始在机器学习模型中使用多个GPU进行分布式训练。
如何使用多个GPU进行训练?
如果您想使用多个GPU处理分布式训练,首先要确定您是否需要使用数据并行性或模型并行性。该决定将基于数据集的大小和范围。
您能否让每个GPU使用数据集运行整个模型?或者在具有更大数据集的多个GPU上运行模型的不同部分是否会更省时?通常,数据并行是分布式学习的标准选项。从同步数据并行开始,然后深入研究模型并行或异步数据并行,其中需要单独的专用参数服务器。
我们可以开始在您的分布式训练过程中将您的GPU链接在一起。
根据您的并行决策分解您的数据。例如,您可以使用当前数据批次(全局批次)并将其划分为八个子批次(本地批次)。如果全局批次有512个样本并且您有8个GPU,则8个本地批次中的每一个都将包含64个样本。
八个GPU或迷你处理器中的每一个都独立运行本地批处理:前向传递、后向传递、输出权重梯度等。
局部梯度的权重修改在所有8个微型处理器中有效地混合,因此一切都保持同步,并且模型已经过适当的训练(当使用同步数据并行时)。
重要的是要记住,一个用于分布式训练的GPU需要在训练阶段托管收集的数据和其他GPU的结果。如果您不密切注意,您可能会遇到一个GPU内存不足的问题。
除此之外,在考虑使用多个GPU进行分布式训练时,收益远远超过成本!最后,当您为模型选择正确的数据并行化时,每个GPU都会减少在训练阶段花费的时间、提高模型效率并产生更高端的结果。
寻找有关分布式训练和其他机器学习主题的更多信息?
神经网络是高度复杂的技术,仅训练阶段就可能令人生畏。通过利用和了解更多关于如何利用额外的硬件在更短的时间内创建更有效的模型,数据科学可以改变我们的世界!当您可以在数周和数月而不是数月和数年的时间内创建更有效的神经网络时,用于分布式训练的GPU非常值得初始投资。
图片使用申明:原创文章图片源自‘Canva可画’平台免费版权图片素材;引用文章源自引用平台文章中所使用的原图。