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

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

SageMaker AI 分布式数据并行库的配置提示

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

数据预处理

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

单节点与多节点

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

使用 Debugger 调试扩展效率

在训练期间,您可以使用 Amazon SageMaker Debugger 监控CPU和可视化GPU利用率和其他感兴趣的指标。您可以使用 Debugger 内置规则监控计算性能问题,例如 CPUBottleneckLoadBalancingLowGPUUtilization。在定义 Amaz SageMaker on Python SDK 估算器时,您可以使用调试器配置来指定这些规则。如果您使用 Amazon CLI 和 Amazon SDK for Python (Boto3) 进行 SageMaker 人工智能训练,则可以启用调试器,如使用 A mazon 配置 SageMaker 调试器中所示。 SageMaker API

要查看在 SageMaker 训练作业中使用 Debugger 的示例,可以参考笔记本示例 GitHub 存储库中的一个SageMaker 笔记本示例。要了解有关调试器的更多信息,请参阅 Amazon SageMaker 调试器。

批次大小

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

实现这一目标的一种方法是使用渐进的学习率预热,随着训练作业的进展,学习率从较小的值逐步提高到较大的值。这种渐进式提升避免了学习率的突然提高,从而在训练开始时能够健康地收敛。例如,您可以使用线性扩展规则,每次将小批次大小乘以 k 时,学习率也乘以 k。要了解有关此技术的更多信息,请参阅研究论文《准确、大型 MinibatchSGD:1 小时 ImageNet 内训练》,第 2 部分和第 3 节。

自定义MPI选项

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

您可以使用中的custom_mpi_options参数设置自定义MPI操作Estimator。在此字段中传递的任何mpirun标志都将添加到mpirun命令中,并由 SageMaker AI 执行以进行训练。例如,您可以使用以下命令Estimator来定义的distribution参数,以便在程序启动时使用NCCL_DEBUG变量打印NCCL版本:

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

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

在具有分布式数据并行性的多个节点上训练模型时,强烈建议将其用FSx于 Lustre。Amazon FSx 是一项可扩展的高性能存储服务,支持吞吐量更快的共享文件存储。大规模使用 Amazon FSx 存储,您可以更快地跨计算节点加载数据。

通常,对于分布式数据并行性,您会期望总训练吞吐量随数量的增加近线性扩展。GPUs但是,如果您使用的是次优的 Amazon 存储,则由于FSx亚马逊吞吐量低,训练性能可能会降低。FSx

例如,如果您使用存储容量最低为 1. SCRATCH2 TiB 的 Amazon FSx 文件系统的 _ 2 部署类型,则 I/O 吞吐量为 240。MB/s. Amazon FSx storage works in a way that you can assign physical storage devices, and the more devices assigned, the larger throughput you get. The smallest storage increment for the SRATCH_2 type is 1.2 TiB, and the corresponding throughput gain is 240 MB/s

假设您有一个模型,在 4 个节点的集群上对超过 100 GB 的数据集进行训练。对于针对集群进行了优化的给定批次大小,假设模型可以在大约 30 秒内完成一个纪元。在这种情况下,所需的最低 I/O 速度约为 3 个GB/s (100 GB / 30 s). This is apparently a much higher throughput requirement than 240 MB/s. With such a limited Amazon FSx capacity, scaling your distributed training job up to larger clusters might aggravate I/O瓶颈问题;随着缓存的积累,模型训练吞吐量可能会在以后的时期有所提高,但是 Amazon FSx 吞吐量仍可能成为瓶颈。

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

要详细了解如何增加亚马逊FSx存储空间和部署类型,请参阅 A ma FSx zon for Lustre 文档中的以下页面: