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

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

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

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

数据预处理

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

单节点与多个节点

建议将此库与多个节点结合使用。该库可以与单主机、多设备设置一起使用(例如,具有多个 GPU 的单个 ML 计算实例);但是,当您使用两个或更多节点时,库的AllReduce操作可以显著提高性能。此外,在单个主机上,nvLink 已经为节点内做出贡献AllReduce效率。

使用调试器调试扩展效率

您可以使用 Amazon SageMaker 调试器在训练期间监控和可视化 CPU 和 GPU 利用率以及其他感兴趣的指标。你可以使用调试器内置规则监控计算性能问题,例如CPUBottleneckLoadBalancing, 和LowGPUUtilization. 你可以使用指定这些规则调试程序配置当您定义 Amazon SageMaker Python SDK 估算器时。如果您使用AmazonCLI 和AmazonBoto3 在 SageMaker 上进行训练,您可以启用调试器,如中所示使用 Amazon SageMaker API 配置调试程序.

要在 SageMaker 培训作业中查看使用调试器的示例,您可以在SageMaker 笔记本示例 GitHub 库. 要了解有关 Debug 的更多信息,请参阅Amazon SageMaker 调试器.

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命令并由 SageMaker 执行以进行训练。例如,您可以将distribution的参数Estimator使用以下内容来使用NCCL_DEBUG变量来在程序开始时打印 NCCL 版本:

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

使用 Amazon FSx 并设置最佳存储和吞吐量容量

在具有分布式数据并行性的多个节点上训练模型时,强烈建议使用FSx for Lustre. Amazon FSx 是一种可扩展且高性能的存储服务,支持共享文件存储,吞吐量更快。大规模使用 Amazon FSx 存储,您可以在计算节点之间实现更快的数据加载速度。

通常情况下,使用分布式数据并行性,您预计总训练吞吐量将与 GPU 的数量接近线性扩展。但是,如果您使用次优的 Amazon FSx 存储空间,则由于 Amazon FSx 吞吐量较低,训练绩效可能会降低。

例如,如果您使用SCRATCH_2Amazon FSx 文件系统的部署类型使用最低 1.2 TiB 存储容量,I/O 吞吐量为 240 MB/s。Amazon FSx 存储的工作方式是,您可以分配物理存储设备,分配的设备越多,获得的吞吐量就越大。SRATCH_2 类型的最小存储增量为 1.2 TiB,相应的吞吐量增益为 240 MB/s。

假设您有一个模型可以在超过 100 GB 数据集的 4 节点群集上进行训练。对于针对集群进行了优化的给定批量大小,假设模型可以在大约 30 秒内完成一个纪元。在这种情况下,所需的最低 I/O 速度约为 3 Gb/s(100 GB /30 秒)。这显然比 240 MB/s 的吞吐量要高得多。由于 Amazon FSx 容量如此有限,将分布式培训作业扩展到更大的集群可能会加剧 I/O 瓶颈问题;随着缓存的积累,模型训练吞吐量可能会在稍后时期提高,但 Amazon FSx 吞吐量仍可能是瓶颈。

为了缓解此类 I/O 瓶颈问题,您应该增加 Amazon FSx 存储大小以获得更高的吞吐量容量。通常,为了找到最佳 I/O 吞吐量,您可以尝试不同的 Amazon FSx 吞吐量,分配的吞吐量等于或略低于估计值,直到您发现这足以解决 I/O 瓶颈问题为止。在上述示例中,具有 2.4 Gb/s 吞吐量和 67 GB RAM 缓存的 Amazon FSx 存储就足够了。如果文件系统具有最佳吞吐量,模型训练吞吐量应立即达到最大值,也可以在缓存建立起来的第一个纪元之后达到最大值。

要了解有关如何增加 Amazon FSx 存储和部署类型的更多信息,请参阅Amazon FSx for Lustre 文档