

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

# 使用 PyTorch 训练编译器运行 SageMaker 训练作业
使用 PyTorch 训练编译器运行训练作业

您可以使用任何 SageMaker AI 接口通过 Training Compiler 运行训练作业：Amazon SageMaker Studio Classic 适用于 Python (Boto3) 的 AWS SDK、Amazon SageMaker 笔记本实例和 AWS Command Line Interface。 SageMaker 

**Topics**
+ [

## 使用 SageMaker Python 开发工具包
](#training-compiler-enable-pytorch-pysdk)
+ [

## 使用 SageMaker AI `CreateTrainingJob` API 操作
](#training-compiler-enable-pytorch-api)

## 使用 SageMaker Python 开发工具包
了解如何使用 SageMaker Python 软件开发工具包激活 SageMaker 训练编译器。

SageMaker 训练编译器 PyTorch 可通过 SageMaker AI [https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html)和[https://sagemaker.readthedocs.io/en/stable/frameworks/huggingface/sagemaker.huggingface.html#hugging-face-estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/huggingface/sagemaker.huggingface.html#hugging-face-estimator)框架估算器类获得。要打开 SageMaker 训练编译器，请将`compiler_config`参数添加到 SageMaker AI 估计器中。导入 `TrainingCompilerConfig` 类，并将它的一个实例传递给 `compiler_config` 参数。以下代码示例显示了开启 SageMaker 训练编译器的 SageMaker AI 估算器类的结构。

**提示**  
要开始使用 PyTorch 或《变形金刚》提供的预建模型，请尝试使用参考表中提供的批次大小，网址为[经过测试的模型](training-compiler-support.md#training-compiler-tested-models)。

**注意**  
原生 PyTorch 支持在 SageMaker Python SDK v2.121.0 及更高版本中可用。请务必相应地更新 SageMaker Python 开发工具包。

**注意**  
从 PyTorch v1.12.0 开始，“ SageMaker 训练编译器” 容器可用。 PyTorch 请注意，的 SageMaker 训练编译器容器未预先打包 Hu PyTorch gging Face Transformers。如果您需要在容器中安装库，请务必在提交训练作业时将 `requirements.txt` 文件添加到源目录下。  
对于 PyTorch v1.11.0 及更早版本，请使用之前版本的 Hugging Face 和 T SageMaker raining Compiler 容器。 PyTorch  
有关框架版本和相应容器信息的完整列表，请参阅[支持的框架](training-compiler-support.md#training-compiler-supported-frameworks)。

有关适合您的使用案例的信息，请参阅下列选项之一。

### 对于单个 GPU 训练


------
#### [ PyTorch v1.12.0 and later ]

要编译和训练 PyTorch 模型，请使用 SageMaker 训练编译器配置 A SageMaker I PyTorch 估算器，如以下代码示例所示。

**注意**  
这种原生 PyTorch 支持在 SageMaker AI Python SDK v2.120.0 及更高版本中可用。请务必更新 SageMaker AI Python 软件开发工具包。

```
from sagemaker.pytorch import PyTorch, TrainingCompilerConfig

# the original max batch size that can fit into GPU memory without compiler
batch_size_native=12
learning_rate_native=float('5e-5')

# an updated max batch size that can fit into GPU memory with compiler
batch_size=64

# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size

hyperparameters={
    "n_gpus": 1,
    "batch_size": batch_size,
    "learning_rate": learning_rate
}

pytorch_estimator=PyTorch(
    entry_point='train.py',
    source_dir='path-to-requirements-file', # Optional. Add this if need to install additional packages.
    instance_count=1,
    instance_type='ml.p3.2xlarge',
    framework_version='1.13.1',
    py_version='py3',
    hyperparameters=hyperparameters,
    compiler_config=TrainingCompilerConfig(),
    disable_profiler=True,
    debugger_hook_config=False
)

pytorch_estimator.fit()
```

------
#### [ Hugging Face Transformers with PyTorch v1.11.0 and before ]

要使用编译和训练转换器模型 PyTorch，请使用训练编译器配置 A SageMaker I Hugging Face 估计器 SageMaker ，如以下代码示例所示。

```
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig

# the original max batch size that can fit into GPU memory without compiler
batch_size_native=12
learning_rate_native=float('5e-5')

# an updated max batch size that can fit into GPU memory with compiler
batch_size=64

# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size

hyperparameters={
    "n_gpus": 1,
    "batch_size": batch_size,
    "learning_rate": learning_rate
}

pytorch_huggingface_estimator=HuggingFace(
    entry_point='train.py',
    instance_count=1,
    instance_type='ml.p3.2xlarge',
    transformers_version='4.21.1',
    pytorch_version='1.11.0',
    hyperparameters=hyperparameters,
    compiler_config=TrainingCompilerConfig(),
    disable_profiler=True,
    debugger_hook_config=False
)

pytorch_huggingface_estimator.fit()
```

要准备训练脚本，请参阅以下页面。
+ [对于单个 GPU 训练](training-compiler-pytorch-models.md#training-compiler-pytorch-models-transformers-trainer-single-gpu)使用 Hugging Face Transformers 训练[器](https://huggingface.co/docs/transformers/main_classes/trainer) API 的 PyTorch 模型
+ [对于单个 GPU 训练](training-compiler-pytorch-models.md#training-compiler-pytorch-models-non-trainer-single-gpu)[没有 Hugging Face Transformers Trainer API 的 PyTorch 模型](https://huggingface.co/transformers/main_classes/trainer.html)

要查找 end-to-end示例，请参阅以下笔记本：
+ [使用 AD 数据集编译和训练 Hugging Face Transformers 训练器模型进行 SQu问答](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-training-compiler/huggingface/pytorch_single_gpu_single_node/albert-base-v2/albert-base-v2.html) 
+ [使用训练编译`BERT`器使用 SST 数据集 SageMaker 编译和训练 Hugging Face Transformer 模型](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-training-compiler/huggingface/pytorch_single_gpu_single_node/bert-base-cased/bert-base-cased-single-node-single-gpu.html) 
+ [使用 SST2 数据集编译和训练二元分类训练器模型，用于单节点单 GPU 训练](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-training-compiler/huggingface/pytorch_single_gpu_single_node/roberta-base/roberta-base.html)

------

### 对于分布式训练


------
#### [ PyTorch v1.12 ]

对于 PyTorch v1.12，您可以通过在 SageMaker AI PyTorch 估算器类的`distribution`参数中添加指定的`pytorch_xla`选项，使用 SageMaker 训练编译器运行分布式训练。

**注意**  
这种原生 PyTorch 支持在 SageMaker AI Python SDK v2.121.0 及更高版本中可用。请务必更新 SageMaker AI Python 软件开发工具包。

```
from sagemaker.pytorch import PyTorch, TrainingCompilerConfig

# choose an instance type, specify the number of instances you want to use,
# and set the num_gpus variable the number of GPUs per instance.
instance_count=1
instance_type='ml.p3.8xlarge'
num_gpus=4

# the original max batch size that can fit to GPU memory without compiler
batch_size_native=16
learning_rate_native=float('5e-5')

# an updated max batch size that can fit to GPU memory with compiler
batch_size=26

# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count

hyperparameters={
    "n_gpus": num_gpus,
    "batch_size": batch_size,
    "learning_rate": learning_rate
}

pytorch_estimator=PyTorch(
    entry_point='your_training_script.py',
    source_dir='path-to-requirements-file', # Optional. Add this if need to install additional packages.
    instance_count=instance_count,
    instance_type=instance_type,
    framework_version='1.13.1',
    py_version='py3',
    hyperparameters=hyperparameters,
    compiler_config=TrainingCompilerConfig(),
    distribution ={'pytorchxla' : { 'enabled': True }},
    disable_profiler=True,
    debugger_hook_config=False
)

pytorch_estimator.fit()
```

**提示**  
要准备训练脚本，请参阅 [PyTorch](training-compiler-pytorch-models.md)

------
#### [ Transformers v4.21 with PyTorch v1.11 ]

 PyTorch 在 v1.11 及更高版本中， SageMaker 训练编译器可用于分布式训练，参数中指定了`pytorch_xla``distribution`选项。

```
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig

# choose an instance type, specify the number of instances you want to use,
# and set the num_gpus variable the number of GPUs per instance.
instance_count=1
instance_type='ml.p3.8xlarge'
num_gpus=4

# the original max batch size that can fit to GPU memory without compiler
batch_size_native=16
learning_rate_native=float('5e-5')

# an updated max batch size that can fit to GPU memory with compiler
batch_size=26

# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count

hyperparameters={
    "n_gpus": num_gpus,
    "batch_size": batch_size,
    "learning_rate": learning_rate
}

pytorch_huggingface_estimator=HuggingFace(
    entry_point='your_training_script.py',
    instance_count=instance_count,
    instance_type=instance_type,
    transformers_version='4.21.1',
    pytorch_version='1.11.0',
    hyperparameters=hyperparameters,
    compiler_config=TrainingCompilerConfig(),
    distribution ={'pytorchxla' : { 'enabled': True }},
    disable_profiler=True,
    debugger_hook_config=False
)

pytorch_huggingface_estimator.fit()
```

**提示**  
要准备训练脚本，请参阅以下页面。  
[对于分布式训练](training-compiler-pytorch-models.md#training-compiler-pytorch-models-transformers-trainer-distributed)使用 Hugging Face Transformers 训练[器](https://huggingface.co/transformers/main_classes/trainer.html) API 的 PyTorch 模型
[对于分布式训练](training-compiler-pytorch-models.md#training-compiler-pytorch-models-non-trainer-distributed)[没有 Hugging Face Transformers Trainer API 的 PyTorch 模型](https://huggingface.co/transformers/main_classes/trainer.html)

------
#### [ Transformers v4.17 with PyTorch v1.10.2 and before ]

对于支持的 PyTorch v1.10.2 及更早版本，Training Compiler 需要另一种机制来启动分布式 SageMaker 训练作业。要运行分布式训 SageMaker 练，Training Compiler 要求您将 SageMaker AI 分布式训练启动器脚本传递给`entry_point`参数，并将训练脚本传递给`hyperparameters`参数。以下代码示例显示了如何配置应用所需更改的 A SageMaker I Hugging Face 估算器。

```
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig

# choose an instance type, specify the number of instances you want to use,
# and set the num_gpus variable the number of GPUs per instance.
instance_count=1
instance_type='ml.p3.8xlarge'
num_gpus=4

# the original max batch size that can fit to GPU memory without compiler
batch_size_native=16
learning_rate_native=float('5e-5')

# an updated max batch size that can fit to GPU memory with compiler
batch_size=26

# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count

training_script="your_training_script.py"

hyperparameters={
    "n_gpus": num_gpus,
    "batch_size": batch_size,
    "learning_rate": learning_rate,
    "training_script": training_script     # Specify the file name of your training script.
}

pytorch_huggingface_estimator=HuggingFace(
    entry_point='distributed_training_launcher.py',    # Specify the distributed training launcher script.
    instance_count=instance_count,
    instance_type=instance_type,
    transformers_version='4.17.0',
    pytorch_version='1.10.2',
    hyperparameters=hyperparameters,
    compiler_config=TrainingCompilerConfig(),
    disable_profiler=True,
    debugger_hook_config=False
)

pytorch_huggingface_estimator.fit()
```

启动器脚本应如下所示。它包装训练脚本，并根据所选训练实例的大小配置分布式训练环境。

```
# distributed_training_launcher.py

#!/bin/python

import subprocess
import sys

if __name__ == "__main__":
    arguments_command = " ".join([arg for arg in sys.argv[1:]])
    """
    The following line takes care of setting up an inter-node communication
    as well as managing intra-node workers for each GPU.
    """
    subprocess.check_call("python -m torch_xla.distributed.sm_dist " + arguments_command, shell=True)
```

**提示**  
要准备训练脚本，请参阅以下页面。  
[对于分布式训练](training-compiler-pytorch-models.md#training-compiler-pytorch-models-transformers-trainer-distributed)使用 Hugging Face Transformers 训练[器](https://huggingface.co/transformers/main_classes/trainer.html) API 的 PyTorch 模型
[对于分布式训练](training-compiler-pytorch-models.md#training-compiler-pytorch-models-non-trainer-distributed)[没有 Hugging Face Transformers Trainer API 的 PyTorch 模型](https://huggingface.co/transformers/main_classes/trainer.html)

**提示**  
要查找 end-to-end示例，请参阅以下笔记本：  
[使用 Transformers Trainer API 以及用于单节点多 GPU 训练 SST2 的数据集编译和训练 GPT2 模型](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-training-compiler/huggingface/pytorch_multiple_gpu_single_node/language-modeling-multi-gpu-single-node.html)
[使用 Transformers Trainer API 以及用于多节点多 GPU 训练 SST2 的数据集编译和训练 GPT2 模型](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-training-compiler/huggingface/pytorch_multiple_gpu_multiple_node/language-modeling-multi-gpu-multi-node.html)

------

以下列表是使用编译器运行 SageMaker 训练作业所需的最少参数集。

**注意**  
使用 SageMaker AI Hugging Face 估算器时，必须指定`transformers_version`、`pytorch_version``hyperparameters`、`compiler_config`和参数才能 SageMaker 启用 Training Compiler。您无法使用 `image_uri` 手动指定集成了 [支持的框架](training-compiler-support.md#training-compiler-supported-frameworks) 上列出的深度学习容器的 Training Compiler。
+ `entry_point` (str) – 必需。指定训练脚本的文件名。
**注意**  
要使用 Training Compiler 和 PyTorch v1.10.2 及更低版本运行分布式 SageMaker 训练，请为此参数指定启动器脚本的文件名。启动器脚本应已准备好，以便包装您的训练脚本并配置分布式训练环境。有关更多信息，请参阅以下示例笔记本：  
[使用 Transformers Trainer API 以及用于单节点多 GPU 训练 SST2 的数据集编译和训练 GPT2 模型](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-training-compiler/huggingface/pytorch_multiple_gpu_single_node/language-modeling-multi-gpu-single-node.html)
[使用 Transformers Trainer API 以及用于多节点多 GPU 训练 SST2 的数据集编译和训练 GPT2 模型](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-training-compiler/huggingface/pytorch_multiple_gpu_multiple_node/language-modeling-multi-gpu-multi-node.html)
+ `source_dir` (str) – 可选。如果需要安装其他包，请添加此项。要安装包，您需要在此目录下准备一个 `requirements.txt` 文件。
+ `instance_count` (int) – 必需。指定实例数。
+ `instance_type` (str) – 必需。指定实例类型。
+ `transformers_version`(str) — 仅在使用 SageMaker AI Hugging Face 估算器时才需要。指定训练编译器支持 SageMaker 的 Hugging Face 变形金刚库版本。要查找可用版本，请参阅 [支持的框架](training-compiler-support.md#training-compiler-supported-frameworks)。
+ `framework_version` 或 `pytorch_version` (str) – 必需。指定 SageMaker 训练编译器支持的 PyTorch 版本。要查找可用版本，请参阅 [支持的框架](training-compiler-support.md#training-compiler-supported-frameworks)。
**注意**  
使用 SageMaker AI Hugging Face 估计器时，必须同时指定和。`transformers_version` `pytorch_version`
+ `hyperparameters` (dict) – 可选。为训练作业指定超参数，例如 `n_gpus`、`batch_size` 和 `learning_rate`。启用 T SageMaker raining Compiler 后，请尝试更大的批量大小并相应地调整学习率。要查找有关使用编译器和调整的批处理大小以提高训练速度的案例研究，请参阅[经过测试的模型](training-compiler-support.md#training-compiler-tested-models)和[SageMaker 训练编译器示例笔记本和博客](training-compiler-examples-and-blogs.md)。
**注意**  
要使用 SageMaker Training Compiler 和 PyTorch v1.10.2 及更低版本运行分布式训练`"training_script"`，您需要添加其他参数来指定您的训练脚本，如前面的代码示例所示。
+ `compiler_config`（TrainingCompilerConfig 对象）-激活 SageMaker 训练编译器所必需的。添加此参数可开启 SageMaker 训练编译器。下面是 `TrainingCompilerConfig` 类的参数。
  + `enabled` (bool) – 可选。指定`True`或`False`以打开或关闭 SageMaker 训练编译器。默认值为 `True`。
  + `debug` (bool) – 可选。要从编译器加速的训练作业中接收更详细的训练日志，请将此项更改为 `True`。但是，额外的日志记录可能会增加开销并减缓编译后的训练作业。默认值为 `False`。
+ `distribution` (dict) – 可选。要使用训练编译器运行分布式 SageMaker 训练作业，请添加`distribution = { 'pytorchxla' : { 'enabled': True }}`。

**警告**  
如果您打开 SageMaker 调试器，可能会影响 SageMaker 训练编译器的性能。我们建议您在运行 SageMaker Training Compiler 时关闭调试器，以确保不会对性能产生影响。有关更多信息，请参阅 [注意事项](training-compiler-tips-pitfalls.md#training-compiler-tips-pitfalls-considerations)。要关闭 Debugger 功能，请向估算器添加以下两个参数：  

```
disable_profiler=True,
debugger_hook_config=False
```

如果使用编译器成功启动训练作业，则在作业初始化阶段将收到以下日志：
+ 与 `TrainingCompilerConfig(debug=False)`

  ```
  Found configuration for Training Compiler
  Configuring SM Training Compiler...
  ```
+ 与 `TrainingCompilerConfig(debug=True)`

  ```
  Found configuration for Training Compiler
  Configuring SM Training Compiler...
  Training Compiler set to debug mode
  ```

## 使用 SageMaker AI `CreateTrainingJob` API 操作
了解如何使用 SageMaker A `CreateTrainingJob` I API 操作激活 SageMaker 训练编译器。

SageMaker 必须通过 [`CreateTrainingJob`API 操作](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)的请求语法中的`AlgorithmSpecification`和`HyperParameters`字段指定训练编译器配置选项。

```
"AlgorithmSpecification": {
    "TrainingImage": "<sagemaker-training-compiler-enabled-dlc-image>"
},

"HyperParameters": {
    "sagemaker_training_compiler_enabled": "true",
    "sagemaker_training_compiler_debug_mode": "false",
    "sagemaker_pytorch_xla_multi_worker_enabled": "false"    // set to "true" for distributed training
}
```

要查找已 SageMaker 实现 Training Compiler 的深度学习容器镜像 URIs 的完整列表，请参阅[支持的框架](training-compiler-support.md#training-compiler-supported-frameworks)。