원격 디버깅을 AWS Systems Manager 위해를 통해 훈련 컨테이너에 액세스 - Amazon SageMaker AI

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

원격 디버깅을 AWS Systems Manager 위해를 통해 훈련 컨테이너에 액세스

AWS Systems Manager (SSM)을 통해 SageMaker 훈련 컨테이너에 안전하게 연결할 수 있습니다. 이렇게 하면 컨테이너 내에서 실행 중인 훈련 작업을 디버깅할 수 있는 쉘 수준의 액세스 권한이 부여됩니다. Amazon CloudWatch로 스트리밍되는 명령 및 응답을 로깅할 수도 있습니다. 자체 Amazon Virtual Private Cloud(VPC)를 사용하여 모델을 훈련하는 경우 AWS PrivateLink 를 사용하여 SSM용 VPC 엔드포인트를 설정하고 SSM을 통해 컨테이너에 비공개로 연결할 수 있습니다.

SageMaker AI 프레임워크 컨테이너에 연결하거나 SageMaker 훈련 환경으로 설정된 자체 훈련 컨테이너에 연결할 수 있습니다.

IAM 권한 설정

SageMaker 훈련 컨테이너에서 SSM을 활성화하려면 컨테이너에 대한 IAM 역할을 설정해야 합니다. 본인 또는 AWS 계정의 사용자가 SSM을 통해 훈련 컨테이너에 액세스하려면 SSM을 사용할 수 있는 권한이 있는 IAM 사용자를 설정해야 합니다.

IAM 역할

SageMaker 훈련 컨테이너가 SSM 에이전트로 시작하려면 SSM 권한이 있는 IAM 역할을 제공합니다.

훈련 작업에 원격 디버깅을 활성화하려면 훈련 작업이 시작될 때 SageMaker AI가 훈련 컨테이너에서 SSM 에이전트를 시작해야 합니다. SSM 에이전트가 SSM 서비스와 통신할 수 있도록 하려면 훈련 작업을 실행하는 데 사용하는 IAM 역할에 다음 정책을 추가합니다.

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

IAM 사용자

다음 정책을 추가하여 IAM 사용자에게 SSM 대상에 연결할 수 있는 SSM 세션 권한을 부여합니다. 이 경우 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 AI에 사용되는 조건 키를 참조하세요.

SageMaker 훈련 작업에 원격 디버깅을 활성화하는 방법

이 섹션에서는 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 )

훈련 작업을 업데이트하여 원격 디버깅을 활성화하려면

다음 추정기 클래스 메서드를 사용하면 작업의 SecondaryStatusDownloading 또는 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를 사용하면 작업의 SecondaryStatusDownloading 또는 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

훈련 컨테이너에 액세스

해당 훈련 작업의 SecondaryStatusTraining인 경우 훈련 컨테이너에 액세스할 수 있습니다. 다음 코드 예제에서는 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/ Amazon SageMaker AI 콘솔을 엽니다.

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

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

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

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

SageMaker AI가 다중 인스턴스 분산 훈련의 구성 정보를 관리하는 방법에 대한 자세한 내용은 분산 훈련 구성을 참조하세요.

훈련 컨테이너에 액세스하려면

터미널에서 다음 명령을 사용하여 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 액세스를 설정하는 방법에 대한 자세한 내용은 세션 관리자용 Amazon VPC 엔드포인트 설정을 AWS PrivateLink참조하세요.

SSM 세션 명령 및 결과 로깅

세션 관리자 기본 설정 문서 생성(명령줄)의 지침에 따라 SSM 세션에 대한 기본 설정을 정의하는 SSM 문서를 생성할 수 있습니다. SSM 문서를 사용하여 데이터 암호화, 세션 기간 및 로깅을 포함한 세션 옵션을 구성할 수 있습니다. 예를 들면, 기본 설정을 사용하여 Amazon Simple Storage Service(Amazon S3) 버킷 또는 Amazon CloudWatch Logs 로그 그룹에 세션 로그 데이터를 저장할지를 지정할 수 있습니다. AWS 계정의 모든 세션에 대한 일반 기본 설정을 정의하는 문서 또는 개별 세션에 대한 기본 설정을 정의하는 AWS 리전문서를 생성할 수 있습니다.

SSM에서 오류 로그를 확인하여 문제 해결

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

고려 사항

SageMaker AI 원격 디버깅을 사용할 때는 다음 사항을 고려하세요.

  • 원격 디버깅은 SageMaker AI 알고리즘 컨테이너 또는 SageMaker AI 기반 컨테이너에는 지원되지 않습니다 AWS Marketplace.

  • 격리로 인해 아웃바운드 네트워크 호출이 방지되므로 네트워크 격리가 활성화된 컨테이너에 대해서는 SSM 세션을 시작할 수 없습니다.