

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

# 管道步骤的重试策略
<a name="pipelines-retry-policy"></a>

重试策略可帮助您在发生错误后自动重试 Pipelines 步骤。任何管道步骤都可能遇到异常，而发生异常的原因多种多样。在某些情况下，重试可以解决这些问题。通过管道步骤的重试策略，您可以选择是否重试特定管道步骤。

重试策略仅支持以下管道步骤：
+ [处理步骤](build-and-manage-steps-types.md#step-type-processing) 
+ [训练步骤](build-and-manage-steps-types.md#step-type-training) 
+ [优化步骤](build-and-manage-steps-types.md#step-type-tuning) 
+ [AutoML 步骤](build-and-manage-steps-types.md#step-type-automl) 
+ [创建模型步骤](build-and-manage-steps-types.md#step-type-create-model) 
+ [注册模型步骤](build-and-manage-steps-types.md#step-type-register-model) 
+ [转换步骤](build-and-manage-steps-types.md#step-type-transform) 
+ [笔记本作业步骤](build-and-manage-steps-types.md#step-type-notebook-job) 

**注意**  
在优化步骤和 AutoML 步骤中运行的作业在内部进行重试，即使配置了重试策略，也不会重试 `SageMaker.JOB_INTERNAL_ERROR` 异常类型。您可以使用 SageMaker API [编写自己的重试策略](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RetryStrategy.html)。

## 重试策略支持的异常类型
<a name="pipelines-retry-policy-supported-exceptions"></a>

管道步骤的重试策略支持以下异常类型：
+ `Step.SERVICE_FAULT`：如果调用下游服务时发生内部服务器错误或瞬时错误，则会发生这些异常。Pipelines 会自动重试此类错误。使用重试策略，您可以覆盖此异常类型的默认重试操作。
+ `Step.THROTTLING`：调用下游服务时可能会出现节流异常。Pipelines 会自动重试此类错误。使用重试策略，您可以覆盖此异常类型的默认重试操作。
+ `SageMaker.JOB_INTERNAL_ERROR`：这些异常发生在 SageMaker AI 任务返回时`InternalServerError`。在这种情况下，启动新作业可能会解决暂时性问题。
+ `SageMaker.CAPACITY_ERROR`: SageMaker AI 作业可能会遇到 Amazon EC2`InsufficientCapacityErrors`，这会导致 SageMaker AI 任务失败。您可以通过启动新的 SageMaker AI 作业来重试，以避免出现此问题。
+ `SageMaker.RESOURCE_LIMIT`：运行 SageMaker AI 作业时，您可以超出资源限制配额。您可以稍等片刻，然后在短时间后重试运行 SageMaker AI 作业，看看资源是否已释放。

## 重试策略的 JSON 架构
<a name="pipelines-retry-policy-json-schema"></a>

管道的重试策略具有以下 JSON 架构：

```
"RetryPolicy": {
   "ExceptionType": [String]
   "IntervalSeconds": Integer
   "BackoffRate": Double
   "MaxAttempts": Integer
   "ExpireAfterMin": Integer
}
```
+ `ExceptionType`：此字段需要以下字符串数组格式的异常类型。
  + `Step.SERVICE_FAULT`
  + `Step.THROTTLING`
  + `SageMaker.JOB_INTERNAL_ERROR`
  + `SageMaker.CAPACITY_ERROR`
  + `SageMaker.RESOURCE_LIMIT`
+ `IntervalSeconds`（可选）：第一次重试前的秒数（默认为 1）。`IntervalSeconds` 的最大值为 43200 秒（12 小时）。
+ `BackoffRate`（可选）：每次尝试时重试间隔增加的乘数（默认为 2.0）。
+ `MaxAttempts`（可选）：一个正整数，表示重试的最大次数（默认为 5）。如果错误重复发生超过 `MaxAttempts` 指定次数，则停止重试并恢复正常错误处理。值为 0 表示永不重试错误。`MaxAttempts` 最大值为 20。
+ `ExpireAfterMin`（可选）：一个正整数，表示重试的最大时间跨度。如果在执行步骤的 `ExpireAfterMin` 分钟数后再次出现错误，则停止重试并恢复正常的错误处理。值为 0 表示永不重试错误。`ExpireAfterMin ` 的最大值为 14400 分钟（10 天）。
**注意**  
只能给出 `MaxAttempts` 或 `ExpireAfterMin` 中的一个，但不能同时给出两个；如果两者均*未* 指定，则 `MaxAttempts` 变为默认值。如果在一个策略中标识了这两个属性，则重试策略会生成验证错误。

# 配置重试策略
<a name="pipelines-configuring-retry-policy"></a>

虽然 SageMaker Pipelines 提供了一种强大的自动化方式来编排机器学习工作流程，但在运行它们时可能会遇到故障。为了从容应对此类情况并提高管道的可靠性，您可以配置重试策略，定义遇到异常后如何以及何时自动重试特定步骤。重试策略允许您指定重试的异常类型、重试尝试的最大次数、重试间隔以及增加重试间隔的回退率。以下部分提供了一些示例，说明如何使用 JSON 和使用 SageMaker Python SDK 为管道中的训练步骤配置重试策略。

以下是使用重试策略的训练步骤的示例。

```
{
    "Steps": [
        {
            "Name": "MyTrainingStep",
            "Type": "Training",
            "RetryPolicies": [
                {
                    "ExceptionType": [
                        "SageMaker.JOB_INTERNAL_ERROR",
                        "SageMaker.CAPACITY_ERROR"
                    ],
                    "IntervalSeconds": 1,
                    "BackoffRate": 2,
                    "MaxAttempts": 5
                }
            ]
        }
    ]
}
```



以下示例说明如何使用重试策略在 SDK for Python (Boto3) 中构建 `TrainingStep`。

```
from sagemaker.workflow.retry import (
    StepRetryPolicy, 
    StepExceptionTypeEnum,
    SageMakerJobExceptionTypeEnum,
    SageMakerJobStepRetryPolicy
)

step_train = TrainingStep(
    name="MyTrainingStep",
    xxx,
    retry_policies=[
        // override the default 
        StepRetryPolicy(
            exception_types=[
                StepExceptionTypeEnum.SERVICE_FAULT, 
                StepExceptionTypeEnum.THROTTLING
            ],
            expire_after_mins=5,
            interval_seconds=10,
            backoff_rate=2.0 
        ),
        // retry when resource limit quota gets exceeded
        SageMakerJobStepRetryPolicy(
            exception_types=[SageMakerJobExceptionTypeEnum.RESOURCE_LIMIT],
            expire_after_mins=120,
            interval_seconds=60,
            backoff_rate=2.0
        ),
        // retry when job failed due to transient error or EC2 ICE.
        SageMakerJobStepRetryPolicy(
            failure_reason_types=[
                SageMakerJobExceptionTypeEnum.INTERNAL_ERROR,
                SageMakerJobExceptionTypeEnum.CAPACITY_ERROR,
            ],
            max_attempts=10,
            interval_seconds=30,
            backoff_rate=2.0
        )
    ]
)
```

有关为某些步骤类型配置重试行为的更多信息，请参阅 *[Amazon Python SDK 文档中的 Amaz SageMaker on Pipelin SageMaker es-重试政策](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#retry-policy)*。