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

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

在下文中查找有关 SageMaker 数据并行性库的常见问题的答案。

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

库使用随 GPU 实例提供的 CPU。无需启动额外的 C5 或 CPU 实例;如果您的 SageMaker 训练作业为 8 个节点的 ml.p3dn.24xlarge 集群,则只使用 8 个 ml.p3dn.24xlarge 实例。无需预置其他实例。 

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

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

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

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

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

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

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

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

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

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

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

不能。该库目前支持 ml.p3.16xlargeml.p3dn.24xlargeml.p4d.24xlarge 实例。

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

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

问:该库是否支持 AMP?

是的,SageMaker 的分布式数据并行性库直接支持自动混合精度 (AMP)。除了对训练脚本的框架级修改之外,无需执行额外操作即可使用 AMP。如果梯度位于 FP16 中,则 SageMaker 数据并行性库会在 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',这是由于库 v1.4.0 及更高版本中的重大更改所致。您必须导入该库的 PyTorch 客户端 smdistributed.dataparallel.torch.torch_smddp,这会将 smddp 注册为 PyTorch 的后端。要了解更多信息,请参阅使用 SageMaker 分布式数据并行库作为 torch.distributed 的后端

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

在 v1.4.0 中,该库支持 all_reducebroadcastreduceall_gatherbarrier

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

在使用 torch.distribtued 模块的其他第三方分布式数据并行库和框架实施上,SageMaker 数据并行性库已经进行了测试。只要该库支持自定义 DDP 类使用的集合,SageMaker 数据并行库就可以与自定义 DDP 类一起使用。有关支持的集合的列表,请参阅前面的问题。如果您遇到这些使用场景并需要进一步的支持,请通过 Amazon Support CenterAmazon SageMaker 的 Amazon 开发人员论坛联系 SageMaker 团队。

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

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