Amazon SageMaker 分布式数据并行库常见问题解答 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

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

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

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

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

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

问:SMDDP 库是否支持 Spot?

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

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

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

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

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

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

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

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

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

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

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

问:该库是否支持 AMP?

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

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

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

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

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

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

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

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

在 v1.4.0 中,SMDDP 库支持all_reduce接口的broadcastreduceall_gather、、和barriertorch.distributed

问:(适用于 SMDDP 库 v1.4.0 或更高版本)这个新 API 是否适用于其他自定义 DDP 类或库,比如 Apex DDP?

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

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

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