本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SageMaker 分布式数据并行配置提示和陷阱
在使用 SageMaker 的分布式数据并行库之前,请查看以下提示和陷阱。此列表包括适用于各个框架的提示。
数据预处理
如果在训练期间使用利用 CPU 的外部库预处理数据,则可能会遇到 CPU 瓶颈,因为 SageMaker 分布式数据并行使用 CPUAllReduce
运算。您可以通过将预处理步骤移至使用 GPU 的库或在训练之前完成所有预处理来缩短训练时间。
单节点与多个节点
建议将此库与多个节点结合使用。该库可以与单主机、多设备设置一起使用(例如,具有多个 GPU 的单个 ML 计算实例);但是,当您使用两个或更多节点时,库的AllReduce
操作可以显著提高性能。此外,在单个主机上,nvLink 已经为节点内做出贡献AllReduce
效率。
使用调试器调试扩展效率
您可以使用 Amazon SageMaker 调试器在训练期间监控和可视化 CPU 和 GPU 利用率以及其他感兴趣的指标。你可以使用调试器内置规则监控计算性能问题,例如CPUBottleneck
、LoadBalancing
, 和LowGPUUtilization
. 你可以使用指定这些规则调试程序配置当您定义 Amazon SageMaker Python SDK 估算器时。如果您使用AmazonCLI 和AmazonBoto3 在 SageMaker 上进行训练,您可以启用调试器,如中所示使用 Amazon SageMaker API 配置调试程序.
要在 SageMaker 培训作业中查看使用调试器的示例,您可以在SageMaker 笔记本示例 GitHub 库
Batch 大小
在分布式训练中,随着更多节点的增加,批量大小应该按比例增加。为了在训练作业中添加更多节点并增加全球批量时提高收敛速度,请提高学习率。
实现这一目标的一种方法是使用渐进的学习率预热,随着培训工作的进展,学习率从小值提高到大值。这种坡道避免了学习率的突然提高,从而在训练开始时能够健康地融合。例如,您可以使用线性缩放规则其中每次小批量大小乘以 k 时,学习率也乘以 k。要了解有关此技术的更多信息,请参阅该研究论文,准确、大型迷你匹配 SGD:在 1 小时内训练 ImageNet
自定义 MPI 选项
SageMaker 分布式数据并行库采用消息传递接口 (MPI),这是管理高性能群集中节点之间通信的常用标准,并使用 NVIDIA 的 NCCL 库进行 GPU 级通信。当你将数据并行库与 TensorFlow 或 Pytorch 一起使用时Estimator
,各自的容器设置 MPI 环境并执行mpirun
命令在群集节点上启动作业。
您可以使用custom_mpi_options
中的参数Estimator
. 任何mpirun
在此字段中传递的标志将添加到mpirun
命令并由 SageMaker 执行以进行训练。例如,您可以将distribution
的参数Estimator
使用以下内容来使用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 吞吐量较低,训练绩效可能会降低。
例如,如果您使用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 文档: