Azure机器学习进行分布式训练
摘要
在本文中,您将了解分布式训练以及Azure机器学习如何为深度学习模型提供支持。
在分布式训练中,训练一个模型的工作负载在多个微处理器(称为工作节点)之间进行分解和共享。这些工作节点并行工作以加速模型训练。分布式训练可以用于传统的机器学习模型,但更适合于计算和时间密集型任务,如深度学习训练深度神经网络。
深度学习和分布式训练
分布式训练主要有两种类型: 数据平行和模型并行。对于深度学习模型的分布式训练,Python 中的 Azure 机器学习 SDK 支持与流行框架 PyTorch 和 TensorFlow 的集成。这两个框架都采用了分布式训练的数据平行,并可以利用 horovod 来优化计算速度。
- 使用 PyTorch 进行分布式训练
- 基于 TensorFlow 的分布式训练
对于不需要分布式训练的机器学习模型,请参阅 Azure 机器学习训练模型,了解使用 Python SDK 训练模型的不同方法。
数据平行
数据平行是两种分布式训练方法中最容易实现的,对于大多数用例来说已经足够了。
在这种方法中,数据被划分为多个分区,其中分区的数量等于计算集群中可用节点的总数。模型被复制到每个工作节点中,每个工作节点对自己的数据子集进行操作。请记住,每个节点都必须有能力支持正在训练的模型,即模型必须完全适合每个节点。下图提供了此方法的可视化演示。
每个节点独立地计算其训练样本的预测和标记输出之间的误差。反过来,每个节点根据错误更新其模型,并且必须将其所有更改传达给其他节点以更新其相应的模型。这意味着工作节点需要在批处理计算结束时同步模型参数或梯度,以确保它们训练的是一致的模型。
模型并行
在模型并行(也称为网络并行)中,模型被分割成不同的部分,这些部分可以在不同的节点上并发运行,每个部分都运行在相同的数据上。这种方法的可扩展性取决于算法的任务并行程度,而且实现起来比数据平行更复杂。
在模型并行中,工作节点只需要同步共享参数,通常对于每个前向或后向传播步骤同步一次。此外,更大的模型不是一个问题,因为每个节点操作模型的一部分相同的训练数据。