本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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库(已弃用)和在 PyTorch 训练脚本中使用该SMDDP库中的最后一步所述。
问: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。有关 AWS 深度学习容器中打包的 SMDDP 库版本的更多信息,请参阅 Deep Learning Containers 的发行说明。
问:该库是否支持 AMP?
是的,SMDDP 库支持开箱即用的自动混合精度 (AMP)。除了对训练脚本的框架级修改之外,无需执行额外操作即可使用 AMP。如果梯度在 FP16 中,则 SageMaker 数据并行度库在 FP16 中运行其操作。AllReduce
有关对您的训练脚本实施 AMP API 的更多信息,请参阅以下资源:
-
框架- PyTorch
在 NVIDIA 深度学习性能文档中 -
框架- TensorFlow
在 NVIDIA 深度学习性能文档中 -
NVIDIA 开发人员文档中的适用于深度学习的自动混合精度
-
博客中@@ 引入原生 PyTorch 自动混合精度,以便在 NVIDIA GPU 上更快地进行训练
PyTorch -
TensorFlow TensorFlow 文档中的@@ 混合精度 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。要了解更多信息,请参阅在 PyTorch 训练脚本中使用该SMDDP库。
问:(对于 SMDDP 库 v1.4.0 或更高版本)我想调用接口的集体原语。torch.distributed
smddp
后端支持哪些基元?
在 v1.4.0 中,SMDDP 库支持all_reduce
接口的broadcast
reduce
、all_gather
、、和barrier
。torch.distributed
问:(适用于 SMDDP 库 v1.4.0 或更高版本)这个新 API 是否适用于其他自定义 DDP 类或库,比如 Apex DDP?
SMDDP 库使用其他第三方分布式数据并行库和使用这些模块的框架实现进行了测试。torch.distribtued
只要 SMDDP 库支持自定义 DDP 类使用的集合操作,就可以将 SMDDP 库与自定义 DDP 类一起使用。有关支持的集合的列表,请参阅前面的问题。如果您有这些用例并需要进一步的支持,请通过 Support Cent er
问:SMDDP 库是否支持 bring-your-own-container (BYOC) 选项? 如果支持,我该如何安装库并通过编写自定义 Dockerfile 来运行分布式训练作业?
如果你想将 SMDDP 库及其最低依赖项集成到你自己的 Docker 容器中,那么 BYOC 是正确的方法。您可以使用库的二进制文件构建自己的容器。推荐的过程是编写包含库及其依赖项的自定义 Dockerfile,构建 Docker 容器,将其托管在 Amazon ECR 中,然后使用 ECR 镜像 URI 使用通用估算器类启动训练作业。 SageMaker 有关如何使用 SMDDP 库为分布式训练准备自定义 Dockerfile SageMaker 的更多说明,请参阅。使用 SageMaker 分布式数据并行库创建自己的 Docker 容器