多 GPU 中的人工智能:梯度累积和数据并行

在 PyTorch 中从头开始学习和实现梯度累加和数据并行性多 GPU 中的人工智能后处理:梯度累加和数据并行性首先出现在《走向数据科学》上。

来源:走向数据科学

是有关跨多个 GPU 的分布式 AI 系列的一部分:

简介

分布式数据并行 (DDP) 是我们要讨论的第一个并行化方法。这是分布式训练环境中始终使用的基线方法,并且通常与其他并行化技术结合使用。

神经网络快速复习

训练神经网络意味着运行前向传递,计算损失,反向传播每个权重相对于损失函数的梯度,最后更新权重(我们称之为优化步骤)。在 PyTorch 中,它通常如下所示:

导入火炬

  • def 训练循环(
  • 型号:torch.nn.Module,
  • 数据加载器:torch.utils.data.DataLoader,
  • 优化器:torch.optim.Optimizer,

    loss_fn:可调用,

    ):对于我,批量枚举(dataloader):输入,目标=批次输出 = 模型(输入) # 前向传递loss = loss_fn(output, Targets) # 计算损失loss.backward() # 向后传递(计算梯度)Optimizer.step() # 更新权重Optimizer.zero_grad() # 清除下一步的梯度对大量训练数据执行优化步骤通常会提供更准确的梯度估计,从而导致更平滑的训练和可能更快的收敛。因此,理想情况下,我们将在基于整个训练数据集计算梯度后采取每一步。实际上,这在深度学习场景中很少可行,因为计算时间太长。相反,我们使用小批量和微批量等小块。Batch:指用于一个优化步骤的整个训练集。小批量:指的是用于一个优化步骤的训练数据的一小部分。微批次:指的是小批量的子集,我们将多个微批次组合起来进行一个优化步骤。梯度累积请注意,梯度累积不是并行化技术,并且不需要多个 GPU。DDP 与 GA 的结合