

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

# Amazon SageMaker AI에서 점진적 훈련 사용
<a name="incremental-training"></a>

시간이 흐름에 따라 모델이 이전만큼 좋은 추론을 생성하지 않는다는 사실을 알 수 있습니다. 점진적 훈련을 적용하면 기존 모델의 결과물 및 확장된 데이터 세트를 사용하여 새로운 모델을 훈련할 수 있습니다. 점진적 훈련은 시간 및 리소스를 둘 다 절약할 수 있습니다.

점진적 훈련 사용:
+ 모델 성능이 좋지 않았던 이전 훈련에서 고려하지 않은 기본 패턴이 포함되어 있는 확장된 데이터 세트를 사용하여 새로운 모델을 훈련합니다.
+ 훈련 작업에서 모델 결과물 또는 공개적으로 사용 가능한 모델의 결과물 중 일부를 사용합니다. 새 모델을 처음부터 훈련할 필요는 없습니다.
+ 중지된 훈련 작업을 다시 시작합니다.
+ 다른 하이퍼파라미터 설정을 사용하거나 다른 데이터 세트를 사용하여 모델의 여러 변형을 훈련합니다.

훈련 작업에 대한 자세한 정보는 [Amazon SageMaker를 사용한 모델 훈련](how-it-works-training.md) 섹션을 참조하세요.

SageMaker AI 콘솔 또는 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)를 사용하여 점진적으로 훈련할 수 있습니다.

**중요**  
현재 [객체 감지 - MXNet](object-detection.md), [이미지 분류 - MXNet](image-classification.md), [의미 체계 분할 알고리즘](semantic-segmentation.md)의 세 가지 기본 제공 알고리즘에서만 점진적 훈련을 지원합니다.

**Topics**
+ [점진적 훈련 수행(콘솔)](#incremental-training-console)
+ [점진적 훈련 수행(API)](#incremental-training-api)

## 점진적 훈련 수행(콘솔)
<a name="incremental-training-console"></a>

이 절차를 완료하려면 다음이 필요합니다.
+ 훈련 데이터를 저장한 Amazon Simple Storage Service(S3) 버킷 URI
+ 작업의 출력을 저장하고자 하는 S3 버킷 URI 
+ 훈련 코드가 저장되는 Amazon Elastic 컨테이너 레지스트리 경로 자세한 내용은 [Docker 레지스트리 경로 및 예제 코드](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths)를 참고하세요.
+ 점진적 훈련에 사용하려는 모델 결과물을 저장한 S3 버킷의 URL. 모델 결과물의 URL을 찾으려면 모델을 생성하는 데 사용한 훈련 작업의 세부 정보 페이지를 참조하세요. 세부 정보 페이지를 확인하려면 SageMaker AI 콘솔에서 **추론**, **모델**을 선택한 후에 해당 모델을 선택합니다.

중지된 훈련 작업을 다시 시작하려면 모델 또는 완료된 훈련 작업에서 하는 것처럼 세부 정보 페이지에 저장된 모델 결과물에 대한 이 URL을 사용합니다.

**점진적 훈련을 수행하려면(콘솔)**

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

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

1. **훈련 작업 생성**을 선택합니다.

1. 훈련 작업의 이름을 입력합니다. 이름은 AWS 계정의 AWS 리전 내에서 고유해야 합니다. 훈련 작업 이름은 1\~63자여야 합니다. 유효한 문자: a-z, A-Z, 0-9 및 . : \+ = @ \_ % -(하이픈)

1. 사용하려는 알고리즘을 선택합니다. 알고리즘에 대한 자세한 정보는 [Amazon SageMaker 기본 제공 알고리즘 또는 사전 훈련된 모델 사용](algos.md) 섹션을 참조하세요.

1. (선택 사항) **리소스 구성**에서 기본값을 그대로 두거나 리소스 사용량을 늘려 계산 시간을 줄일 수 있습니다.

   1. (선택 사항) **인스턴스 유형**에서, 사용하려는 ML 컴퓨팅 인스턴스 유형을 선택합니다. 대다수의 경우에 **ml.m4.xlarge**이면 충분합니다.

   1. **인스턴스 수**에, 기본값인 1을 사용합니다.

   1. (선택 사항) **인스턴스당 추가 볼륨 크기(GB)**에서 프로비저닝하려는 ML 스토리지 볼륨의 크기를 선택합니다. 대부분의 경우 기본값인 1을 사용할 수 있습니다. 큰 데이터세트를 사용하는 경우에는 더 큰 크기를 사용합니다.

1. 훈련 데이터세트에 필요한 입력 데이터에 대한 정보를 제공합니다.

   1. **채널 이름**은 기본값(**train**)을 그대로 두거나 훈련 데이터 세트에 대해 유의미한 이름을 입력합니다(예: **expanded-training-dataset**).

   1. **InputMode**에서 **파일**을 선택합니다. 점진적 훈련을 위해 파일 입력 모드를 사용해야 합니다.

   1. **S3 데이터 배포 유형**에서 **FullyReplicated**를 선택합니다. 이렇게 하면 각 ML 컴퓨팅 인스턴스가 점진적으로 훈련할 때 확장된 데이터 세트의 전체 복제본을 사용합니다.

   1. 확장된 데이터 세트가 압축되어 있지 않을 때는 **압축 유형**을 **없음**으로 설정합니다. 확장된 데이터 세트가 Gzip을 사용하여 압축된 경우에는 압축 유형을 **Gzip**으로 설정합니다.

   1. (선택 사항) 파일 입력 모드를 사용하는 경우에는 **콘텐츠 유형**은 비워둡니다. 파이프 입력 모드의 경우 적절한 MIME 유형을 지정합니다. *콘텐츠 유형*은 데이터의 Multipurpose Internet Mail Extensions(MIME) 유형입니다.

   1. 데이터 세트가 RecordIO 형식으로 저장된 경우에는 **레코드 래퍼**로 **RecordIO**를 선택합니다. 데이터 세트가 RecordIO 형식 파일로 저장되지 않은 경우 **없음**을 선택합니다.

   1. 데이터 세트가 단일 파일로 저장된 경우 **S3 데이터 유형**에서 **S3Prefix**를 선택합니다. 데이터 세트가 하나의 폴더 내에 여러 파일로 저장된 경우에는 **매니페스트**를 선택합니다.

   1. **S3 위치**에, 확장된 데이터 세트를 저장한 경로에 대한 URL을 입력합니다.

   1. **완료**를 선택합니다.

1. 훈련 작업의 모델 결과물을 사용하려면 새 채널을 추가하고 해당 모델 결과물에 대해 필요한 정보를 제공해야 합니다.

   1. **입력 데이터 구성**에서 **채널 추가**를 선택합니다.

   1. **채널 이름**에, 채널을 모델 결과물의 소스로 식별할 수 있는 **model**을 입력합니다.

   1. **InputMode**에서 **파일**을 선택합니다. 모델 결과물은 파일로 저장됩니다.

   1. **S3 데이터 배포 유형**에서 **FullyReplicated**를 선택합니다. 이는 각 ML 컴퓨팅 인스턴스가 훈련에 모든 모델 결과물을 사용해야 함을 나타냅니다.

   1. 채널에 모델을 사용하고 있기 때문에 **압축 유형**에서 **없음**을 선택합니다.

   1. **콘텐츠 유형**은 비워 둡니다. 콘텐츠 유형은 데이터의 Multipurpose Internet Mail Extensions(MIME) 유형입니다. 모델 결과물은 비워 둡니다.

   1. 모델 결과물이 RecordIO 형식으로 저장되지 않았기 때문에 **레코드 래퍼**를 **없음**으로 설정합니다.

   1. 기본 제공 알고리즘을 사용하거나 모델을 단일 파일로 저장하는 알고리즘을 사용 중인 경우 **S3 데이터 유형**에서 **S3Prefix**를 선택합니다. 모델을 여러 파일로 저장하는 알고리즘을 사용 중인 경우에는 **매니페스트**를 선택합니다.

   1. **S3 위치**에, 모델 결과물을 저장한 경로에 대한 URL을 입력합니다. 일반적으로 모델은 `model.tar.gz`라는 이름으로 저장됩니다. 모델 결과물에 대한 URL을 찾으려면 탐색 창에서 **추론**을 선택한 후 **모델**을 선택합니다. 모델 목록에서 모델을 선택하면 세부 정보 페이지가 표시됩니다. 모델 결과물의 URL이 **기본 컨테이너** 아래에 나열됩니다.

   1. **완료**를 선택합니다.

1. **출력 데이터 구성**에 다음 정보를 입력합니다.

   1. **S3 위치**에 출력 데이터를 저장하려는 S3 버킷의 경로를 입력합니다.

   1. (선택 사항) **Encryption key(암호화 키)**에서 AWS Key Management Service (AWS KMS) 암호화 키를 추가하여 유휴 상태의 출력 데이터를 암호화할 수 있습니다. 키 ID 또는 Amazon 리소스 번호(ARN)를 입력합니다. 자세한 정보는 [KMS 관리형 암호화 키](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html)를 참조하세요.

1. (선택 사항) **태그**에, 훈련 작업에 하나 이상의 태그를 추가합니다. *태그*는 정의하고 AWS 리소스에 할당할 수 있는 메타데이터입니다. 이 경우, 태그를 사용하여 훈련 작업을 관리할 수 있습니다. 태그는 사용자가 정의하는 키와 값으로 구성됩니다. 예를 들어, **Project**를 키로 사용하고, 훈련 작업과 관련된 프로젝트를 지칭하는 값(예: **Home value forecasts**)을 사용하여 태그를 생성하려고 합니다.

1. **훈련 작업 생성**을 선택합니다. SageMaker AI는 훈련 작업을 만들고 실행합니다.

훈련 작업이 완료되면, 새로 훈련된 모델 아티팩트가 **출력 데이터 구성** 필드에서 제공한 **S3 출력 경로** 아래에 저장됩니다. 예측을 얻기 위해 모델을 배포하려면 [Amazon EC2에 모델 배포](ex1-model-deployment.md) 섹션을 참조하세요.

## 점진적 훈련 수행(API)
<a name="incremental-training-api"></a>

이 예시에서는 SageMaker AI API를 사용하여 SageMaker AI 이미지 분류 알고리즘과 [Caltech 256 이미지 데이터세트](https://data.caltech.edu/records/nyy15-4j048)로 모델을 훈련한 다음, 훈련된 첫 번째 모델을 사용하여 새 모델을 훈련하는 방법을 보여줍니다. Amazon S3를 입력 및 출력 소스에 사용합니다. 점진적 훈련 사용에 대한 자세한 정보는 [점진적 훈련 샘플 노트북](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/imageclassification_caltech/Image-classification-incremental-training-highlevel.html)을 참조하세요.

**참고**  
이 예에서는 점진적 훈련에 원래 데이터 세트를 사용했는데 새로 추가한 샘플이 포함된 데이터 세트처럼 다른 데이터 세트를 사용할 수도 있습니다. 새 모델을 훈련하려면 S3에 새 데이터 세트를 업로드하고 사용된 `data_channels` 변수를 조정합니다.

필요한 권한을 부여하는 AWS Identity and Access Management (IAM) 역할을 가져오고 환경 변수를 초기화합니다.

```
import sagemaker
from sagemaker import get_execution_role

role = get_execution_role()
print(role)

sess = sagemaker.Session()

bucket=sess.default_bucket()
print(bucket)
prefix = 'ic-incr-training'
```

Image Classification 알고리즘에 대한 훈련 이미지를 가져옵니다.

```
from sagemaker.amazon.amazon_estimator import get_image_uri

training_image = get_image_uri(sess.boto_region_name, 'image-classification', repo_version="latest")
#Display the training image
print (training_image)
```

훈련 및 검증 데이터 세트를 다운로드한 다음 Amazon Simple Storage Service(S3)에 업로드합니다.

```
import os
import urllib.request
import boto3

# Define a download function
def download(url):
    filename = url.split("/")[-1]
    if not os.path.exists(filename):
        urllib.request.urlretrieve(url, filename)

# Download the caltech-256 training and validation datasets
download('http://data.mxnet.io/data/caltech-256/caltech-256-60-train.rec')
download('http://data.mxnet.io/data/caltech-256/caltech-256-60-val.rec')

# Create four channels: train, validation, train_lst, and validation_lst
s3train = 's3://{}/{}/train/'.format(bucket, prefix)
s3validation = 's3://{}/{}/validation/'.format(bucket, prefix)

# Upload the first files to the train and validation channels
!aws s3 cp caltech-256-60-train.rec $s3train --quiet
!aws s3 cp caltech-256-60-val.rec $s3validation --quiet
```

훈련 하이퍼파라미터를 정의합니다.

```
# Define hyperparameters for the estimator
hyperparams = { "num_layers": "18",
                "resize": "32",
                "num_training_samples": "50000",
                "num_classes": "10",
                "image_shape": "3,28,28",
                "mini_batch_size": "128",
                "epochs": "3",
                "learning_rate": "0.1",
                "lr_scheduler_step": "2,3",
                "lr_scheduler_factor": "0.1",
                "augmentation_type": "crop_color",
                "optimizer": "sgd",
                "momentum": "0.9",
                "weight_decay": "0.0001",
                "beta_1": "0.9",
                "beta_2": "0.999",
                "gamma": "0.9",
                "eps": "1e-8",
                "top_k": "5",
                "checkpoint_frequency": "1",
                "use_pretrained_model": "0",
                "model_prefix": "" }
```

예측기 객체를 생성하고 훈련 및 검증 데이터 세트를 사용하여 첫 번째 모델을 훈련합니다.

```
# Fit the base estimator
s3_output_location = 's3://{}/{}/output'.format(bucket, prefix)
ic = sagemaker.estimator.Estimator(training_image,
                                   role,
                                   instance_count=1,
                                   instance_type='ml.p2.xlarge',
                                   volume_size=50,
                                   max_run=360000,
                                   input_mode='File',
                                   output_path=s3_output_location,
                                   sagemaker_session=sess,
                                   hyperparameters=hyperparams)

train_data = sagemaker.inputs.TrainingInput(s3train, distribution='FullyReplicated',
                                        content_type='application/x-recordio', s3_data_type='S3Prefix')
validation_data = sagemaker.inputs.TrainingInput(s3validation, distribution='FullyReplicated',
                                             content_type='application/x-recordio', s3_data_type='S3Prefix')

data_channels = {'train': train_data, 'validation': validation_data}

ic.fit(inputs=data_channels, logs=True)
```

모델을 사용하여 다른 모델을 점진적으로 훈련하려면 새 예측기 객체를 생성하고 `model_uri` 입력 인수에 모델 결과물(이 예에서는 `ic.model_data`)을 사용합니다.

```
# Given the base estimator, create a new one for incremental training
incr_ic = sagemaker.estimator.Estimator(training_image,
                                        role,
                                        instance_count=1,
                                        instance_type='ml.p2.xlarge',
                                        volume_size=50,
                                        max_run=360000,
                                        input_mode='File',
                                        output_path=s3_output_location,
                                        sagemaker_session=sess,
                                        hyperparameters=hyperparams,
                                        model_uri=ic.model_data) # This parameter will ingest the previous job's model as a new channel
incr_ic.fit(inputs=data_channels, logs=True)
```

훈련 작업이 완료되면 새로 훈련된 모델 결과물이 `Output_path`에 입력한 `S3 output path` 아래에 저장됩니다. 예측을 얻기 위해 모델을 배포하려면 [Amazon EC2에 모델 배포](ex1-model-deployment.md) 섹션을 참조하세요.