Kubeflow Training Operators
Kubeflow 项目 (opens in a new tab)致力于使 Kubernetes 上的机器学习 (ML) 工作流程的部署变得简单、可移植且可扩展。目标不是重新创建其他服务,而是提供一种简单的方法,将最佳的 ML 开源系统部署到不同的基础设施。无论您在哪里运行 Kubernetes,都应该能够运行 Kubeflow。
Operators
下图显示了 Kubeflow 支持的一些 Training Operators - 完整列表可以在Kubeflow 官方文档 (opens in a new tab)以及源代码 (opens in a new tab)中找到。
PyTorch Operator
顾名思义,它使用 PyTorch 作为框架,其中包括 torch.distributed 和 torch.nn.parallel 等包。有关使用 PyTorch 进行分布式训练的更深入说明,请参阅PyTorch 分布式概述 (opens in a new tab)文档页面。
MPI Operator
与 PyTorch Operator 不同, MPI Operator 与底层框架解耦。它通过利用名为 Horovod (opens in a new tab) 的分布式深度学习训练框架来实现这一点。 Horovod 通过实现简单的包装器(例如 DistributedOptimizer )来支持许多框架。有关更深入的解释,请参阅最初发布 MPI Operator 时创建的 Kubeflow MPI Operator 简介和行业采用 (opens in a new tab) 博客文章。
框架
“框架”用于定义机器学习模型。最流行的框架是 TensorFlow 和 PyTorch ,但 Kubeflow 还支持其他框架,例如 MXNet 和 XGBoost。
分发策略
“分发策略”是在处理分发的代码中使用的包。这是上图中三个 Operator 之间的主要区别。分发策略通常作为框架不同部分(例如模型和优化器)的包装器来实现。
后端
“后端”是用于促进分布式训练所需的设备之间的通信的库。您通常不需要直接处理这些后端,因为分发策略会为您实现它们的使用。 NVIDIA 集体通信库(NCCL) 针对 NVIDIA GPU 和网络进行了优化。
数据并行
在训练过程中,每个批次都被分成“微批次”,其中每个 GPU 都会获得一个微批次。梯度在所有微批次中取平均值,并且模型的每个实例都会更新。
当使用数据并行性扩展分布式训练时,遵循“线性缩放规则”被认为是最佳实践,如 准确、大型小批量 SGD:1 小时内训练 ImageNet (opens in a new tab) 论文中所述。
这意味着如果进程总数加倍(有效批量大小加倍),学习率也应该加倍。这可以防止精度随着进程数量的增加而降低,同时也可以在扩大过程中匹配训练曲线,从而在相同的时期数中产生相似的收敛率。