によるリモートデバッグ AWS Systems Manager 用のトレーニングコンテナへのアクセス - Amazon SageMaker

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

によるリモートデバッグ AWS Systems Manager 用のトレーニングコンテナへのアクセス

AWS Systems Manager (SSM) を介して SageMaker トレーニングコンテナに安全に接続できます。これにより、コンテナ内で実行されているトレーニングジョブをデバッグするためのシェルレベルのアクセスが可能になります。Amazon にストリーミングされるコマンドとレスポンスをログに記録することもできます CloudWatch。独自の Amazon Virtual Private Cloud (VPC) を使用してモデルをトレーニングする場合、 AWS PrivateLink を使用して SSM 用の VPC エンドポイントを設定し、SSM を介してプライベートにコンテナに接続できます。

SageMaker フレームワークコンテナに接続するか、トレーニング環境で設定した独自の SageMaker トレーニングコンテナに接続できます。

IAM 許可をセットアップする

SageMaker トレーニングコンテナで SSM を有効にするには、コンテナの IAM ロールを設定する必要があります。ユーザーまたは AWS アカウントのユーザーが SSM を介してトレーニングコンテナにアクセスするには、SSM を使用するアクセス許可を持つ IAM ユーザーを設定する必要があります。

IAM ロール

SageMaker トレーニングコンテナが SSM エージェントで開始するには、SSM アクセス許可を持つ IAM ロールを指定します。

トレーニングジョブのリモートデバッグを有効にするには、トレーニングジョブの開始時に がトレーニングコンテナ内の SSM エージェントを起動 SageMaker する必要があります。SSM エージェントが SSM サービスと通信できるようにするには、トレーニングジョブの実行に使用する IAM ロールに次のポリシーを追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

IAM ユーザー

次のポリシーを追加して、SSM ターゲットに接続するための SSM セッションアクセス許可を IAM ユーザーに付与します。この場合、SSM ターゲットは SageMaker トレーニングコンテナです。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession" ], "Resource": "*" } ] }

次のポリシーサンプルに示すように、 Conditionキーを追加することで、特定のトレーニングジョブのコンテナにのみ接続するように IAM ユーザーを制限できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession" ], "Resource": [ "*" ], "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:target-id": [ "sagemaker-training-job:*" ] } } } ] }

sagemaker:EnableRemoteDebug 条件キーを明示的に使用して、リモートデバッグを制限することもできます。以下は、IAM ユーザーがリモートデバッグを制限するためのポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyRemoteDebugInTrainingJob", "Effect": "Allow", "Action": [ "sagemaker:CreateTrainingJob", "sagemaker:UpdateTrainingJob" ], "Resource": "*", "Condition": { "BoolIfExists": { "sagemaker:EnableRemoteDebug": false } } } ] }

詳細については、AWS 「サービス認証リファレンス」の「Amazon の条件キー SageMaker」を参照してください。

SageMaker トレーニングジョブのリモートデバッグを有効にする方法

このセクションでは、Amazon でトレーニングジョブを開始または更新するときにリモートデバッグを有効にする方法について説明します SageMaker。

SageMaker Python SDK

SageMaker Python SDK の推定器クラスを使用すると、 enable_remote_debugパラメータまたは enable_remote_debug()および disable_remote_debug()メソッドを使用して、リモートデバッグをオンまたはオフにできます。

トレーニングジョブの作成時にリモートデバッグを有効にするには

新しいトレーニングジョブの作成時にリモートデバッグを有効にするには、 enable_remote_debugパラメータを に設定しますTrue。デフォルト値は であるためFalse、このパラメータをまったく設定しない場合、または明示的に に設定した場合False、リモートデバッグ機能は無効になります。

import sagemaker session = sagemaker.Session() estimator = sagemaker.estimator.Estimator( ..., sagemaker_session=session, image_uri="<your_image_uri>", #must be owned by your organization or Amazon DLCs role=role, instance_type="ml.m5.xlarge", instance_count=1, output_path=output_path, max_run=1800, enable_remote_debug=True )

トレーニングジョブを更新してリモートデバッグを有効にするには

次の推定器クラスメソッドを使用すると、ジョブSecondaryStatusの が または の場合にトレーニングジョブの実行中に、リモートデバッグを有効Downloadingまたは無効にできますTraining

# Enable RemoteDebug estimator.enable_remote_debug() # Disable RemoteDebug estimator.disable_remote_debug()
AWS SDK for Python (Boto3)

トレーニングジョブの作成時にリモートデバッグを有効にするには

新しいトレーニングジョブの作成時にリモートデバッグを有効にするには、 RemoteDebugConfigパラメータTrueEnableRemoteDebugキーの値を に設定します。

import boto3 sm = boto3.Session(region_name=region).client("sagemaker") # Start a training job sm.create_training_job( ..., TrainingJobName=job_name, AlgorithmSpecification={ // Specify a training Docker container image URI // (Deep Learning Container or your own training container) to TrainingImage. "TrainingImage": "<your_image_uri>", "TrainingInputMode": "File" }, RoleArn=iam_role_arn, OutputDataConfig=output_path, ResourceConfig={ "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30 }, StoppingCondition={ "MaxRuntimeInSeconds": 86400 }, RemoteDebugConfig={ "EnableRemoteDebug": True } )

トレーニングジョブを更新してリモートデバッグを有効にするには

update_traing_job API を使用すると、トレーニングジョブの実行中に、ジョブSecondaryStatusの が または のときにリモートデバッグを有効Downloadingまたは無効にできますTraining

# Update a training job sm.update_training_job( TrainingJobName=job_name, RemoteDebugConfig={ "EnableRemoteDebug": True # True | False } )
AWS Command Line Interface (CLI)

トレーニングジョブの作成時にリモートデバッグを有効にするには

次のように、JSON 形式のCreateTrainingJobリクエストファイルを準備します。

// train-with-remote-debug.json { "TrainingJobName": job_name, "RoleArn": iam_role_arn, "AlgorithmSpecification": { // Specify a training Docker container image URI (Deep Learning Container or your own training container) to TrainingImage. "TrainingImage": "<your_image_uri>", "TrainingInputMode": "File" }, "OutputDataConfig": { "S3OutputPath": output_path }, "ResourceConfig": { "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30 }, "StoppingCondition": { "MaxRuntimeInSeconds": 86400 }, "RemoteDebugConfig": { "EnableRemoteDebug": True } }

JSON ファイルを保存したら、トレーニングジョブを送信するターミナルで次のコマンドを実行します。次のコマンド例では、JSON ファイルが という名前であることを前提としていますtrain-with-remote-debug.json。Jupyter Notebook から実行する場合は、行の先頭に感嘆符 (!) を追加します。

aws sagemaker create-training-job \ --cli-input-json file://train-with-remote-debug.json

トレーニングジョブを更新してリモートデバッグを有効にするには

次のように、JSON 形式の UpdateTrainingJobリクエストファイルを準備します。

// update-training-job-with-remote-debug-config.json { "TrainingJobName": job_name, "RemoteDebugConfig": { "EnableRemoteDebug": True } }

JSON ファイルを保存したら、トレーニングジョブを送信するターミナルで次のコマンドを実行します。次のコマンド例では、JSON ファイルが という名前であることを前提としていますtrain-with-remote-debug.json。Jupyter Notebook から実行する場合は、行の先頭に感嘆符 (!) を追加します。

aws sagemaker update-training-job \ --cli-input-json file://update-training-job-with-remote-debug-config.json

トレーニングコンテナにアクセスする

対応するトレーニングジョブSecondaryStatusの が の場合、トレーニングコンテナにアクセスできますTraining。次のコード例は、 DescribeTrainingJob API を使用してトレーニングジョブのステータスを確認する方法、 でトレーニングジョブログを確認する方法 CloudWatch、トレーニングコンテナにログインする方法を示しています。

トレーニングジョブのステータスを確認するには

SageMaker Python SDK

トレーニングジョブSecondaryStatusの を確認するには、次の SageMaker Python SDK コードを実行します。

import sagemaker session = sagemaker.Session() # Describe the job status training_job_info = session.describe_training_job(job_name) print(training_job_info)
AWS SDK for Python (Boto3)

トレーニングジョブSecondaryStatusの を確認するには、次の SDK for Python (Boto3) コードを実行します。

import boto3 session = boto3.session.Session() region = session.region_name sm = boto3.Session(region_name=region).client("sagemaker") # Describe the job status sm.describe_training_job(TrainingJobName=job_name)
AWS Command Line Interface (CLI)

トレーニングジョブSecondaryStatusの を確認するには、 に対して次の AWS CLI コマンドを実行します SageMaker。

aws sagemaker describe-training-job \ --training-job-name job_name

トレーニングコンテナのホスト名を検索するには

SSM を介してトレーニングコンテナに接続するには、ターゲット ID に次の形式を使用します。 sagemaker-training-job:<training-job-name>_algo-<n>はコンテナホストの名前algo-<n>です。ジョブが単一のインスタンスで実行されている場合、ホストは常に ですalgo-1。複数のインスタンスで分散トレーニングジョブを実行すると、 は同じ数のホストとログストリーム SageMaker を作成します。例えば、4 つのインスタンスを使用する場合、 は algo-1algo-2algo-3、 SageMaker を作成しますalgo-4。デバッグするログストリームとそのホスト番号を決定する必要があります。トレーニングジョブに関連付けられているログストリームにアクセスするには、次の手順を実行します。

  1. https://console.aws.amazon.com/sagemaker/ で Amazon SageMaker コンソールを開きます。

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

  3. トレーニングジョブ リストから、デバッグするトレーニングジョブを選択します。トレーニングジョブの詳細ページが開きます。

  4. Monitor セクションで、ログの表示 を選択します。関連するトレーニングジョブのログストリームリストが CloudWatch コンソールで開きます。

  5. ログストリーム名は <training-job-name>/algo-<n>-<time-stamp>形式で表示され、 はホスト名algo-<n>を表します。

がマルチインスタンス分散トレーニングの設定情報 SageMaker を管理する方法の詳細については、「分散トレーニング設定」を参照してください。

トレーニングコンテナにアクセスするには

ターミナルで次のコマンドを使用して SSM セッション (aws ssm start-session) を開始し、トレーニングコンテナに接続します。

aws ssm start-session --target sagemaker-training-job:<training-job-name>_algo-<n>

例えば、トレーニングジョブ名が training-job-test-remote-debugで、ホスト名が の場合algo-1、ターゲット ID は になりますsagemaker-training-job:training-job-test-remote-debug_algo-1。このコマンドの出力が と似ている場合Starting session with SessionId:xxxxx、接続は成功します。

による SSM アクセス AWS PrivateLink

トレーニングコンテナがパブリックインターネットに接続されていない Amazon Virtual Private Cloud 内で実行されている場合は、 AWS PrivateLink を使用して SSM を有効にできます。 は、エンドポイントインスタンス、SSM、および Amazon EC2 間のすべてのネットワークトラフィックを Amazon ネットワーク AWS PrivateLink に制限します。で SSM アクセスを設定する方法の詳細については AWS PrivateLink、「Session Manager の Amazon VPC エンドポイントを設定する」を参照してください。

SSM セッションコマンドと結果をログに記録する

「Session Manager 設定ドキュメント (コマンドライン) の作成」の手順に従って、SSM セッションの設定を定義する SSM ドキュメントを作成できます。SSM ドキュメントを使用して、データの暗号化、セッション期間、ログ記録などのセッションオプションを設定できます。例えば、セッションログデータを Amazon Simple Storage Service (Amazon S3) バケットまたは Amazon CloudWatch Logs グループのどちらに保存するかを指定できます。 AWS アカウントと のすべてのセッションの一般的な設定を定義する ドキュメント AWS リージョン、または個々のセッションの設定を定義する ドキュメントを作成できます。

SSM からエラーログをチェックして問題のトラブルシューティングを行う

Amazon は、SSM エージェントからロググループの CloudWatch /aws/sagemaker/TrainingJobsログにエラー SageMaker をアップロードします。SSM エージェントログストリームの名前は、 の形式です<job-name>/algo-<n>-<timestamp>/ssm。例えば、 という名前の 2 ノードトレーニングジョブを作成するとtraining-job-test-remote-debug、トレーニングジョブログtraining-job-test-remote-debug/algo-<n>-<timestamp>と複数の SSM エージェントエラーログtraining-job-test-remote-debug/algo-<n>-<timestamp>/ssmが CloudWatch ログにアップロードされます。この例では、*/ssmログストリームを確認して SSM の問題をトラブルシューティングできます。

training-job-test-remote-debug/algo-1-1680535238 training-job-test-remote-debug/algo-2-1680535238 training-job-test-remote-debug/algo-1-1680535238/ssm training-job-test-remote-debug/algo-2-1680535238/ssm

考慮事項

SageMaker リモートデバッグを使用する場合は、次の点を考慮してください。

  • リモートデバッグは、SageMaker アルゴリズムコンテナ、または SageMaker 上の からのコンテナではサポートされていません AWS Marketplace。

  • ネットワーク分離が有効になっているコンテナの SSM セッションを開始することはできません。分離により、アウトバウンドのネットワーク呼び出しが妨げられるためです。