本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SageMaker Python SDK 故障排除指南
你可以使用 SageMaker Python 在 Python SDK 脚本或 Jupyter 笔记本 SageMaker 中与亚马逊互动。尽管SDK提供了简化的工作流程,但您可能会遇到各种异常或错误。本疑难解答指南旨在帮助您了解和解决使用 SageMaker Python 时可能出现的常见问题SDK。它涵盖了与创建训练作业、处理作业和端点相关的场景,以及一般的异常处理实践。通过遵循以下各节中提供的指导,您可以有效地诊断和解决常见问题。
P SageMaker ython SDK 充当低级 SageMaker API操作的封装器。您用于访问的IAM角色SDK必须能够访问底层操作。为你的IAM角色添加 SageMaker 完全访问策略是确保你有权使用 SageMaker Python 的最直接方法SDK。有关 SageMaker 完全访问策略的更多信息,请参阅 Amazon SageMaker 完全访问权限。
虽然不太方便,但提供更精细的权限是一种安全的使用方法。SDK以下各节都包含有关所需权限的信息。
创建 Training Job
重要
如果您没有向IAM角色添加 SageMaker 完全访问权限策略,则该策略必须具有调用CreateTrainingJob和DescribeTrainingJob操作的权限。
它还需要以下权限:
-
访问 S3 中的输入/输出数据
-
运行 Amazon EC2 实例
-
日志 CloudWatch 指标
如果您的 SageMaker 训练作业需要访问 Amazon Virtual Private Cloud (AmazonVPC) 中的资源,请务必在创建处理任务时配置必要的VPC设置和安全组。
在创建训练作业时,可能会遇到botocore.exceptions.ClientError
异ValueError
常。
更新 Training Job
重要
如果您未向IAM角色添加 SageMaker 托管策略,则必须向该角色授予以下权限:
-
s3:GetObject
— 提供从 Amazon S3 存储桶读取模型工件的权限 -
s3:PutObject
— 如果适用,则提供写入模型构件更新的权限 -
iam:GetRole
— 提供权限以获取有关运行训练作业所需的IAM角色的信息 -
sagemaker:UpdateTrainingJob
— 提供使用操作修改训练UpdateTrainingJob作业的权限。 -
logs:PutLogEvents
— 提供在更新过程中向 Amazon CloudWatch 日志写入日志的权限。
更新训练作业时,可能会遇到botocore.exceptions.ParamValidationError
或botocore.exceptions.ClientError
。
创建处理 Job
重要
如果您未向IAM角色添加 SageMaker 托管策略,则必须向该角色授予以下权限:
-
sagemaker:CreateProcessingJob
— 提供创建处理任务的权限 -
sagemaker:DescribeProcessingJob
— 提供获取有关处理任务信息的权限 -
s3:GetObject
— 提供从 Amazon S3 存储桶读取模型工件的权限 -
s3:PutObject
— 如果适用,则提供写入模型构件更新的权限 -
logs:PutLogEvents
— 提供在更新过程中向 Amazon CloudWatch 日志写入日志的权限。
如果您的处理任务需要访问 Amazon Virtual Private Cloud subnets
中的资源,则必须在您创建的估算器中指定其security_group_ids
和。有关如何访问 Amazon 内部资源的示例VPC,请参阅使用进行安全训练和推理
当你创建处理任务时,你可能会遇到 a ValueError
、a 或 a botocore.exceptions.ClientError
。UnexpectedStatusException
创建端点
重要
如果您未向IAM角色添加 SageMaker 托管策略,则必须向该角色授予以下权限:
-
sagemaker:CreateModel
— 提供创建要部署到端点的模型的权限 -
sagemaker:CreateEndpointConfig
— 提供创建终端节点配置的权限,该配置定义了终端节点的行为,例如实例类型和计数 -
sagemaker:CreateEndpoint
— 提供使用您指定的终端节点创建终端节点配置的权限
此外,您需要权限来描述和列出模型、端点和端点配置。
创建终端节点时,可能会遇到UnexpectedStatusException
或botocore.exceptions.ClientError
。
以下是一个示例UnexpectedStatusException
:
UnexpectedStatusException: Error hosting endpoint gpt2-large-2024-07-03-15-28-20-448: Failed. Reason: The primary container for production variant AllTraffic did not pass the ping health check. Please check CloudWatch logs for this endpoint.. Try changing the instance type or reference the troubleshooting page https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-troubleshooting.html
错误消息要求您查看 Amazon CloudWatch 日志。使用以下步骤检查日志。
查看日 CloudWatch 志
-
导航至 Amazon SageMaker 控制台
。 -
在左侧导航栏中,选择终端节点。
-
选择出现故障的端点。
-
在终端节点详细信息页面上,选择查看登录信息 CloudWatch。
找到日志后,请查找具体问题。以下是 CloudWatch 日志的示例:
NotImplementedError: gptq quantization is not supported for AutoModel, you can try to quantize it with text-generation-server quantize ORIGINAL_MODEL_ID NEW_MODEL_ID
有关解决问题的信息botocore.exceptions.ClientError
,请参阅异常处理指南。
更新终端节点
重要
如果您未向IAM角色添加 SageMaker 托管策略,则必须向该角色授予以下权限:
-
sagemaker:UpdateEndpoint
— 提供更新现有终端节点的权限,例如更改终端节点的实例类型或数量 -
sagemaker:UpdateEndpointWeightsAndCapacities
— 提供创建终端节点配置的权限,该配置定义了终端节点的行为,例如实例类型和计数 -
sagemaker:DescribeEndpoint
— 提供描述端点当前配置的权限,更新之前通常需要此配置
此外,您可能需要权限才能描述和列出终端节点和终端节点配置。
你可能会遇到一个ValueError
,如下所示:
ValueError: Endpoint with name 'abc' does not exist; please use an existing endpoint name
该错误表示指定的终端节点名称与您 AWS 账户中的任何现有终端节点都不匹配。使用以下步骤对错误进行故障排除:
对值错误进行故障排除
-
使用以下代码列出您的所有终端节点:
import sagemaker sagemaker_session = sagemaker.Session() # List all endpoints endpoints = sagemaker_session.sagemaker_client.list_endpoints() print(endpoints)
-
验证您为
update_endpoint
函数指定的端点是否在列表中。 -
请确保您在正确的 AWS 地区开展业务。 SageMaker 终端节点是特定于区域的。
-
确保您使用的IAM角色具有列出、描述或更新终端节点的权限。
异常处理指南
如果您找不到可帮助您解决特定问题的信息,则以下代码示例可以为您提供如何处理异常的灵感。
以下是一个通用示例,您可以使用它来捕获大多数异常。
import sagemaker from botocore.exceptions import ParamValidationError, ClientError try: sagemaker.some_api_call(SomeParam='some_param') except ClientError as error: # Put your error handling logic here raise error except ParamValidationError as error: raise ValueError('The parameters you provided are incorrect: {}'.format(error)) except ValueError as error: # Catch generic ValueError exceptions
错误主要分为两类:
-
特定于 SageMaker Python 的错误 SDK
-
底层 AWS 服务特有的错误
底层 AWS 服务特有的错误总是botocore.exceptions.ClientError
例外。botocore.exceptions.ClientError
有一个Error
对象和一个ResponseMetadata
对象。以下显示了客户端错误的模板:
{ 'Error': { 'Code': 'SomeServiceException', 'Message': 'Details/context around the exception or error' }, 'ResponseMetadata': { 'RequestId': '1234567890ABCDEF', 'HostId': 'host ID data will appear here as a hash', 'HTTPStatusCode': 400, 'HTTPHeaders': {'header metadata key/values will appear here'}, 'RetryAttempts': 0 } }
以下是您可以使用以下方法执行的特定错误处理示例botocore.exceptions.ClientError
:
try: sagemaker.some_api_call(SomeParam='some_param') except botocore.exceptions.ClientError as err: if err.response['Error']['Code'] == 'InternalError': # Generic error # We grab the message, request ID, and HTTP code to give to customer support print('Error Message: {}'.format(err.response['Error']['Message'])) print('Request ID: {}'.format(err.response['ResponseMetadata']['RequestId'])) print('Http code: {}'.format(err.response['ResponseMetadata']['HTTPStatusCode'])) raise err else if err.response['Error']['Code'] == 'ValidationException': raise ValueError(err.response['Error']['Message'])
有关如何处理ClientError
异常的更多信息,请参阅解析错误响应并从中 AWS 服务捕获异常