SageMaker Python SDKトラブルシューティングガイド - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 例外に実行されます。

ValueError

ValueError 例外は、関数に渡される値またはパラメータに問題がある場合に発生します。次のリストを使用して、ValueError例外の例と修正方法を確認します。

  • ValueError: either image_uri or algorithm_arn is required. None was provided:

    • AlgorithmEstimator 関数を使用している場合は、 を指定しますalgorithm_arn

    • Estimator 関数を使用している場合は、 を指定しますestimator_arn

  • ValueError: Unknown input channel: train is not supported by: scikit-decision-trees-15423055-57b73412d2e93e9239e4e16f83298b8f

    このエラーは、無効な入力チャネルを指定すると発生します。入力チャネルは、モデルが期待するデータソースまたはパラメータです。

    アルゴリズムのタイプ ページで、モデルに移動して、モデルの入力チャネルに関する情報を検索できます。

    入力チャネルに関する情報は、アルゴリズムの AWS Marketplace ページの使用状況セクションでも確認できます。

    アルゴリズムの入力チャネルに関する情報を取得するには、次の手順に従います。

    アルゴリズムの入力チャネルに関する情報を取得するには
    1. SageMaker コンソール に移動します。

    2. 左側のナビゲーションで、[トレーニング] を選択します。

    3. アルゴリズム を選択します。

    4. アルゴリズムの検索 を選択します。

    5. アルゴリズムを結果のリストで検索します。

    6. Usage タブを選択します。

    7. Channel 仕様の見出しに移動します。

botocore.exceptions.ClientError

botocore.exceptions.ClientError 例外は、基盤となる AWS サービスが例外をスローしたときに発生します。これは、パラメータの誤り、アクセス許可の問題、リソースの制約など、さまざまな原因による可能性があります。botocore.exceptions.ClientError 例外のコンテキストと、その修正方法については、次のリストを参照してください。

  • ResourceLimitExceeded – AWS アカウントは、トレーニングジョブの実行に必要な Amazon EC2インスタンスにアクセスできません。アクセスするには、クォータの引き上げをリクエストします。クォータの増加については、Service Quotas」を参照してください。botocore.exceptions.ClientError 例外については、次のリストを参照してください。

  • ValidationException – 検証例外は、トレーニングジョブに間違った Amazon EC2インスタンスタイプを使用した場合に発生します。また、使用しているIAMロールにトレーニングジョブのアクセス許可がない場合にも表示されます。

トレーニングジョブを更新する

重要

SageMaker 管理ポリシーをIAMロールに追加しない場合は、ロールに次のアクセス許可へのアクセスを許可する必要があります。

  • s3:GetObject — Amazon S3 バケットからモデルアーティファクトを読み取るアクセス許可を付与します

  • s3:PutObject – 該当する場合、モデルアーティファクトに更新を書き込むアクセス許可を付与します

  • iam:GetRole – トレーニングジョブの実行に必要なIAMロールに関する情報を取得するアクセス許可を提供します。

  • sagemaker:UpdateTrainingJobUpdateTrainingJobオペレーションを使用してトレーニングジョブを変更するアクセス許可を提供します。

  • logs:PutLogEvents – 更新プロセス中に Amazon CloudWatch ログにログを書き込むアクセス許可を提供します。

トレーニングジョブを更新すると、 botocore.exceptions.ParamValidationErrorまたは に実行されますbotocore.exceptions.ClientError

botocore.exceptions.ClientError

ClientError には次のメッセージが表示されます。

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateTrainingJob operation: Invalid UpdateTrainingJobRequest, the request cannot be empty

このエラーが発生した場合は、トレーニングジョブの名前とともに、次のいずれかのパラメータを含める必要があります。

  • profiler_rule_configs (リスト) – プロファイラールール設定のリスト。デフォルトでは、プロファイラールール設定はありません。

  • profiler_config (dict) – Profiler の設定 SageMakerはメトリクスを収集して送信します。デフォルトでは、プロファイラー設定はありません。

  • resource_config (dict) – トレーニングジョブリソースの設定。ウォームプールのステータスが の場合、キープアライブ期間を更新できますAvailable。他のフィールドは更新できません。

  • remote_debug_config (dict) – の設定RemoteDebug。ディクショナリには EnableRemoteDebug(bool) を含めることができます。

botocore.exceptions.ParamValidationError

botocore.exceptions.ParamValidationError には次のエラーがあります。

botocore.exceptions.ParamValidationError: Parameter validation failed: Invalid type for parameter ProfilerRuleConfigurations, value: {'DisableProfiler': False}, type: <class 'dict'>, valid types: <class 'list'>, <class 'tuple'>

この例外は、 パラメータがupdate_training_job関数によって期待される形式で指定されていない場合に発生する可能性があります。例えば、 profiler_rule_configsパラメータはリストであると想定します。代わりに パラメータをディクショナリとして渡すと、エラーが発生します。

処理ジョブを作成する

重要

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

ValueError

次は、ValueError の例です。

ValueError: code preprocess.py wasn't found. Please make sure that the file exists.

指定したパスが正しくありません。スクリプトファイルへの相対パスまたは絶対パスを指定できます。ファイルへのパスの指定の詳細については、「sagemaker.processing」を参照してくださいRunArgs

UnexpectedStatusException

の例を次に示しますUnexpectedStatusException

UnexpectedStatusException: Error for Processing job sagemaker-scikit-learn-2024-07-02-14-08-55-993: Failed. Reason: AlgorithmError: , exit code: 1

例外に伴うトレースバックは、根本原因の特定に役立ちます。

Traceback (most recent call last): File "/opt/ml/processing/input/code/preprocessing.py", line 51, in <module> df = pd.read_csv(input_data_path) . . . File "pandas/_libs/parsers.pyx", line 689, in pandas._libs.parsers.TextReader._setup_parser_source FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist: b'/opt/ml/processing/input/census-income.csv'

エラー"FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist"は、入力ファイルが指定されたパス にcensus-income.csv見つからないことを示します/opt/ml/processing/input/。入力データが正しく提供され、前処理スクリプトがデータを予期されたパスにコピーしていることを確認します。

botocore.exceptions.ClientError

次は、botocore.exceptions.ClientError の例です。

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the CreateProcessingJob operation: RoleArn: Cross-account pass role is not allowed.

"Cross-account pass role is not allowed in create processing job" エラーは、別の AWS アカウントのIAMロールを使用して SageMaker 処理ジョブを作成しようとすると発生します。このセキュリティ機能により、ロールとアクセス許可が各アカウント内で管理されます。この問題を解決するには、以下の手順を実行します。

  1. IAM ロールが処理ジョブと同じアカウントにあることを確認します。クロスアカウントロールには明示的な許容量が必要です

  2. 別のアカウントのロールを使用する場合は、その信頼ポリシーを更新して、処理ジョブを作成するアカウントがロールを引き受けられるようにします。

  3. ロールに sagemaker:CreateProcessingJobや などのジョブを処理するために必要なアクセス許可があることを確認しますiam:PassRole

エンドポイントの作成

重要

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 ログを確認するには
  1. Amazon SageMaker コンソール に移動します。

  2. 左側のナビゲーションで、エンドポイント を選択します。

  3. 失敗したエンドポイントを選択します。

  4. エンドポイントの詳細ページで、「 でログを表示する 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 アカウント内の既存のエンドポイントと一致していないことを示します。エラーのトラブルシューティングには、次の手順を使用します。

値エラーをトラブルシューティングするには
  1. 次のコードを使用して、すべてのエンドポイントを一覧表示します。

    import sagemaker sagemaker_session = sagemaker.Session() # List all endpoints endpoints = sagemaker_session.sagemaker_client.list_endpoints() print(endpoints)
  2. update_endpoint 関数に指定したエンドポイントがリストにあることを確認します。

  3. 正しい AWS Region. SageMaker endpoints で操作していることを確認します。

  4. 使用している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 のサービス」を参照してください。