你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍分布式训练以及 Azure 机器学习如何支持深度学习模型的分布式训练。
在分布式训练中,将工作负荷拆分为训练模型,并在多个微型处理器(称为工作器节点)之间共享模型。 这些工作器节点并行工作以加速模型训练。 可以将分布式训练用于传统的机器学习模型,但它更适用于计算和时间密集型任务,例如 深度学习 来训练深度神经网络。
深度学习和分布式训练
分布式训练有两种主要类型:数据并行和模型并行。 对于深度学习模型上的分布式训练,Python 中的 Azure 机器学习 SDK 支持与 PyTorch 和 TensorFlow 进行集成。 两者都是采用数据并行性进行分布式训练的常用框架,可以使用 Horovod 来优化计算速度。
对于不需要进行分布式训练的机器学习模型,请参阅使用 Azure 机器学习训练模型,了解使用 Python SDK 训练模型的不同方法。
数据并行
数据并行是两种分布式训练方法中较易实现的一个,对于大多数用例来说已经足够了。
在此方法中,将数据划分为分区,其中分区数等于计算群集或 无服务器计算中的可用节点总数。 复制每个工作器节点中的模型,每个节点都在其自己的数据子集上运行。 请记住,每个节点都必须有能力支持正在进行训练的模型,也就是说,整个模型需要拟合每个节点。
下图显示了此方式。
每个节点独立计算其训练样本的预测结果与标记输出之间的误差。 每个节点又会基于该误差更新其模型,且必须将其所有更改传达给其他节点,以便其相应更新其自己的模型。 工作器节点需要在批处理计算结束时同步模型参数或梯度,以确保其训练的是一致的模型。
模型并行
在模型并行度(也称为网络并行度)中,可将模型划分为在不同节点上并发运行的不同部分。 每个部分都在同一数据上运行。 此方法的可伸缩性取决于算法的任务并行化程度。 实现起来比数据并行更为复杂。
在模型并行中,工作器节点只需要为每个前向或后向传播步骤同步共享的参数一次(通常情况下)。 并且,即使模型较大也没问题,因为每个节点只处理模型的一个部分,且使用一致的训练数据。