

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

# SageMaker AI AWS Batch 에서 시작하기
<a name="getting-started-sagemaker"></a>

AWS Batch 서비스 작업을 사용하면 예약, 우선 순위 지정 및 대기열 기능을 사용하여 AWS Batch 작업 대기열을 통해 SageMaker 훈련 작업을 제출할 수 있습니다. 이 자습서에서는 AWS Batch 서비스 작업을 사용하여 간단한 SageMaker 훈련 작업을 설정하고 실행하는 방법을 보여줍니다.

**Contents**
+ [개요](#getting-started-sagemaker-context)
+ [사전 조건](#getting-started-sagemaker-prerequisites)
+ [1단계: SageMaker AI 실행 역할 생성](#getting-started-sagemaker-step-1)
+ [2단계: 테스트 환경 생성](#getting-started-sagemaker-step-2)
+ [3단계: SageMaker 작업 대기열 생성](#getting-started-sagemaker-step-3)
+ [4단계: 훈련 작업 생성 및 제출](#getting-started-sagemaker-step-4)
+ [5단계: 작업 상태 모니터링](#getting-started-sagemaker-step-5)
+ [6단계: 작업 출력 보기](#getting-started-sagemaker-step-6)
+ [7단계: 자습서 리소스 정리](#getting-started-sagemaker-step-7)
+ [추가 리소스](#getting-started-sagemaker-additional-resources)

## 개요
<a name="getting-started-sagemaker-context"></a>

이 자습서에서는를 사용하여 SageMaker 훈련 작업에 대한 AWS Batch 서비스 작업을 설정하는 방법을 보여줍니다 AWS CLI.

**대상**  
이 자습서는 대규모 기계 학습 훈련 작업의 설정 및 실행을 담당하는 데이터 과학자 및 개발자를 위해 설계되었습니다.

**사용된 기능**  
이 자습서에서는를 사용하여 다음을 AWS CLI 수행하는 방법을 보여줍니다.  
+ SageMaker 훈련 작업을 위한 서비스 환경 생성
+ SageMaker 훈련 작업 대기열 생성
+ `SubmitServiceJob` API를 사용하여 서비스 작업 제출
+ 작업 상태 모니터링 및 출력 보기
+ 훈련 작업에 대한 CloudWatch 로그 액세스

**필요한 시간**  
이 자습서를 완료하려면 약 15분 정도 걸립니다.

**리전별 제한 사항**  
이 자습서는 AWS Batch 및 SageMaker AI를 모두 사용할 수 있는 모든 AWS 리전에서 완료할 수 있습니다.

**리소스 사용 비용**  
 AWS 계정 생성에는 요금이 부과되지 않습니다. 하지만 이 솔루션을 구현하면 다음 리소스에 대한 비용이 발생할 수 있습니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/batch/latest/userguide/getting-started-sagemaker.html)

## 사전 조건
<a name="getting-started-sagemaker-prerequisites"></a>

이 자습서를 시작하기 전에 및 AWS Batch SageMaker AI 리소스를 모두 생성하고 관리하는 데 필요한 다음 도구와 리소스를 설치하고 구성해야 합니다.
+ **AWS CLI** - AWS Batch 및 SageMaker AI를 포함한 AWS 서비스 작업을 위한 명령줄 도구입니다. 이 가이드에서는 버전 2.8.6 이상을 사용해야 합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI의 설치, 업데이트, 제거](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)를 참조하세요. 설치 후 도 구성하는 것이 AWS CLI좋습니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*에서 [`aws configure`를 사용한 빠른 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)을 참조하세요.

## 1단계: SageMaker AI 실행 역할 생성
<a name="getting-started-sagemaker-step-1"></a>

Amazon SageMaker AI는 실행 역할을 통해 사용자 대신 다른 AWS 서비스를 사용하여 작업을 수행합니다. 실행 역할을 생성하고 훈련 작업에 필요한 서비스 및 리소스를 사용할 수 있는 권한을 SageMaker AI에 부여해야 합니다. `AmazonSageMakerFullAccess` 관리형 정책에는 Amazon S3에 대한 권한이 포함되어 있으므로 이 정책을 사용합니다.

**참고**  
다음 지침에 따라 이 자습서를 위한 SageMaker AI 실행 역할을 생성합니다.  
프로덕션 환경을 위한 실행 역할을 생성하기 전에 *[SageMaker AI 개발자 안내서](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)*의 [SageMaker AI 실행 역할을 사용하는 방법](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)을 검토할 것이 권장됩니다.

1. 

**IAM 역할 생성**

   다음 신뢰 정책을 통해 `sagemaker-trust-policy.json`이라는 이름의 JSON 파일을 생성합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "sagemaker.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

   신뢰 정책을 사용하여 IAM 역할을 생성합니다.

   ```
   aws iam create-role \
       --role-name SageMakerExecutionRole \
       --assume-role-policy-document file://sagemaker-trust-policy.json \
       --description "Execution role for SageMaker training jobs"
   ```

1. 

**관리형 정책 연결**

   필요한 관리형 정책을 역할에 연결합니다.

   ```
   aws iam attach-role-policy \
       --role-name SageMakerExecutionRole \
       --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
   ```

   ```
   aws iam attach-role-policy \
       --role-name SageMakerExecutionRole \
       --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
   ```

1. 

**역할 ARN 기록**

   역할 ARN을 가져옵니다.이 ARN은 후속 단계에서 필요합니다.

   ```
   aws iam get-role --role-name SageMakerExecutionRole --query 'Role.Arn' --output text
   ```

   이 ARN을 저장합니다. 이 ARN은 훈련 작업 페이로드를 생성할 때 사용됩니다.

## 2단계: 테스트 환경 생성
<a name="getting-started-sagemaker-step-2"></a>

서비스 환경은 SageMaker 훈련 작업에 대한 용량 제약 조건을 정의합니다. 서비스 환경은 동시에 실행할 수 있는 최대 훈련 인스턴스 수를 캡슐화합니다.

**중요**  
SageMaker 훈련을 위한 첫 번째 서비스 환경을 생성하면 AWS Batch 는 계정에서 `AWSServiceRoleForAWSBatchWithSagemaker`라는 서비스 연결 역할을 자동 생성합니다. 이 역할을 통해 AWS Batch 는 사용자를 대신하여 SageMaker 훈련 작업을 대기열에 넣고 관리할 수 있습니다. 서비스 연결 역할 및 해당 권한에 대한 자세한 내용은 [SageMaker AI AWS Batch 에서에 대한 역할 사용](using-service-linked-roles-batch-sagemaker.md) 섹션을 참조하세요.

최대 5개의 인스턴스를 처리할 수 있는 서비스 환경을 생성합니다.

```
aws batch create-service-environment \
    --service-environment-name TutorialServiceEnvironment \
    --service-environment-type SAGEMAKER_TRAINING \
    --capacity-limits capacityUnit=NUM_INSTANCES,maxCapacity=5
```

출력:

```
{
    "serviceEnvironmentName": "TutorialServiceEnvironment",
    "serviceEnvironmentArn": "arn:aws:batch:your-region:your-account-id:service-environment/TutorialServiceEnvironment"
}
```

서비스 환경이 성공적으로 생성되었는지 확인합니다.

```
aws batch describe-service-environments --service-environments TutorialServiceEnvironment
```

출력:

```
{
    "serviceEnvironments": [
        {
            "serviceEnvironmentName": "TutorialServiceEnvironment",
            "serviceEnvironmentArn": "arn:aws:batch:your-region:your-account-id:service-environment/TutorialServiceEnvironment",
            "serviceEnvironmentType": "SAGEMAKER_TRAINING",
            "state": "ENABLED",
            "status": "VALID",
            "capacityLimits": [
                {
                    "maxCapacity": 5,
                    "capacityUnit": "NUM_INSTANCES"
                }
            ],
            "tags": {}
        }
    ]
}
```

서비스 환경에 대한 자세한 내용은 [용 서비스 환경 AWS Batch](service-environments.md) 섹션을 참조하세요.

## 3단계: SageMaker 작업 대기열 생성
<a name="getting-started-sagemaker-step-3"></a>

SageMaker 작업 대기열은 서비스 작업의 예약 및 실행을 관리합니다. 이 대기열에 제출된 작업은 사용 가능한 용량을 기반으로 서비스 환경으로 디스패치됩니다.

SageMaker 훈련 작업 대기열을 생성합니다.

```
aws batch create-job-queue \
    --job-queue-name my-sm-training-fifo-jq \
    --job-queue-type SAGEMAKER_TRAINING \
    --priority 1 \
    --service-environment-order order=1,serviceEnvironment=TutorialServiceEnvironment
```

출력:

```
{
    "jobQueueName": "my-sm-training-fifo-jq",
    "jobQueueArn": "arn:aws:batch:your-region:your-account-id:job-queue/my-sm-training-fifo-jq"
}
```

작업 대기열이 성공적으로 생성되었는지 확인합니다.

```
aws batch describe-job-queues --job-queues my-sm-training-fifo-jq
```

출력:

```
{
    "jobQueues": [
        {
            "jobQueueName": "my-sm-training-fifo-jq",
            "jobQueueArn": "arn:aws:batch:your-region:your-account-id:job-queue/my-sm-training-fifo-jq",
            "state": "ENABLED",
            "status": "VALID",
            "statusReason": "JobQueue Healthy",
            "priority": 1,
            "computeEnvironmentOrder": [],
            "serviceEnvironmentOrder": [
                {
                    "order": 1,
                    "serviceEnvironment": "arn:aws:batch:your-region:your-account-id:service-environment/TutorialServiceEnvironment"
                }
            ],
            "jobQueueType": "SAGEMAKER_TRAINING",
            "tags": {}
        }
    ]
}
```

SageMaker 작업 대기열에 대한 자세한 내용은 [AWS Batch에서 SageMaker 훈련 작업 대기열 생성](create-sagemaker-job-queue.md) 섹션을 참조하세요.

## 4단계: 훈련 작업 생성 및 제출
<a name="getting-started-sagemaker-step-4"></a>

이제 간단한 훈련 작업을 생성하여 작업 대기열에 제출합니다. 이 예제에서는 서비스 작업 기능을 보여주는 간단한 'hello world' 훈련 작업을 사용합니다.

다음 콘텐츠가 포함된 `my_training_job.json`이라는 파일을 생성합니다. *your-account-id*를 AWS 계정 ID로 바꿉니다.

**참고**  
`S3OutputPath`는 SageMaker 훈련 작업을 생성하는 데 필요하지만 이 자습서의 결과는 Amazon S3 버킷에 저장되지 않으므로 다음 JSON의 경로를 사용할 수 있습니다. 프로덕션 환경에서는 선택한 경우 출력을 저장할 유효한 Amazon S3 버킷이 필요합니다.

```
{
    "TrainingJobName": "my-simple-training-job",
    "RoleArn": "arn:aws:iam::your-account-id:role/SageMakerExecutionRole",
    "AlgorithmSpecification": {
        "TrainingInputMode": "File",
        "TrainingImage": "763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-training:2.0.0-cpu-py310",
        "ContainerEntrypoint": [
            "echo",
            "hello world"
        ]
    },
    "ResourceConfig": {
        "InstanceType": "ml.c5.xlarge",
        "InstanceCount": 1,
        "VolumeSizeInGB": 1
    },
    "OutputDataConfig": {
        "S3OutputPath": "s3://your-s3-bucket/output"
    },
    "StoppingCondition": {
        "MaxRuntimeInSeconds": 30
    }
}
```

[SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) API를 사용하여 훈련 작업을 제출합니다.

```
aws batch submit-service-job \
    --job-queue my-sm-training-fifo-jq \
    --job-name my-batch-sm-job \
    --service-job-type SAGEMAKER_TRAINING \
    --retry-strategy attempts=1 \
    --timeout-config attemptDurationSeconds=60 \
    --service-request-payload file://my_training_job.json
```

출력:

```
{
    "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
    "jobName": "my-batch-sm-job",
    "jobId": "your-job-id"
}
```

서비스 작업 페이로드에 대한 자세한 내용은 [의 서비스 작업 페이로드 AWS Batch](service-job-payload.md) 섹션을 참조하세요. 서비스 작업 제출에 대한 자세한 내용은 [에서 서비스 작업 제출 AWS Batch](service-job-submit.md) 섹션을 참조하세요.

## 5단계: 작업 상태 모니터링
<a name="getting-started-sagemaker-step-5"></a>

[DescribeServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html), [ListServiceJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_ListServiceJobs.html) 및 [GetJobQueueSnapshot](https://docs.aws.amazon.com/batch/latest/APIReference/API_GetJobQueueSnapshot.html) AWS Batch APIs를 사용하여 훈련 작업을 모니터링할 수 있습니다. 이 섹션에서는 작업 상태 및 대기열 정보를 확인하는 다양한 방법을 보여줍니다.

대기열에서 실행 중인 작업을 봅니다.

```
aws batch list-service-jobs \
    --job-queue my-sm-training-fifo-jq --job-status RUNNING
```

출력:

```
{
    "jobSummaryList": [
        {
            "latestAttempt": {
                "serviceResourceId": {
                    "name": "TrainingJobArn",
                    "value": "arn:aws:sagemaker:your-region:your-account-id:training-job/AWSBatch<my-simple-training-job><your-attempt-id>"
                }
            },
            "createdAt": 1753718760,
            "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
            "jobId": "your-job-id",
            "jobName": "my-batch-sm-job",
            "serviceJobType": "SAGEMAKER_TRAINING",
            "status": "RUNNING",
            "startedAt": 1753718820
        }
    ]
}
```

`RUNNABLE` 상태에 있는 작업을 봅니다.

```
aws batch list-service-jobs \
    --job-queue my-sm-training-fifo-jq --job-status RUNNABLE
```

대기열에서 예정된 작업의 스냅샷을 가져옵니다.

```
aws batch get-job-queue-snapshot --job-queue my-sm-training-fifo-jq
```

출력:

```
{
    "frontOfQueue": {
        "jobs": [
            {
                "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
                "earliestTimeAtPosition": 1753718880
            },
            {
                "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id-2",
                "earliestTimeAtPosition": 1753718940
            }
        ],
        "lastUpdatedAt": 1753718970
    }
}
```

이름으로 작업을 검색합니다.

```
aws batch list-service-jobs \
    --job-queue my-sm-training-fifo-jq \
    --filters name=JOB_NAME,values="my-batch-sm-job"
```

출력:

```
{
    "jobSummaryList": [
        {
            "latestAttempt": {
                "serviceResourceId": {
                    "name": "TrainingJobArn",
                    "value": "arn:aws:sagemaker:your-region:your-account-id:training-job/AWSBatch<my-simple-training-job><your-attempt-id>"
                }
            },
            "createdAt": 1753718760,
            "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
            "jobId": "your-job-id",
            "jobName": "my-batch-sm-job",
            "serviceJobType": "SAGEMAKER_TRAINING",
            "status": "RUNNING"
        }
    ]
}
```

작업 상태 매핑에 대한 자세한 내용은 [AWS Batch 서비스 작업 상태를 SageMaker AI 상태로 매핑](service-job-status.md) 섹션을 참조하세요.

## 6단계: 작업 출력 보기
<a name="getting-started-sagemaker-step-6"></a>

작업이 완료되면 AWS Batch 및 SageMaker AI APIs.

 AWS Batch다음에서 작업에 대한 자세한 정보를 가져옵니다.

```
aws batch describe-service-job \
    --job-id your-job-id
```

출력:

```
{
    "attempts": [
        {
            "serviceResourceId": {
                "name": "TrainingJobArn",
                "value": "arn:aws:sagemaker:your-region:your-account-id:training-job/AWSBatch<my-simple-training-job><your-attempt-id>"
            },
            "startedAt": 1753718820,
            "stoppedAt": 1753718880,
            "statusReason": "Received status from SageMaker: Training job completed"
        }
    ],
    "createdAt": 1753718760,
    "jobArn": "arn:aws:batch:your-region:your-account-id:service-job/your-job-id",
    "jobId": "your-job-id",
    "jobName": "my-batch-sm-job",
    "jobQueue": "arn:aws:batch:your-region:your-account-id:job-queue/my-sm-training-fifo-jq",
    "latestAttempt": {
        "serviceResourceId": {
            "name": "TrainingJobArn",
            "value": "arn:aws:sagemaker:your-region:your-account-id:training-job/AWSBatch<my-simple-training-job><your-attempt-id>"
        }
    },
    "retryStrategy": {
        "attempts": 1,
        "evaluateOnExit": []
    },
    "serviceRequestPayload": "your-training-job-request-json",
    "serviceJobType": "SAGEMAKER_TRAINING",
    "startedAt": 1753718820,
    "status": "SUCCEEDED",
    "statusReason": "Received status from SageMaker: Training job completed",
    "stoppedAt": 1753718880,
    "tags": {},
    "timeoutConfig": {
        "attemptDurationSeconds": 60
    }
}
```

이 명령은 SageMaker 훈련 작업 ARN 등 SageMaker AI를 통해 작업에 직접 액세스하는 데 사용할 수 있는 포괄적인 작업 정보를 반환합니다.

```
aws sagemaker describe-training-job \
    --training-job-name AWSBatch<my-simple-training-job><your-attempt-id>
```

훈련 작업에 대한 CloudWatch 로그를 보려면 먼저 로그 스트림 이름을 가져옵니다.

```
aws logs describe-log-streams \
    --log-group-name /aws/sagemaker/TrainingJobs \
    --log-stream-name-prefix AWSBatchmy-simple-training-job
```

출력:

```
{
    "logStreams": [
        {
            "logStreamName": "your-log-stream-name",
            "creationTime": 1753718830,
            "firstEventTimestamp": 1753718840,
            "lastEventTimestamp": 1753718850,
            "lastIngestionTime": 1753718860,
            "uploadSequenceToken": upload-sequence-token,
            "arn": "arn:aws:logs:your-region:your-account-id:log-group:/aws/sagemaker/TrainingJobs:log-stream:AWSBatch<my-simple-training-job><your-attempt-id>/algo-1-algo-id",
            "storedBytes": 0
        }
    ]
}
```

그런 다음 이전 응답의 로그 스트림 이름을 사용하여 로그를 검색합니다.

```
aws logs get-log-events \
    --log-group-name /aws/sagemaker/TrainingJobs \
    --log-stream-name your-log-stream-name
```

출력:

```
{
    "events": [
        {
            "timestamp": 1753718845,
            "message": "hello world",
            "ingestionTime": 1753718865
        }
    ],
    "nextForwardToken": "next-forward-token",
    "nextBackwardToken": "next-backward-token"
}
```

로그 출력에는 훈련 작업의 'hello world' 메시지가 표시되어 작업이 성공적으로 실행되었음을 확인해 줍니다.

## 7단계: 자습서 리소스 정리
<a name="getting-started-sagemaker-step-7"></a>

이 자습서를 완료했으면 지속적인 요금이 발생하지 않도록 생성한 리소스를 정리하세요.

먼저 작업 대기열을 비활성화하고 삭제합니다.

```
aws batch update-job-queue \
    --job-queue my-sm-training-fifo-jq \
    --state DISABLED
```

작업 대기열이 비활성화될 때까지 기다린 다음 삭제합니다.

```
aws batch delete-job-queue \
    --job-queue my-sm-training-fifo-jq
```

그런 다음 서비스 환경을 비활성화하고 삭제합니다.

```
aws batch update-service-environment \
    --service-environment TutorialServiceEnvironment \
    --state DISABLED
```

서비스 환경이 비활성화될 때까지 기다린 다음 삭제합니다.

```
aws batch delete-service-environment \
    --service-environment TutorialServiceEnvironment
```

## 추가 리소스
<a name="getting-started-sagemaker-additional-resources"></a>

자습서를 완료한 후 다음과 같은 주제를 살펴볼 수 있습니다.
+ PySDK에는 헬퍼 클래스와 유틸리티가 있으므로 서비스 작업 생성 및 작업 대기열 제출에 PySDK를 사용할 것이 권장됩니다. PySDK 사용에 대한 예제는 GitHub의 [SageMaker AI 예제](https://github.com/aws/amazon-sagemaker-examples)를 참조하세요.
+ [의 서비스 작업 AWS Batch](service-jobs.md)에 대해 자세히 알아보세요.
+ 보다 복잡한 훈련 작업 구성에 대해서는 [의 서비스 작업 페이로드 AWS Batch](service-job-payload.md) 섹션을 살펴보세요.
+ [에서 서비스 작업 제출 AWS Batch](service-job-submit.md) 및 `SubmitServiceJob` API에 대해 알아봅니다.
+ [AWS Batch 서비스 작업 상태를 SageMaker AI 상태로 매핑](service-job-status.md) 섹션을 검토하여 작업 상태 전환에 대해 이해합니다.
+ Python을 사용하여 다양한 기능과 함께 SageMaker 훈련 작업을 생성하고 제출하는 방법은 [SageMaker AI Python SDK 설명서](https://sagemaker.readthedocs.io/en/stable/)를 참조하세요.
+ 보다 복잡한 기계 학습 워크플로에 대해서는 [SageMaker 예제 노트북](https://github.com/aws/amazon-sagemaker-examples)을 살펴보세요.