本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 内置规则监控计算性能问题,例如 CPUBottleneck
、LoadBalancing
和 LowGPUUtilization
。在定义 Amaz SageMaker on Python SDK 估算器时,您可以使用调试器配置来指定这些规则。如果您使用 Amazon CLI 和 Amazon SDK for Python (Boto3)
进行 SageMaker 人工智能训练,则可以启用调试器,如使用 A mazon 配置 SageMaker 调试器中所示。 SageMaker API
要查看在 SageMaker 训练作业中使用 Debugger 的示例,可以参考笔记本示例 GitHub 存储库中的一个SageMaker 笔记本示例
批次大小
在分布式训练中,随着添加的节点越多,批次大小应该按比例增加。在训练作业中添加更多节点并增加全局批次大小时,要想提高收敛速度,请提高学习率。
实现这一目标的一种方法是使用渐进的学习率预热,随着训练作业的进展,学习率从较小的值逐步提高到较大的值。这种渐进式提升避免了学习率的突然提高,从而在训练开始时能够健康地收敛。例如,您可以使用线性扩展规则,每次将小批次大小乘以 k 时,学习率也乘以 k。要了解有关此技术的更多信息,请参阅研究论文《准确、大型 MinibatchSGD:1 小时 ImageNet 内训练》
自定义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
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 文档中的以下页面: