SageMaker 分布式数据并行配置提示和陷阱 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SageMaker 分布式数据并行配置提示和陷阱

在使用 SageMaker 的分布式数据并行库之前,请查看以下提示和陷阱。此列表包括适用于跨框架的提示。

数据预处理

如果您在训练期间使用利用 CPU 的外部库预处理数据,则可能会遇到 CPU 瓶颈,因为 SageMaker 分布式数据并行使用 CPU 进行全减少操作。您可以通过将预处理步骤移动到使用 GPU 的库或者在训练前完成所有预处理来缩短训练时间。

单节点与多节点

建议您将此库与多个节点一起使用。该库可以与单主机、多设备设置(例如,具有多个 GPU 的单个 ML 计算实例)一起使用,但是,当您使用两个或更多节点时,库的 ALLReduce 操作可以显著提高性能。此外,在单个主机上,NVLink 已经有助于提高节点内的全部减少效率。

使用调试器调试扩展效率

您可以在培训期间使用 Amazon SageMaker 调试器监控和可视化 CPU 和 GPU 利用率以及其他感兴趣的指标。您可以使用调试器内置规则来监视计算性能问题,例如 CPU 瓶颈、负载平衡和低消耗量利用率。您可以使用调试程序配置当您定义亚马逊 SageMaker Python 开发工具包估计器时。如果您使用AmazonCLI 和Amazon用于在 SageMaker 上进行培训的 Bto3,您可以启用调试器,如使用 Amazon SageMaker API 配置调试器

要在 SageMaker 培训作业中查看使用调试器的示例,您可以在SageMaker 笔记本示例 GitHub 存储库。要了解有关调试程序的详细信息,请参阅Amazon SageMaker Debugger

Batch 大小

在分布式训练中,随着更多节点的添加,批次大小应按比例增加。要在向训练作业添加更多节点时提高收敛速度并增加全局批量大小,请提高学习率。

实现这一目标的一种方法是使用渐进的学习率热身,随着培训工作的进展,学习率将从一个小值提高到一个大值。这种斜坡可避免学习率的突然提高,从而在训练开始时实现健康的收敛。例如,您可以使用 “线性缩放规则”,其中每次将小批次大小乘以 k 时,学习速率也乘以 k。要了解有关这种技术的更多信息, 请参阅研究论文, 准确,大型微型批量 SGD:1 小时内训练 ImageNet, 第 2 和 3 节.

自定义 MPI 选项

SageMaker 分布式数据并行库采用消息传递接口 (MPI),这是管理高性能群集中节点间通信的常用标准,并使用 NVIDIA 的 NCCL 库进行 GPU 级通信。当您将数据并行库与 TensorFlow 或 Pytorch 一起使用Estimator,相应的容器将设置 MPI 环境并执行mpirun命令在群集节点上启动作业。

您可以使用custom_mpi_options中的参数Estimator。任何mpirun在此字段中传递的标志将添加到 mpirun 命令中,并由 Amazon SageMaker 执行以进行培训。例如,您可以定义distribution的参数Estimator使用以下内容来使用NCCL_DEBUG变量在程序开始时打印 NCCL 版本:

distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}