

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

# Amazon SageMaker AI 分布式数据并行库常见问题
<a name="data-parallel-faq"></a>

请使用以下内容查找有关 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 库（已弃用）](data-parallel-modify-sdp-tf2.md)和[在训练脚本中使用 SMDDP 库 PyTorch](data-parallel-modify-sdp-pt.md)中的最后一步所述。

**问：SMDDP 库是否也可用于单主机、多设备设置？**

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

**问：训练数据集应该存储在哪里？**

训练数据集可以存储在 Amazon S3 存储桶或 Amazon FSx 驱动器中。请参阅这份[有关训练作业支持的各种输入文件系统的文档](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html#sagemaker.inputs.FileSystemInput)。

**问：使用 SMDDP 库时，是否必须在 FSx 中为 Lustre 提供训练数据？ 是否可以使用 Amazon EFS 和 Amazon S3？**

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

**问：该库能否用于 CPU 节点？** 

否。要查找 SMDDP 库支持的实例类型，请参阅 [支持的实例类型](distributed-data-parallel-support.md#distributed-data-parallel-supported-instance-types)。

**问：SMDDP 库在发布时支持哪些框架和框架版本？** 

SMDDP 库目前支持 PyTorch v1.6.0 或更高版本以及 TensorFlow v2.3.0 或更高版本。它不支持 TensorFlow 1.x。有关在 AWS Deep Learning Containers 中打包的 SMDDP 库版本的信息，请参阅[深度学习容器发行说明](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/dlc-release-notes.html)。

**问：该库是否支持 AMP？**

是，SMDDP 库支持开箱即用的自动混合精度 (AMP)。除了对训练脚本的框架级修改之外，无需执行额外操作即可使用 AMP。如果梯度位于 FP16 中，则 SageMaker AI 数据并行库会在 FP16 中运行其 `AllReduce` 操作。有关对您的训练脚本实施 AMP API 的更多信息，请参阅以下资源：
+ *NVIDIA 深度学习性能文档*中的[框架 – PyTorch](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#pytorch)
+ *NVIDIA 深度学习性能文档*中的[框架 – TensorFlow](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#tensorflow)
+ *NVIDIA 开发人员文档*中的[适用于深度学习的自动混合精度](https://developer.nvidia.com/automatic-mixed-precision)
+ *PyTorch 博客*中的[引入 PyTorch 自动混合精度功能，用于加快 NVIDIA GPU 上的训练速度](https://pytorch.org/blog/accelerating-training-on-nvidia-gpus-with-pytorch-automatic-mixed-precision/)
+ 《TensorFlow 文档》**中的 [TensorFlow 混合精度 API](https://www.tensorflow.org/guide/mixed_precision)

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

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

**问：运行具有数据并行性的分布式训练作业时，如何解决 I/O 瓶颈？**

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

**问：（对于库 v1.4.0 或更高版本）如何解决初始化进程组时的 `Invalid backend` 错误。**

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

**问：（对于库 v1.4.0 或更高版本）我想调用 [https://pytorch.org/docs/stable/distributed.html](https://pytorch.org/docs/stable/distributed.html) 接口的集合基元。`smddp` 后端支持哪些基元？**

在 v1.4.0 中，SMDDP 库支持 `torch.distributed` 接口的 `all_reduce`、`broadcast`、`reduce`、`all_gather` 和 `barrier`。

**问：（对于 SMDDP 库 v1.4.0 或更高版本）这个新 API 能否与其他自定义 DDP 类或库（如 Apex DDP）一起使用？**

SMDDP 库与使用 `torch.distribtued` 模块的其他第三方分布式数据并行库和框架实现进行了测试。只要 SMDDP 库支持自定义 DDP 类使用的集体操作，那么 SMDDP 库就能与自定义 DDP 类一起使用。有关支持的集合的列表，请参阅前面的问题。如果您遇到这些使用案例并需要进一步的支持，请通过 [AWS Support Center](https://console.aws.amazon.com/support/) 或 [Amazon SageMaker AI 的 AWS 开发人员论坛](https://forums.aws.amazon.com/forum.jspa?forumID=285)联系 SageMaker AI 团队。

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

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