BLOG

Amazon SageMaker 알고리즘에 파이프 입력 모드 사용하기
작성일: 2018-06-08

오늘 우리는 Amazon SageMaker의 내장 알고리즘을 위한 파이프 입력 모드 지원을 소개할 것입니다. 파이프 입력 모드에서는 데이터 세트가 먼저 다운로드되는 대신 교육 인스턴스로 직접 스트리밍 됩니다. 이는 교육 작업이 더 빨리 시작되고 더 빨리 완료되며 디스크 공간이 더 적게 필요함을 의미합니다. Amazon SageMaker 알고리즘은 빠르고 확장성이 뛰어나도록 설계되었습니다. 이 블로그 게시물에서는 파이프 입력 모드, 파이프 입력이 제공하는 이점, 그리고 교육 작업에 이를 활용할 수 있는 방법에 대해 설명합니다.

 

파이프 입력 모드에서는 디스크 I/O를 사용하지 않고 알고리즘 컨테이너에 데이터를 즉시 입력할 수 있습니다. 이 방식은 긴 다운로드 프로세스를 단축하고 시작 시간을 크게 단축합니다. 또한 일반적으로 파일 입력 모드보다 읽기 처리량이 우수합니다. 이는 최적화된 다중 스레드 백그라운드 프로세스를 통해 Amazon S3에서 데이터를 가져오게 하기 때문입니다. 또한 16 TB Amazon Elastic Block Store (EBS) 볼륨 크기 제한보다 훨씬 큰 데이터 세트에 대해서도 교육할 수 있습니다.

 

파이프 모드에서 다음을 사용할 수 있습니다.

 

  • 데이터가 교육 인스턴스로 다운로드되는 대신 스트리밍 되므로 시작 시간이 단축됩니다.
  • 고성능 스트리밍 에이전트로 인해 I/O처리량이 증가합니다.
  • 사실상 무제한 데이터 처리 용량입니다.

 

이제 내장된 Amazon SageMaker 알고리즘을 파일 또는 파이프 입력 모드에서 사용할 수 있습니다. 대규모 데이터 세트에는 파이프 모드가 권장되지만, 파일 모드는 메모리에 맞는 작은 파일과 알고리즘에 많은 수의 주기가 있는 파일에 여전히 유용합니다. 이제 두 입력 모드는 소규모 실험 훈련 작업부터 페타바이트 규모의 분산 훈련 작업에 이르기까지 다양한 사용 사례를 포괄합니다.

 

Amazon SageMaker 알고리즘

 

대부분의 1차 측의 Amazon SageMaker 알고리즘은 최적화된 protobuf 레코드IO 형식에서 가장 잘 작동합니다. 이러한 이유로 이 릴리스에서는 protobuf 레코드IO 형식에 대해서만 파이프 모드를 지원합니다. 다음 목록에 있는 알고리즘은 protobuf 레코드IO 인코딩 데이터 세트와 함께 사용할 경우 현재 파이프 입력 모드를 지원합니다.

 

  • 주 구성 요소 분석(PCA)
  • K-평균 클러스트링
  • 공장화 시스템
  • LDA(지연 Dirichlet 할당)
  • 선형 학습자(분류 및 회귀 분석)
  • 신경망 주제 모델링
  • 랜덤 컷 포레스트

 

벤치 마크

 

파이프 모드의 이점을 보여 주기 위해 뉴욕 시 택시 여행 레코드 데이터 세트에 대해 첫번째 파티 PCA 및 K-평균 알고리즘을 사용하여 작업을 실행했습니다. 이 데이터 세트는 AWS Open Data 저장소에서 공개적으로 사용할 수 있습니다.

 

다음 벤치 마크에 대해 SageMaker Python SDK를 사용하여 원래 데이터 세트를 protobuf 레코드IO 형식으로 변환했습니다. 변환 결과는 총 78.1 GiB의 1674개 파일이었다. 그런 다음 이 새 데이터 세트를 Amazon S3 경로에 업로드하고 교육 인스턴스에 액세스 할 수 있도록 했습니다.

 

첫번째 벤치 마크는 PCA 알고리즘을 사용하여 파이프 모드와 파일 모드를 비교합니다. 두 작업 모두 동일한 하이퍼 매개변수 세트로 실행됩니다.

 

 

파이프 모드에서는 대부분의 실험에서 시작 시간이 11.5분에서 1.5분으로 크게 단축됩니다. 또한 전체 I/O 처리량은 파일 모드의 2배 이상 빠릅니다. 이러한 개선 사항은 모두 총 교육 시간에 긍정적인 영향을 미쳤으며, 이는 최대 35%까지 단축되었습니다.

 

그런 다음 K-평균 알고리즘에 동일한 데이터세트를 사용했습니다. 이 데이터세트는 PCA보다 컴퓨팅 집약도가 훨씬 높고 매개 변수 서버 통신에 높은 네트워크 대역 폭이 필요합니다. 우리는 세개의 머신으로 구성된 클러스터에서 세번의 주기동안 교육을 실시했습니다.

 

 

다시 한번 말하지만, 파이프 모드를 사용하는 시작 시간은 예상했던 파일 모드의 시작 시간보다 상당히 빠릅니다. 파일 모드는 2차 주기에 파일 시스템 캐시를 활용할 수 있지만 파이프 모드의 전체 I/O 처리량은 여전히 파일 모드보다 빠릅니다. K-평균은 대부분 계산 바운드이기 때문에 총 교육 시간에 대한 파이프 모드의 영향은 PCA에 비해 덜 극적이지만 여전히 유의합니다. 전체적으로 파이프 모드 작업은 파일 모드 작업보다 10-25분 일찍 완료되었지만 EBS 볼륨은 10GB만 사용했습니다. PCA 및 K-평균 모델은 이 10GB보다 훨씬 작지만 경우에 따라 더 복잡한 모델(특히 체크 포인트가 있는 모델)이 이를 초과할 수 있습니다.

 

파이프 모드 사용 방법

 

Amazon SageMaker 콘솔

 

파이프 모드의 이점을 교육 작업에 활용하는 것은 매우 간단합니다. Amazon SageMaker 콘솔을 사용하는 경우에는 파이프를 작업의 입력 모드로 지정하기만 하면 됩니다.

 

 

Amazon SageMaker Python SDK

 

Amazon SageMaker Python SDK를 사용하면 프로그래밍 방식으로 교육 및 추론 작업을 쉽게 실행할 수 있습니다. SDK는 기술 세부 사항을 숨기고 Amazon SageMaker에 클린 API를 제공합니다. 다음 코드에서 SageMaker Python SDK를 사용하여 새 PCA교육 작업을 제출합니다. 파이프 모드를 활용하는 것은 input_mode 매개 변수의 값만 변경하는 것과 관련이 있습니다.

 

from sagemaker.amazon.pca import PCA

from sagemaker.amazon.amazon_estimator import RecordSet

 

# Input Mode (Pipe or File)

input_mode=”Pipe”

 

pca_estimator = PCA(role='<YOUR_AWS_ROLE_ARN>’,

                    train_instance_count=1,

                    train_instance_type='<PREFERRED_EC2_INSTANCE_TYPE>’,

                    input_mode=input_mode,

                    num_components=10)

 

records = RecordSet(s3_data=”<YOUR_TRAINING_DATASET>”,

                    s3_data_type=’S3Prefix’,

                    num_records=-1,

                    feature_dim=50)

 

pca_estimator.fit(records, mini_batch_size=1000)

 

Python용 AWS SDK(Boto3)

 

낮은 수준의 프로그램 액세스를 원하는 경우 AWS SDK for Python(Boto3)을 사용하여 파이프 모드로 교육 작업을 시작할 수 있습니다. 다음 코드에서는 Boto3 Python 클라이언트를 사용하여 새 PCA 작업을 제출하는 방법을 확인할 수 있습니다. 다시 말하지만, 입력_모드를 “파이프”로 설정하는 것이 필요합니다.

 

import boto3

 

sm_client = boto3.client(‘sagemaker’)

 

# Input Mode (Pipe or File)

input_mode=”Pipe”

 

# Training Job Name

job_name=”pca-pipe-mode-test”

 

# Role

role_arn=”<YOUR_AWS_ROLE_ARN>”

 

# Train, Test, and Output S3 Paths

trn_path=”<YOUR_TRAINING_DATASET>”

tst_path=”<YOUR_TEST_DATASET>”

out_path=”<OUTPUT_PATH_FOR_MODEL_ARTIFACTS>”

 

# Feature Dimension of the Dataset

feature_dim=”<FEATURE_DIMENSION_OF_YOUR_DATASET>”

 

# EC2 Instance Type

instance_type=”<PREFERRED_EC2_INSTANCE_TYPE>”

 

job_description = {

    “TrainingJobName”: job_name,

    “AlgorithmSpecification”: {

        “TrainingImage”: “382416733822.dkr.ecr.us-east-1.amazonaws.com/pca:latest”,

        “TrainingInputMode”: input_mode

    },

    “RoleArn”: role_arn,

    “HyperParameters”: {

        “num_components”: “10”,

        “feature_dim”: feature_dim,

        “mini_batch_size”: “10000”

    },

    “InputDataConfig”: [

        {

            “ChannelName”: “train”,                                                                                                                                                                  

            “DataSource”: {

                “S3DataSource”: {

                    “S3DataType”: “S3Prefix”,                                                                                                 

                    “S3Uri”: trn_path,                                                                                                                                                                    

                    “S3DataDistributionType”: “ShardedByS3Key”

                }

            },

            “ContentType”: “application/x-recordio-protobuf”,                                                                                                          

            “CompressionType”: “None”,                                                                                                                                                                         

            “RecordWrapperType”: “None”

        },

        {

            “ChannelName”: “test”,                                                                                                                                                                       

            “DataSource”: {

                “S3DataSource”: {

                    “S3DataType”: “S3Prefix”,

                    “S3Uri”: tst_path,

                    “S3DataDistributionType”: “FullyReplicated”

                }

            },

            “ContentType”: “application/x-recordio-protobuf”,                                                                                                                                                             

            “CompressionType”: “None”,                                                                                                                                                                         

            “RecordWrapperType”: “None”

        }

    ],

    “OutputDataConfig”: {

        “S3OutputPath”: out_path   

    },

    “ResourceConfig”: {

        “InstanceType”: instance_type,

        “InstanceCount”: 1,

        “VolumeSizeInGB”: 100

    },

    “StoppingCondition”: {

        “MaxRuntimeInSeconds”: 3600

    }

}

 

sm_client.create_training_job(**job_description)

 

결론

 

새로 도입된 파이프 입력 모드 지원 기능을 통해 Amazon SageMaker 알고리즘이 내장된 교육 작업을 그 어느 때보다 빠르게 실행할 수 있습니다. 기존 알고리즘과 원활하게 통합되며 데이터세트 저장 방법을 변경할 필요가 없습니다. “파이프”를 교육 작업의 입력 모드로 지정하기만 하면 오늘날 파이프 모드를 활용할 수 있습니다.

 

원문 URL: https://aws.amazon.com/ko/blogs/machine-learning/using-pipe-input-mode-for-amazon-sagemaker-algorithms/

** 메가존 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.