分布式深度学习训练:Tensorflow 中的模型和数据并行性

如何使用镜像策略、参数服务器和中央存储等分布式方法在多个 GPU 或机器中训练数据。

来源:AI夏令营

在大量用例中,深度学习训练可以在单台机器上的单个 GPU 上进行,并且具有相对较高的性能和速度。但是,有时我们需要更快的速度。例如,当我们的数据太大而无法容纳在一台机器上时,或者我们的硬件不足以处理训练时。因此,我们可能需要扩展。

扩展

扩展意味着向我们的系统添加更多 GPU,或者在集群中使用多台机器。因此,我们需要某种方式来有效地分配我们的训练。但在现实生活中,这并不容易。事实上,我们可以使用多种策略来分配我们的训练。选择在很大程度上取决于我们的具体用例、数据和模型。

集群 有效地分配我们的训练

在本文中,我将尝试通过详细介绍该领域来概述所有不同的策略。我们的主要目标是能够为我们的应用程序选择最佳的策略。我将使用 Tensorflow 展示一些关于如何构建这些分发策略的代码。不过,大多数概念也适用于其他深度学习框架。

Tensorflow

如果您还记得,在本系列的前两篇文章中,我们为 Unet-Image 分割问题构建了一个自定义训练循环,并将其部署到 Google Cloud 以便远程运行训练。在本文中,我也将使用完全相同的代码,以便我们在整个系列中保持一致。

自定义训练循环 Google Cloud 远程训练

数据和模型并行性

分布式训练的两大流派是数据并行性和模型并行性。

数据并行 模型并行 大多数时候是理想的解决方案 通用性 快速编译 充分利用硬件 模型并行
模型并行:使我们能够将模型分成不同的块,并将每个块训练到不同的机器中。
模型并行

在单台机器上训练

def