

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

# SageMaker AI 分布式数据并行库的配置提示
<a name="data-parallel-config"></a>

在使用 SageMaker AI 分布式数据并行度 (SMDDP) 库之前，请查看以下提示。此列表包括适用于各个框架的提示。

**Topics**
+ [数据预处理](#data-parallel-config-dataprep)
+ [单节点与多节点](#data-parallel-config-multi-node)
+ [使用 Debugger 调试扩展效率](#data-parallel-config-debug)
+ [批次大小](#data-parallel-config-batch-size)
+ [自定义 MPI 选项](#data-parallel-config-mpi-custom)
+ [使用 Amazon FSx 并设置最佳存储和吞吐容量](#data-parallel-config-fxs)

## 数据预处理
<a name="data-parallel-config-dataprep"></a>

如果您在训练期间使用利用 CPU 的外部库对数据进行预处理，则可能会遇到 CPU 瓶颈，因为 SageMaker AI 分布式数据 parallel 使用 CPU 进行操作。`AllReduce`您可以通过将预处理步骤移至使用的库 GPUs 或在训练前完成所有预处理来缩短训练时间。

## 单节点与多节点
<a name="data-parallel-config-multi-node"></a>

我们建议您将此库与多节点结合使用。该库可以与单主机、多设备设置一起使用（例如，具有多个节点的单个 ML 计算实例 GPUs）；但是，当您使用两个或更多节点时，库的`AllReduce`操作可以显著提高性能。此外，在单台主机上， NVLink 已经有助于`AllReduce`提高节点内效率。

## 使用 Debugger 调试扩展效率
<a name="data-parallel-config-debug"></a>

您可以使用 Amazon SageMaker Debugger 监控和可视化训练期间的 CPU 和 GPU 利用率以及其他感兴趣的指标。您可以使用 Debugger [内置规则](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html)监控计算性能问题，例如 `CPUBottleneck`、`LoadBalancing` 和 `LowGPUUtilization`。在定义 Amaz SageMaker on Python 软件开发工具包估算器时，您可以使用[调试器配置](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-configuration-for-debugging.html)来指定这些规则。如果您使用 AWS CLI 和 适用于 Python (Boto3) 的 AWS SDK 进行 SageMaker 人工智能训练，则可以启用调试器，如使用 A [ma SageMaker zon API 配置 SageMaker 调试器](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-createtrainingjob-api.html)中所示。

要查看在 SageMaker 训练作业中使用 Debugger 的示例，可以参考 Notebook Examples [ GitHub 存储库中的一个SageMaker 笔记本示例](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger)。要了解有关调试器的更多信息，请参阅 [Amazon SageMaker 调试](https://docs.aws.amazon.com/sagemaker/latest/dg/train-debugger.html)器。

## 批次大小
<a name="data-parallel-config-batch-size"></a>

在分布式训练中，随着添加的节点越多，批次大小应该按比例增加。在训练作业中添加更多节点并增加全局批次大小时，要想提高收敛速度，请提高学习率。

实现这一目标的一种方法是使用渐进的学习率预热，随着训练作业的进展，学习率从较小的值逐步提高到较大的值。这种渐进式提升避免了学习率的突然提高，从而在训练开始时能够健康地收敛。例如，您可以使用*线性扩展规则*，每次将小批次大小乘以 k 时，学习率也乘以 k。要了解有关这项技术的更多信息，请参阅研究论文《[准确、大型 Minibatch SGD：1 小时 ImageNet 内训练》](https://arxiv.org/pdf/1706.02677.pdf)，第 2 部分和第 3 节。

## 自定义 MPI 选项
<a name="data-parallel-config-mpi-custom"></a>

 SageMaker AI 分布式数据并行库采用消息传递接口 (MPI)，这是一种用于管理高性能集群中节点之间通信的流行标准，并使用 NVIDIA 的 NCCL 库进行 GPU 级别的通信。当您将数据并行库与 TensorFlow 或 Pytorch 一起使用时`Estimator`，相应的容器会设置 MPI 环境并执行`mpirun`命令以在集群节点上启动作业。

您可以使用 `Estimator` 中的 `custom_mpi_options` 参数设置自定义 MPI 操作。在此字段中传递的所有`mpirun`标志都将添加到`mpirun`命令中，并由 SageMaker AI 执行以进行训练。例如，您可以通过以下方法定义 `Estimator` 的 `distribution` 参数，以使用 [https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug](https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug) 变量来在程序开始时打印 NCCL 版本：

```
distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}
```

## 使用 Amazon FSx 并设置最佳存储和吞吐容量
<a name="data-parallel-config-fxs"></a>

在具有分布式数据并行性的多个节点上训练模型时，强烈建议将其用[FSx 于](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html) Lustre。Amazon FSx 是一项可扩展的高性能存储服务，支持吞吐量更快的共享文件存储。大规模使用 Amazon FSx 存储，您可以更快地跨计算节点加载数据。

通常，对于分布式数据并行性，您会期望总训练吞吐量随数量的增加近线性扩展。 GPUs但是，如果您使用的是次优的 Amazon 存储，则由于 FSx 亚马逊吞吐量低，训练性能可能会降低。 FSx 

例如，如果您使用存储容量最低为 1. [**2 TiB 的 Amazon FSx 文件系统的 SCRATCH\$1** 2 部署](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf)类型，则吞吐容量为 240。 I/O MB/s. Amazon FSx storage works in a way that you can assign physical storage devices, and the more devices assigned, the larger throughput you get. The smallest storage increment for the SRATCH\$12 type is 1.2 TiB, and the corresponding throughput gain is 240 MB/s

假设您有一个模型，在 4 个节点的集群上对超过 100 GB 的数据集进行训练。对于针对集群进行了优化的给定批次大小，假设模型可以在大约 30 秒内完成一个纪元。在这种情况下，所需的最低 I/O 速度约为 3 GB/s （100 GB/30 秒）。这显然比 240 个MB/s. With such a limited Amazon FSx capacity, scaling your distributed training job up to larger clusters might aggravate I/O瓶颈问题要高得多的吞吐量；随着缓存的积累，模型训练吞吐量可能会在以后的时期有所提高，但是 Amazon FSx 吞吐量仍可能成为瓶颈。

为了缓解此类 I/O 瓶颈问题，您应该增加 Amazon FSx 存储大小以获得更高的吞吐容量。通常，为了找到最佳 I/O 吞吐量，您可以尝试使用不同的 Amazon FSx 吞吐量，分配的吞吐量等于或略低于您的估计值，直到您发现它足以解决 I/O 瓶颈问题。在上述示例中，具有2.4 GB/s 吞吐量和67 GB RAM缓存的Amazon FSx 存储空间就足够了。如果文件系统具有最佳吞吐量，则模型训练吞吐量应立即达到最大值，或者在第一个纪元之后建立了缓存时达到最大值。

要详细了解如何增加亚马逊 FSx 存储空间和部署类型，请参阅 A *ma FSx zon for Lustre 文档*中的以下页面：
+  [如何增加存储容量](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html#increase-storage-capacity) 
+  [聚合文件系统性能](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf) 