Azure 机器学习的分布式训练

本文介绍分布式训练以及 Azure 机器学习如何支持深度学习模型的分布式训练。

在分布式训练中,用于训练模型的工作负载会在多个微型处理器之间进行拆分和共享,这些处理器称为工作器节点。 这些工作器节点并行工作以加速模型训练。 分布式训练可用于传统的机器学习模型,但更适用于计算和时间密集型任务,如用于训练深度神经网络的深度学习

深度学习和分布式训练

分布式训练有两种主要类型:数据并行模型并行。 对于深度学习模型上的分布式训练,Python 中的 Azure 机器学习 SDK 支持与 PyTorch 和 TensorFlow 进行集成。 两者都是采用数据并行性进行分布式训练的常用框架,可以使用 Horovod 来优化计算速度。

对于不需要进行分布式训练的机器学习模型,请参阅使用 Azure 机器学习训练模型,了解使用 Python SDK 训练模型的不同方法。

数据并行

数据并行是两种分布式训练方法中较易实现的一个,对于大多数用例来说已经足够了。

在此方法中,数据划分到计算群集或无服务器计算中的分区内,其中分区数等于可用节点的总数。 将在这些工作器节点的每一个中复制模型,每个节点对自己的数据子集进行操作。 请记住,每个节点都必须有能力支持正在进行训练的模型,也就是说,整个模型需要拟合每个节点。

下图显示了此方式。

数据并行性关系图,其中显示了复制到工作器节点中的模型。

每个节点独立计算其训练样本的预测结果与标记输出之间的误差。 每个节点又会基于该误差更新其模型,且必须将其所有更改传达给其他节点,以便其相应更新其自己的模型。 工作器节点需要在批处理计算结束时同步模型参数或梯度,以确保其训练的是一致的模型。

模型并行

在模型并行(也称为网络并行)中,模型将划分为可在不同节点中并发运行的不同部分,且每个部分都使用同一数据运行。 此方法的可伸缩性取决于算法的任务并行程度,其实现方式比数据并行更为复杂。

在模型并行中,工作器节点只需要为每个前向或后向传播步骤同步共享的参数一次(通常情况下)。 并且,即使模型较大也没问题,因为每个节点只处理模型的一个部分,且使用一致的训练数据。