

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 원격 디버깅을 AWS Systems Manager 위해를 통해 훈련 컨테이너에 액세스
<a name="train-remote-debugging"></a>

 AWS Systems Manager (SSM)을 통해 SageMaker 훈련 컨테이너에 안전하게 연결할 수 있습니다. 이렇게 하면 컨테이너 내에서 실행 중인 훈련 작업을 디버깅할 수 있는 쉘 수준의 액세스 권한이 부여됩니다. 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 서비스 권한 부여 참조*에서 [Amazon SageMaker에 사용되는 조건 키](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 노트북에서 실행하는 경우 줄의 시작 부분에 느낌표(`!`)를 추가합니다.

```
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 노트북에서 실행하는 경우 줄의 시작 부분에 느낌표(`!`)를 추가합니다.

```
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>`는 컨테이너 호스트의 이름입니다. 작업이 단일 인스턴스에서 실행 중인 경우 호스트는 항상 `algo-1`입니다. 여러 인스턴스에서 분산 훈련 작업을 실행하는 경우 SageMaker AI는 동일한 수의 호스트와 로그 스트림을 생성합니다. 예를 들어 인스턴스 4개를 사용하는 경우 SageMaker AI는 `algo-1`, `algo-2`, `algo-3`, `algo-4`를 생성합니다. 디버깅할 로그 스트림과 해당 호스트 번호를 결정해야 합니다. 훈련 작업과 연결된 로그 스트림에 액세스하려면 다음을 수행합니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **훈련**을 선택한 후 **훈련 작업**을 선택합니다.

1. **훈련 작업** 목록에서 디버그하려는 훈련 작업을 선택합니다. 훈련 작업 세부 정보 페이지가 열립니다.

1. **모니터링** 섹션에서 **로그 보기**를 선택합니다. 관련 훈련 작업 로그 스트림 목록이 CloudWatch 콘솔에 열립니다.

1. 로그 스트림 이름은 호스트 이름을 나타내는 `algo-<n>`과 함께 `<training-job-name>/algo-<n>-<time-stamp>` 형식으로 표시됩니다.

SageMaker AI가 다중 인스턴스 분산 훈련의 구성 정보를 관리하는 방법에 대한 자세한 내용은 [분산 훈련 구성 섹션](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 액세스를 설정하는 방법에 대한 자세한 내용은 세션 관리자용 Amazon VPC 엔드포인트 설정을 AWS PrivateLink참조하세요. [https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html) 

## SSM 세션 명령 및 결과 로깅
<a name="train-remote-debugging-log-ssm"></a>

[세션 관리자 기본 설정 문서 생성(명령줄)](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`훈련 작업 로그`training-job-test-remote-debug/algo-<n>-<timestamp>`와 여러 `training-job-test-remote-debug/algo-<n>-<timestamp>/ssm` 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 알고리즘 컨테이너 또는 SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/algorithms-choose.html) SageMaker AI 기반 컨테이너에는 원격 디버깅이 지원되지 않습니다 AWS Marketplace.
+ 격리로 인해 아웃바운드 네트워크 호출이 방지되므로 네트워크 격리가 활성화된 컨테이너에 대해서는 SSM 세션을 시작할 수 없습니다.