Amazon SageMaker AI 分布式数据并行库常见问题 - 亚马逊 SageMaker AI

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

Amazon SageMaker AI 分布式数据并行库常见问题

请使用以下内容查找有关 SMDDP 库常见问题的答案。

问:使用库时,如何管理 allreduce 支持的 CPU 实例? 我是否必须创建异构 CPU-GPU 集群,或者 SageMaker AI 服务是否为使用 SMDDP 库的作业创建额外的 C5?

SMDDP 库仅支持 GPU 实例,更具体地说,支持使用 NVIDIA A100 GPU 和 EFA 的 P4d 和 P4de 实例。不会启动额外的 C5 或 CPU 实例;如果您的 SageMaker AI 训练作业位于 8 节点 P4d 集群上,则只使用 8 个 ml.p4d.24xlarge 实例。无需预置其他实例。

问:我有一项训练作业,使用一组超参数 H1(学习速率、批次大小、优化器等),在单个 ml.p3.24xlarge 实例上需要 5 天完成。如果使用 SageMaker AI 的数据并行库和五倍大小的集群,是否足以实现大约五倍的加速? 还是在激活 SMDDP 库之后,必须重新查看它的训练超参数?

库会更改整体批次大小。新的总批次大小会根据使用的训练实例数量线性扩展。因此,您必须更改学习率等超参数,以确保收敛。

问:SMDDP 库支持竞价型实例吗?

是。您可以使用托管式竞价型实例训练。您可以在 SageMaker 训练作业中指定检查点文件的路径。您可以在其训练脚本中启用保存和恢复检查点,如在 TensorFlow 训练脚本中使用 SMDDP 库(已过时)在 PyTorch 训练脚本中使用 SMDDP 库中的最后一步所述。

问:SMDDP 库是否也可用于单主机、多设备设置?

该库可用于单主机多设备训练,但只有在多主机训练中,该库才能实现性能改进。

问:训练数据集应该存储在哪里?

训练数据集可以存储在 Amazon S3 存储桶或 Amazon FSx 驱动器中。请参阅这份有关训练作业支持的各种输入文件系统的文档

问:使用 SMDDP 库时,是否必须在 FSx 中为 Lustre 提供训练数据? 是否可以使用 Amazon EFS 和 Amazon S3?

我们通常建议您使用 Amazon FSx,因为它的延迟更低,吞吐量更高。如果愿意,您也可以使用 Amazon EFS 或 Amazon S3。

问:该库能否用于 CPU 节点?

否。要查找 SMDDP 库支持的实例类型,请参阅 支持的实例类型

问:SMDDP 库在发布时支持哪些框架和框架版本?

SMDDP 库目前支持 PyTorch v1.6.0 或更高版本以及 TensorFlow v2.3.0 或更高版本。它不支持 TensorFlow 1.x。有关在 AWS Deep Learning Containers 中打包的 SMDDP 库版本的信息,请参阅深度学习容器发行说明

问:该库是否支持 AMP?

是,SMDDP 库支持开箱即用的自动混合精度 (AMP)。除了对训练脚本的框架级修改之外,无需执行额外操作即可使用 AMP。如果梯度位于 FP16 中,则 SageMaker AI 数据并行库会在 FP16 中运行其 AllReduce 操作。有关对您的训练脚本实施 AMP API 的更多信息,请参阅以下资源:

问:如何确定分布式训练作业是否因为 I/O 瓶颈而减慢了速度?

在较大的集群中,训练作业需要更多的 I/O 吞吐量,因此,训练吞吐量可能需要更长的时间(更多纪元)才能逐步提升到最高性能。这表明,随着节点扩展,I/O 正在出现瓶颈,缓存更难逐步建立(吞吐量要求更高,网络拓扑更复杂)。有关在 CloudWatch 上监控 Amazon FSx 吞吐量的更多信息,请参阅《FSx for Lustre 用户指南》中的监控 FSx for Lustre

问:运行具有数据并行性的分布式训练作业时,如何解决 I/O 瓶颈?

如果您使用 Amazon S3,则强烈建议您使用 Amazon FSx 作为数据通道。如果您已经在使用 Amazon FSx 但仍存在 I/O 瓶颈问题,则您可能设置了低 I/O 吞吐量和较小存储容量的 Amazon FSx 文件系统。有关如何估算和选择合适 I/O 吞吐能力的更多信息,请参阅使用 Amazon FSx 并设置最佳的存储和吞吐能力

问:(对于库 v1.4.0 或更高版本)如何解决初始化进程组时的 Invalid backend 错误。

如果您在调用 init_process_group 时遇到错误消息 ValueError: Invalid backend: 'smddp',这是由于 SMDDP 库 v1.4.0 及更高版本中的重大更改所致。您必须导入该库的 PyTorch 客户端 smdistributed.dataparallel.torch.torch_smddp,这会将 smddp 注册为 PyTorch 的后端。要了解更多信息,请参阅在 PyTorch 训练脚本中使用 SMDDP 库

问:(对于库 v1.4.0 或更高版本)我想调用 torch.distributed 接口的集合基元。smddp 后端支持哪些基元?

在 v1.4.0 中,SMDDP 库支持 torch.distributed 接口的 all_reducebroadcastreduceall_gatherbarrier

问:(对于 SMDDP 库 v1.4.0 或更高版本)这个新 API 能否与其他自定义 DDP 类或库(如 Apex DDP)一起使用?

SMDDP 库与使用 torch.distribtued 模块的其他第三方分布式数据并行库和框架实现进行了测试。只要 SMDDP 库支持自定义 DDP 类使用的集体操作,那么 SMDDP 库就能与自定义 DDP 类一起使用。有关支持的集合的列表,请参阅前面的问题。如果您遇到这些使用案例并需要进一步的支持,请通过 AWS Support CenterAmazon SageMaker AI 的 AWS 开发人员论坛联系 SageMaker AI 团队。

问:SMDDP 库是否支持自带容器 (BYOC) 选项? 如果支持,我该如何安装库并通过编写自定义 Dockerfile 来运行分布式训练作业?

如果您想将 SMDDP 库及其最小依赖关系集成到自己的 Docker 容器中,BYOC 就是合适的方法。您可以使用库的二进制文件构建自己的容器。建议的流程是编写包含库及其依赖项的自定义 Dockerfile,构建 Docker 容器,将其托管在 Amazon ECR 中,然后使用 ECR 映像 URI 通过 SageMaker AI 通用估算器类启动训练作业。有关如何使用 SMDDP 库为 SageMaker AI 中的分布式训练准备自定义 Dockerfile 的更多说明,请参阅 利用 SageMaker AI 分布式数据并行库创建自己的 Docker 容器