管道步骤的重试策略
重试策略可帮助您在错误发生后自动重试 SageMaker Pipelines 步骤。任何管道步骤都可能遇到异常,而发生异常的原因多种多样。在某些情况下,重试可以解决这些问题。通过管道步骤的重试策略,您可以选择是否重试特定管道步骤。
重试策略仅支持以下管道步骤:
注意
在优化步骤和 AutoML 步骤中运行的作业在内部进行重试,即使配置了重试策略,也不会重试 SageMaker.JOB_INTERNAL_ERROR
异常类型。您可以使用 SageMaker API 来编程自己的重试策略。
重试策略支持的异常类型
管道步骤的重试策略支持以下异常类型:
-
Step.SERVICE_FAULT
:如果调用下游服务时发生内部服务器错误或瞬时错误,则会发生这些异常。发生此类错误时,SageMaker Pipelines 会自动重试。使用重试策略,您可以覆盖此异常类型的默认重试操作。 -
Step.THROTTLING
:调用下游服务时可能会出现节流异常。发生此类错误时,SageMaker Pipelines 会自动重试。使用重试策略,您可以覆盖此异常类型的默认重试操作。 -
SageMaker.JOB_INTERNAL_ERROR
:当 SageMaker 作业返回InternalServerError
时会发生这些异常。在这种情况下,启动新作业可能会解决暂时性问题。 -
SageMaker.CAPACITY_ERROR
:SageMaker 作业可能会遇到 Amazon EC2InsufficientCapacityErrors
,这会导致 SageMaker 作业失败。您可以通过启动新的 SageMaker 作业来重试,以避免出现此问题。 -
SageMaker.RESOURCE_LIMIT
:运行 SageMaker 作业时,可以超出资源限制配额。您可以在等待片刻后重新尝试运行 SageMaker 作业,看看是否释放了资源。
重试策略的 JSON 架构
管道的重试策略具有以下 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
变为默认值。如果在一个策略中标识了这两个属性,则重试策略会生成验证错误。
配置重试策略
以下是使用重试策略的训练步骤的示例。
{ "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 SageMaker Python SDK 文档中的 Amazon SageMaker 建模管线 - 重试策略