翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker Python SDKトラブルシューティングガイド
SageMaker Python を使用してSDK、Python スクリプトまたは Jupyter ノートブック SageMaker 内で Amazon とやり取りできます。ワークフローが簡素化SDKされているにもかかわらず、さまざまな例外やエラーが発生する可能性があります。このトラブルシューティングガイドは、 SageMaker Python の使用時に発生する可能性のある一般的な問題を理解し、解決するのに役立ちますSDK。ここでは、トレーニングジョブの作成、ジョブとエンドポイントの処理、および一般的な例外処理に関するシナリオについて説明します。以下のセクションで説明するガイダンスに従うことで、一般的な問題を効果的に診断し、対処できます。
SageMaker Python SDKは、低レベル SageMaker APIオペレーションのラッパーとして機能します。へのアクセスに使用するIAMロールは、基盤となるオペレーションにアクセスできるSDK必要があります。IAM ロールに SageMaker フルアクセスポリシーを追加するのは、 SageMaker Python を使用するアクセス許可があることを確認する最も簡単な方法ですSDK。 SageMaker フルアクセスポリシーの詳細については、「Amazon SageMaker フルアクセス」を参照してください。
利便性は低いものの、より詳細なアクセス許可を提供することは、 を使用するための安全なアプローチですSDK。以下の各セクションには、必要なアクセス許可に関する情報が記載されています。
トレーニングジョブを作成する
重要
SageMaker フルアクセスポリシーをIAMロールに追加しない場合は、 CreateTrainingJobおよび DescribeTrainingJobオペレーションを呼び出すアクセス許可が必要です。
また、以下のアクセス許可も必要です。
-
S3 の入力/出力データにアクセスする
-
Amazon EC2インスタンスを実行する
-
ログ CloudWatch メトリクス
SageMaker トレーニングジョブが Amazon Virtual Private Cloud (Amazon VPC) 内のリソースにアクセスする必要がある場合は、処理ジョブを作成するときに必要なVPC設定とセキュリティグループを設定してください。
トレーニングジョブを作成するときは、 botocore.exceptions.ClientError
または ValueError
例外に実行されます。
トレーニングジョブを更新する
重要
SageMaker 管理ポリシーをIAMロールに追加しない場合は、ロールに次のアクセス許可へのアクセスを許可する必要があります。
-
s3:GetObject
— Amazon S3 バケットからモデルアーティファクトを読み取るアクセス許可を付与します -
s3:PutObject
– 該当する場合、モデルアーティファクトに更新を書き込むアクセス許可を付与します -
iam:GetRole
– トレーニングジョブの実行に必要なIAMロールに関する情報を取得するアクセス許可を提供します。 -
sagemaker:UpdateTrainingJob
– UpdateTrainingJobオペレーションを使用してトレーニングジョブを変更するアクセス許可を提供します。 -
logs:PutLogEvents
– 更新プロセス中に Amazon CloudWatch ログにログを書き込むアクセス許可を提供します。
トレーニングジョブを更新すると、 botocore.exceptions.ParamValidationError
または に実行されますbotocore.exceptions.ClientError
。
処理ジョブを作成する
重要
SageMaker 管理ポリシーをIAMロールに追加しない場合は、ロールに次のアクセス許可へのアクセスを許可する必要があります。
-
sagemaker:CreateProcessingJob
– 処理ジョブを作成するアクセス許可を提供します -
sagemaker:DescribeProcessingJob
– 処理ジョブに関する情報を取得するアクセス許可を提供します。 -
s3:GetObject
— Amazon S3 バケットからモデルアーティファクトを読み取るアクセス許可を付与します -
s3:PutObject
– 該当する場合、モデルアーティファクトに更新を書き込むアクセス許可を付与します -
logs:PutLogEvents
– 更新プロセス中に Amazon CloudWatch ログにログを書き込むアクセス許可を提供します。
処理ジョブが Amazon Virtual Private Cloud 内のリソースにアクセスする必要がある場合は、作成する推定器subnets
内で security_group_ids
と を指定する必要があります。Amazon 内のリソースにアクセスする方法の例についてはVPC、「 を使用したセキュアトレーニングと推論VPC
処理ジョブを作成するときは、ValueError
、、UnexpectedStatusException
または で実行できますbotocore.exceptions.ClientError
。
エンドポイントの作成
重要
SageMaker 管理ポリシーをIAMロールに追加しない場合は、ロールに次のアクセス許可へのアクセスを許可する必要があります。
-
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
、「」を参照してください例外処理に関するガイダンス。
エンドポイントを更新する
重要
SageMaker 管理ポリシーをIAMロールに追加しない場合は、ロールに次のアクセス許可へのアクセスを許可する必要があります。
-
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 Region. SageMaker endpoints で操作していることを確認します。
-
使用している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
エラーには主に 2 つのカテゴリがあります。
-
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 のサービス