Amazon에서 인크리멘탈 트레이닝 사용하기 SageMaker - Amazon SageMaker

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

Amazon에서 인크리멘탈 트레이닝 사용하기 SageMaker

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

점진적 훈련 사용:

  • 모델 성능이 좋지 않았던 이전 훈련에서 고려하지 않은 기본 패턴이 포함되어 있는 확장된 데이터 세트를 사용하여 새로운 모델을 훈련합니다.

  • 훈련 작업에서 모델 결과물 또는 공개적으로 사용 가능한 모델의 결과물 중 일부를 사용합니다. 새 모델을 처음부터 훈련할 필요는 없습니다.

  • 중지된 훈련 작업을 다시 시작합니다.

  • 다른 하이퍼파라미터 설정을 사용하거나 다른 데이터 세트를 사용하여 모델의 여러 변형을 훈련합니다.

훈련 작업에 대한 자세한 정보는 Amazon에서 모델 학습시키기 SageMaker 단원을 참조하세요.

SageMaker 콘솔 또는 Amazon SageMaker Python SDK를 사용하여 점진적으로 학습할 수 있습니다.

중요

현재 객체 감지 - MXNet, 이미지 분류 - MXNet, 의미 체계 분할 알고리즘의 세 가지 기본 제공 알고리즘에서만 점진적 훈련을 지원합니다.

점진적 훈련 수행(콘솔)

이 절차를 완료하려면 다음이 필요합니다.

  • 훈련 데이터를 저장한 Amazon Simple Storage Service(S3) 버킷 URI

  • 작업의 출력을 저장하고자 하는 S3 버킷 URI

  • 훈련 코드가 저장되는 Amazon Elastic 컨테이너 레지스트리 경로 자세한 내용은 Docker 레지스트리 경로 및 예제 코드를 참고하세요.

  • 점진적 훈련에 사용하려는 모델 결과물을 저장한 S3 버킷의 URL. 모델 결과물의 URL을 찾으려면 모델을 생성하는 데 사용한 훈련 작업의 세부 정보 페이지를 참조하세요. 세부 정보 페이지를 찾으려면 SageMaker 콘솔에서 Inference를 선택하고 모델을 선택한 다음 모델을 선택합니다.

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

점진적 훈련을 수행하려면(콘솔)
  1. https://console.aws.amazon.com/sagemaker/ 에서 아마존 SageMaker 콘솔을 엽니다.

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

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

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

  5. 사용하려는 알고리즘을 선택합니다. 알고리즘에 대한 자세한 정보는 Amazon의 내장 알고리즘 및 사전 훈련된 모델 SageMaker 단원을 참조하세요.

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

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

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

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

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

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

    2. InputMode경우 파일을 선택합니다. 점진적 훈련을 위해 파일 입력 모드를 사용해야 합니다.

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

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

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

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

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

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

    9. 완료를 선택합니다.

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

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

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

    3. InputMode경우 파일을 선택합니다. 모델 결과물은 파일로 저장됩니다.

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

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

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

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

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

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

    10. 완료를 선택합니다.

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

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

    2. (선택 사항) Encryption key(암호화 키)에서 AWS Key Management Service (AWS KMS) 암호화 키를 추가하여 유휴 상태의 출력 데이터를 암호화할 수 있습니다. 키 ID 또는 Amazon 리소스 번호(ARN)를 입력합니다. 자세한 정보는 KMS 관리형 암호화 키를 참조하세요.

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

  11. 교육 작업 생성을 선택합니다. SageMaker 교육 작업을 생성하고 실행합니다.

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

점진적 훈련 수행(API)

이 예제에서는 SageMaker API를 사용하여 SageMaker 이미지 분류 알고리즘과 Caltech 256 이미지 데이터셋을 사용하여 모델을 훈련시킨 다음 첫 번째 모델을 사용하여 새 모델을 훈련시키는 방법을 보여줍니다. Amazon S3를 입력 및 출력 소스에 사용합니다. 점진적 훈련 사용에 대한 자세한 정보는 점진적 훈련 샘플 노트북을 참조하세요.

참고

이 예에서는 점진적 훈련에 원래 데이터 세트를 사용했는데 새로 추가한 샘플이 포함된 데이터 세트처럼 다른 데이터 세트를 사용할 수도 있습니다. 새 모델을 훈련하려면 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 단원을 참조하세요.