원격 디버깅을 AWS Systems Manager 위해 교육 컨테이너에 액세스 - 아마존 SageMaker

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

원격 디버깅을 AWS Systems Manager 위해 교육 컨테이너에 액세스

(SSM) 을 통해 SageMaker 교육 컨테이너에 안전하게 연결할 수 있습니다. AWS Systems Manager 이를 통해 셸 수준에서 컨테이너 내에서 실행 중인 훈련 작업을 디버깅할 수 있습니다. CloudWatchAmazon으로 스트리밍되는 명령과 응답을 기록할 수도 있습니다. 자체 Amazon VPC (Virtual Private Cloud) 를 사용하여 모델을 학습시키는 경우, SSM을 위한 VPC 엔드포인트를 설정하고 SSM을 통해 비공개로 컨테이너에 연결하는 AWS PrivateLink 데 사용할 수 있습니다.

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 사용자

다음 정책을 추가하여 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 서비스 승인 SageMaker 참조의 Amazon용 조건 키를 참조하십시오.

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

이 섹션에서는 SageMaker Amazon에서 교육 작업을 시작하거나 업데이트할 때 원격 디버깅을 활성화하는 방법을 알아봅니다.

SageMaker Python SDK

SageMaker Python SDK의 Estimator 클래스를 사용하면 enable_remote_debug 파라미터 또는 and 메서드를 사용하여 원격 디버깅을 켜거나 끌 수 있습니다. 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)

교육 작업을 생성할 때 원격 디버깅을 활성화하려면

새 교육 작업을 만들 때 원격 디버깅을 활성화하려면 True 매개변수에서 EnableRemoteDebug 키 값을 로 설정합니다. RemoteDebugConfig

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_jobAPI를 사용하면 교육 작업이 실행 중일 때 작업이 또는 작업일 때 원격 디버깅을 활성화하거나 비활성화할 수 있습니다. SecondaryStatus Downloading Training

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

교육 작업을 생성할 때 원격 디버깅을 활성화하려면

다음과 같이 CreateTrainingJob 요청 파일을 JSON 형식으로 준비하십시오.

// 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 파일의 이름이 JSON 파일이라고 가정합니다. train-with-remote-debug.json Jupyter 노트북에서 실행하는 경우 줄의 시작 부분에 느낌표 (!) 를 추가하십시오.

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

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

다음과 같이 UpdateTrainingJob 요청 파일을 JSON 형식으로 준비하십시오.

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

JSON 파일을 저장한 후 교육 작업을 제출하는 터미널에서 다음 명령을 실행합니다. 다음 예제 명령어는 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

트레이닝 컨테이너에 액세스하세요.

해당 교육 작업이 다음과 같으면 교육 컨테이너에 액세스할 수 Training 있습니다. SecondaryStatus 다음 코드 예제는 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 Python용 SDK (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을 통해 교육 컨테이너에 연결하려면 대상 sagemaker-training-job:<training-job-name>_algo-<n> ID:에 다음 형식을 사용합니다. 여기서 algo-<n> 은 컨테이너 호스트의 이름입니다. 작업이 단일 인스턴스에서 실행되는 경우 호스트는 항상 algo-1 유효합니다. 여러 인스턴스에서 분산 교육 작업을 실행하는 경우 동일한 수의 호스트와 로그 스트림이 SageMaker 생성됩니다. 예를 들어, 인스턴스 4개를 사용하는 경우, algo-1 algo-2algo-3, 및 가 SageMaker 생성됩니다algo-4. 디버깅할 로그 스트림과 해당 호스트 번호를 결정해야 합니다. 교육 작업과 관련된 로그 스트림에 액세스하려면 다음을 수행하십시오.

  1. https://console.aws.amazon.com/sagemaker/ 에서 아마존 SageMaker 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 [교육] 을 선택한 다음 [교육] 작업을 선택합니다.

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

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

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

다중 인스턴스 분산 교육의 구성 정보를 SageMaker 관리하는 방법에 대한 자세한 내용은 분산 교육 구성을 참조하십시오.

교육 컨테이너에 액세스하려면

터미널에서 다음 명령을 사용하여 SSM 세션 (aws ssm start-session) 을 시작하고 교육 컨테이너에 연결합니다.

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

예를 들어, 교육 작업 이름이 training-job-test-remote-debug 이고 호스트 이름이 인 경우 대상 ID는 이 algo-1 됩니다sagemaker-training-job:training-job-test-remote-debug_algo-1. 이 명령의 출력이 다음과 비슷하면 연결에 성공한 것입니다. Starting session with SessionId:xxxxx

다음을 통한 SSM 액세스 AWS PrivateLink

교육 컨테이너가 퍼블릭 인터넷에 연결되지 않은 Amazon Virtual Private Cloud에서 실행되는 경우 SSM을 AWS PrivateLink 활성화하는 데 사용할 수 있습니다. AWS PrivateLink 엔드포인트 인스턴스, SSM, Amazon EC2 간의 모든 네트워크 트래픽을 Amazon 네트워크로 제한합니다. 를 사용하여 SSM 액세스를 설정하는 방법에 대한 자세한 내용은 세션 AWS PrivateLink관리자용 Amazon VPC 엔드포인트 설정을 참조하십시오.

SSM 세션 명령 및 결과를 기록합니다.

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

SSM의 오류 로그를 확인하여 문제를 해결합니다.

Amazon은 SSM 에이전트의 오류를 CloudWatch 로그 그룹의 로그에 SageMaker /aws/sagemaker/TrainingJobs 업로드합니다. 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 이 예시에서는 */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 원격 디버깅을 사용할 때는 다음 사항을 고려하십시오.