

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

# 扩展训练
<a name="distributed-training-scenarios"></a>

以下各节介绍了您可能想要扩大训练规模的场景，以及如何使用 AWS 资源来扩大训练规模。在以下情况中，您可能需要扩展训练：
+ 从单个 GPU 扩展到多个 GPU
+ 从单个实例扩展到多个实例
+ 使用自定义训练脚本

## 从单个 GPU 扩展到多个 GPU
<a name="scaling-from-one-GPU"></a>

根据机器学习中使用的数据量或模型的大小，可能会出现训练模型的时间超过您愿意等待的时间的情况。有时，由于模型或训练数据太大，训练可能完全无法正常工作。这种情况的解决方案之一是增加用于训练的 GPU 数量。在具有多个 GPU 的实例上，例如具有八个 GPU 的 `p3.16xlarge`，数据和处理会在八个 GPU 之间拆分。当您使用分布式训练库时，这可以为您训练模型所用的时间带来近乎线性的加速。它 1/8 所花费的时间略高于`p3.2xlarge`使用一个 GPU 所花费的时间。


|  实例类型  |  GPU  | 
| --- | --- | 
|  p3.2xlarge  |  1  | 
|  p3.8xlarge  |  4  | 
|  p3.16xlarge  |  8  | 
|  p3dn.24xlarge  |  8  | 

**注意**  
 SageMaker 训练使用的 ml 实例类型与相应的 p3 实例类型具有相同数量的 GPU。例如，`ml.p3.8xlarge` 具有与 `p3.8xlarge` 相同的 4 个 GPU。

## 从单个实例扩展到多个实例
<a name="scaling-from-one-instance"></a>

如果您想进一步扩展训练，则可以使用更多的实例。但是，您应先考虑选择更大的实例类型，然后再考虑添加更多实例。查看上表以了解每种 p3 实例类型中有多少个 GPU。

当您已经从 `p3.2xlarge` 上的 1 个 GPU 提升到 `p3.8xlarge` 上的 4 个 GPU，但是还需要更多的处理能力时，在增加实例数量之前，如果您选择 `p3.16xlarge`，则可能会发现可以获得更好的性能并且产生的成本更低。根据您使用的库，保持在单个实例上进行训练时，相比使用多个实例的场景性能会更好，成本也更低。

当您准备好扩展实例数量时，您可以通过设置 SageMaker AI Python SDK `estimator` 功能来实现此目的`instance_count`。例如，您可以创建 `instance_type = p3.16xlarge` 和 `instance_count = 2`。您现在不是使用单个 `p3.16xlarge` 上的 8 个 GPU，而是使用 2 个相同实例上的 16 个 GPU。下图显示了[扩展和吞吐量的变化](https://aws.amazon.com/blogs/machine-learning/scalable-multi-node-training-with-tensorflow/)，从单个实例上的 8 个 GPU 开始，增加到 64 个实例，总共 256 个 GPU。

 ![Chart showing how throughput increases and time to train decreases with more GPUs.](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/distributed/Distributed-Training-in-SageMaker-image.png) 

## 自定义训练脚本
<a name="custom-training-scripts"></a>

尽管 SageMaker AI 可以轻松部署和扩展实例和 GPU 的数量，但根据您选择的框架，管理数据和结果可能非常困难，这就是经常使用外部支持库的原因。 这种最基本的分布式训练形式需要修改您的训练脚本来管理数据分布。

SageMaker 人工智能还支持 Horovod 和每个主要深度学习框架原生的分布式训练的实现。如果您选择使用这些框架中的示例，则可以按照 SageMaker AI 的 Deep Learning Containers 容器[指南](https://docs.aws.amazon.com/sagemaker/latest/dg/docker-containers.html)以及演示实现的各种[示例笔记本](https://sagemaker-examples.readthedocs.io/en/latest/training/bring_your_own_container.html)进行操作。