

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

# リモートデバッグ AWS Systems Manager のために からトレーニングコンテナにアクセスする
<a name="train-remote-debugging"></a>

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

[SageMaker AI フレームワークコンテナ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)に接続するか、SageMaker トレーニング環境でセットアップされた独自のトレーニングコンテナに接続できます。

## IAM 許可をセットアップする
<a name="train-remote-debugging-iam"></a>

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

### IAM ロール
<a name="train-remote-debugging-iam-role"></a>

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

トレーニングジョブのリモートデバッグを有効にするには、SageMaker AI がトレーニングジョブの開始時にトレーニングコンテナで [SSM エージェント](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)を起動する必要があります。SSM エージェントが SSM サービスと通信できるようにするには、トレーニングジョブの実行に使用する IAM ロールに次のポリシーを追加します。

------
#### [ JSON ]

****  

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

------

### IAM ユーザー
<a name="train-remote-debugging-iam-user"></a>

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

------
#### [ JSON ]

****  

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

------

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

------
#### [ JSON ]

****  

```
{
    "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 ユーザーがリモートデバッグを制限するためのポリシーの例を次に示します。

------
#### [ JSON ]

****  

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

------

詳細については、*AWS サービス認可リファレンス*の「[Condition keys for Amazon SageMaker AI](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys)」を参照してください。

## SageMaker トレーニングジョブのリモートデバッグを有効にする方法
<a name="train-remote-debugging-how-to-use"></a>

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

------
#### [ 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` パラメータで `EnableRemoteDebug` キーを `True` に設定します。

```
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
```

------

## トレーニングコンテナにアクセスする
<a name="train-remote-debugging-access-container"></a>

対応するトレーニングジョブの `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`の を確認するには、SageMaker AI に対して次の AWS CLI コマンドを実行します。

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

------

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

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

1. Amazon SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

1. ナビゲーションペインで **[トレーニング]**、**[トレーニングジョブ]** の順に選択します。

1. **[トレーニングジョブ]** リストで、デバッグするトレーニングジョブを選択します。トレーニングジョブの詳細ページが開きます。

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

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

SageMaker AI がマルチインスタンス分散トレーニングの設定情報を管理する方法の詳細については、「[Distributed Training Configuration](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training)」を参照してください。

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

ターミナルで次のコマンドを使用して SSM セッション (`[aws ssm start-session](https://docs.aws.amazon.com/cli/latest/reference/ssm/start-session.html)`) を開始し、トレーニングコンテナに接続します。

```
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
<a name="train-remote-debugging-access-container-vpc"></a>

トレーニングコンテナがパブリックインターネットに接続されていない Amazon Virtual Private Cloud 内で実行されている場合、 AWS PrivateLink を使用して SSM を有効にできます。 は、エンドポイントインスタンス、SSM、Amazon EC2 間のすべてのネットワークトラフィックを Amazon ネットワーク AWS PrivateLink に制限します。で SSM アクセスを設定する方法の詳細については AWS PrivateLink、[「Session Manager の Amazon VPC エンドポイントを設定する](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html)」を参照してください。

## SSM セッションのコマンドと結果をログに記録する
<a name="train-remote-debugging-log-ssm"></a>

「[Session Manager プリファレンスドキュメントを作成する (コマンドライン)](https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-create-preferences-cli.html)」の指示に従って、SSM セッションの設定を定義する SSM ドキュメントを作成できます。この SSM ドキュメントを使用して、データ暗号化、セッション期間、ログ記録などのセッションオプションを設定できます。例えば、Amazon Simple Storage Service (Amazon S3) バケットまたは Amazon CloudWatch Logs グループにセッションログデータを保存するかどうかを指定します。 AWS アカウントのすべてのセッションの一般的な設定を定義するドキュメントや AWS リージョン、個々のセッションの設定を定義するドキュメントを作成できます。

## SSM からのエラーログをチェックして問題をトラブルシューティングする
<a name="train-remote-debugging-checking-ssm-agent-logs"></a>

Amazon SageMaker AI は、SSM エージェントから `/aws/sagemaker/TrainingJobs` ロググループの CloudWatch Logs にエラーをアップロードします。SSM エージェントログストリームの名前は、`<job-name>/algo-<n>-<timestamp>/ssm` という形式です。例えば、`training-job-test-remote-debug` という名前の 2 ノードトレーニングジョブを作成した場合、トレーニングジョブログ `training-job-test-remote-debug/algo-<n>-<timestamp>` と複数の SSM エージェントエラーログ `training-job-test-remote-debug/algo-<n>-<timestamp>/ssm` が、CloudWatch Logs にアップロードされます。この例では、`*/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
```

## 考慮事項
<a name="train-remote-debugging-considerations"></a>

SageMaker AI リモートデバッグを使用する際は、以下の点を考慮してください。
+ リモートデバッグは、[SageMaker AI アルゴリズムコンテナ](https://docs.aws.amazon.com/sagemaker/latest/dg/algorithms-choose.html)または SageMaker AI のコンテナではサポートされていません AWS Marketplace。
+ ネットワーク分離が有効になっているコンテナの SSM セッションを開始することはできません。これは、分離によってアウトバウンドネットワークコールが妨げられるためです。