深度学习模型的最大问题之一是它们经常很大,往往无法在单个GPU中进行训练。PyTorch构建了两种在多个GPU中实施分布式训练的方法:nn.DataParalllel和nn.DistributedParalllel。它们是包装和更改代码以及增加在多个GPU中训练网络的功能的简单方法。
nn.DataParallel更容易使用,但只需要在一台机器上使用。nn.DataParalllel在每个批次中,仅使用一个过程来计算模型权重并将其分配给每个GPU。
在这篇文章中,我会详细介绍nn.DataParallel和nn.DistributedDataParalllel是如何工作的。还将介绍两者之间的主要区别以及如何在多个GPU中进行训练。首先来看神经网络训练的工作原理。
训练
首先,让我们复习一下训练神经网络通常是如何工作的。
训练神经网络时,每个循环有四个主要步骤:
- forward pass,其中输入由神经网络处理
- 通过将预测标签与真实标签进行比较来计算损失函数
- 完成backward pass,根据损失计算每个参数的梯度(使用反向传播)
- 使用梯度更新参数
对于大于1的batch sizes,我们可能希望对训练进行批归一化。
DataParallel
DataParallel帮助将训练分散到一台计算机上的多个GPU中。让我们详细介绍一下DataParallel的工作原理。当使用数据并行训练神经网络时,会发生以下几个步骤:
- mini-batch在GPU:0上拆分
- 拆分mini-batch并将其移至所有不同的G