本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SageMaker AI 分布式数据并行库的配置提示
在使用 SageMaker AI 分布式数据并行度 (SMDDP) 库之前,请查看以下提示。此列表包括适用于各个框架的提示。
数据预处理
如果您在训练期间使用利用 CPU 的外部库对数据进行预处理,则可能会遇到 CPU 瓶颈,因为 SageMaker AI 分布式数据 parallel 使用 CPU 进行操作。AllReduce您可以将预处理步骤移至使用 GPU 的库或在训练之前完成所有预处理操作,从而缩短训练时间。
单节点与多节点
我们建议您将此库与多节点结合使用。该库可以用于单主机、多设备设置中(例如,具有多个 GPU 的单个 ML 计算实例);但是,当您使用两个或更多节点时,库的 AllReduce 操作可以显著提高性能。此外,在单个主机上,NVLink 有助于提升节点内 AllReduce 效率。
使用 Debugger 调试扩展效率
您可以使用 Amazon SageMaker Debugger 监控和可视化训练期间的 CPU 和 GPU 利用率以及其他感兴趣的指标。您可以使用 Debugger 内置规则监控计算性能问题,例如 CPUBottleneck、LoadBalancing 和 LowGPUUtilization。在定义 Amaz SageMaker on Python 软件开发工具包估算器时,您可以使用调试器配置来指定这些规则。如果您使用 AWS CLI 和 适用于 Python (Boto3) 的 AWS SDK
进行 SageMaker 人工智能训练,则可以启用调试器,如使用 A ma SageMaker zon API 配置 SageMaker 调试器中所示。
要查看在 SageMaker 训练作业中使用 Debugger 的示例,可以参考笔记本示例 GitHub 存储库中的一个SageMaker 笔记本示例
批次大小
在分布式训练中,随着添加的节点越多,批次大小应该按比例增加。在训练作业中添加更多节点并增加全局批次大小时,要想提高收敛速度,请提高学习率。
实现这一目标的一种方法是使用渐进的学习率预热,随着训练作业的进展,学习率从较小的值逐步提高到较大的值。这种渐进式提升避免了学习率的突然提高,从而在训练开始时能够健康地收敛。例如,您可以使用线性扩展规则,每次将小批次大小乘以 k 时,学习率也乘以 k。要了解有关这项技术的更多信息,请参阅研究论文《准确、大型 Minibatch SGD:1 小时 ImageNet 内训练》
自定义 MPI 选项
SageMaker AI 分布式数据并行库采用消息传递接口 (MPI),这是一种用于管理高性能集群中节点之间通信的流行标准,并使用 NVIDIA 的 NCCL 库进行通信。 GPU-level 当您将数据并行库与 TensorFlow 或 Pytorch 一起使用时Estimator,相应的容器会设置 MPI 环境并执行mpirun命令以在集群节点上启动作业。
您可以使用 Estimator 中的 custom_mpi_options 参数设置自定义 MPI 操作。在此字段中传递的所有mpirun标志都将添加到mpirun命令中,并由 SageMaker AI 执行以进行训练。例如,您可以通过以下方法定义 Estimator 的 distribution 参数,以使用 NCCL_DEBUG
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 吞吐量较低,训练性能可能会降低。
例如,如果您使用存储容量最低为 1. 2 TiB 的 Amazon FSx 文件系统的 SCRATCH_ 2 部署类型,则吞吐容量为 240。 I/O MB/sAmazon FSx 存储的工作方式是,您可以分配物理存储设备,分配的设备越多,您获得的吞吐量就越大。SRATCH_2 类型的最小存储增量为 1.2 TiB,相应的吞吐量增益为 240 TiB。 MB/s
假设您有一个模型,在 4 个节点的集群上对超过 100 GB 的数据集进行训练。对于针对集群进行了优化的给定批次大小,假设模型可以在大约 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 吞吐量和67GB内存缓存的Amazon FSx存储空间就足够了。如果文件系统具有最佳吞吐量,则模型训练吞吐量应立即达到最大值,或者在第一个纪元之后建立了缓存时达到最大值。
要了解有关如何增加 Amazon FSx 存储以及部署类型的更多信息,请参阅适用于 Lustre 的 Amazon FSx 文档中的以下页面: