Site icon 지락문화예술공작단

Amazon SageMaker Processing – 완전 관리형 데이터 처리 및 모델 평가

Amazon SageMaker Processing – 완전 관리형 데이터 처리 및 모델 평가

Amazon SageMaker의 새로운 기능인  SageMaker Processing은 사전 처리, 사후 처리 및 모델 평가 워크로드를 쉽게 실행할 수 있습니다. 정확한 ML(기계 학습) 모델 학습을 위해서는 여러 가지 단계가 필요하지만 다음과 같은 데이터 세트 사전 처리보다 더 중요한 단계는 없습니다.

이러한 작업에는 데이터 세트에서 맞춤형 스크립트를 실행하고, 나중에 학습 작업에서 사용할 수 있도록 처리된 버전을 저장하는 작업이 포함됩니다. 여러분도 짐작할 수 있듯이 이러한 스크립트를 수동으로 실행하거나, 자동화 도구를 구축하고 확장하는 일은 ML 팀에게는 그리 흥미로운 업무가 아닙니다. 사후 처리 작업(필터링, 데이터 정렬 등) 및 모델 평가 작업(다양한 테스트 세트를 기준으로 모델 평가)의 경우도 마찬가지입니다.

우리는 바로 이 문제를 해결하기 위해 만든 본 기능을 좀 더 자세히 설명해드리겠습니다.

Amazon SageMaker Processing 소개
데이터 과학자와 ML 엔지니어가 Amazon SageMaker에서 사전 처리, 사후 처리 및 모델 평가 워크로드를 쉽게 실행할 수 있게 해주는 새로운 Python SDK를 소개합니다.

이 SDK는 데이터 세트 변환에 있어서 가장 잘 알려진 라이브러리인 SageMaker의 scikit-learn용 기본 제공 컨테이너를 사용합니다.

다른 기능이 필요한 경우 Docker 이미지 사양을 준수할 필요 없이 고유한 Docker 이미지를 사용할 수도 있습니다. 이렇게 하면 Amazon ECSAmazon Elastic Kubernetes Service 같은 AWS 컨테이너 서비스, 온프레미스 여부와 관계없이 원하는 모든 코드를 실행할 수 있는 최대의 유연성을 활용할 수 있습니다.

scikit-learn 데모를 간단하게 살펴보겠습니다. 그런 후 자체 컨테이너의 사용에 대해 간략하게 설명하겠습니다. 전체 예는 Github에서 볼 수 있습니다.

Scikit-Learn 컨테이너를 사용하여 데이터 사전 처리
SageMaker Processing SDK를 사용하여 scikit-learn 작업을 실행하는 방법은 다음과 같습니다.

우선 SKLearnProcessor 객체를 만들고, 사용할 scikit-learn 버전과 관리형 인프라 요구 사항을 전달합니다.

from sagemaker.sklearn.processing import SKLearnProcessor
sklearn_processor = SKLearnProcessor(framework_version='0.20.0',
                                     role=role,
                                     instance_count=1,
                                     instance_type='ml.m5.xlarge')

그런 다음 사전 처리 스크립트(잠시 후 설명 예정)를 실행합니다.

from sagemaker.processing import ProcessingInput, ProcessingOutput
sklearn_processor.run(
    code='preprocessing.py',
    # arguments = ['arg1', 'arg2'],
    inputs=[ProcessingInput(
        source='dataset.csv',
        destination='/opt/ml/processing/input')],
    outputs=[ProcessingOutput(source='/opt/ml/processing/output/train'),
        ProcessingOutput(source='/opt/ml/processing/output/validation'),
        ProcessingOutput(source='/opt/ml/processing/output/test')]
)

이것으로 완료되었습니다! 이제 사전 처리 스크립트의 구조를 살펴보면서 정리해보겠습니다.

import pandas as pd
from sklearn.model_selection import train_test_split
# Read data locally 
df = pd.read_csv('/opt/ml/processing/input/dataset.csv')
# Preprocess the data set
downsampled = apply_mad_data_science_skills(df)
# Split data set into training, validation, and test
train, test = train_test_split(downsampled, test_size=0.2)
train, validation = train_test_split(train, test_size=0.2)
# Create local output directories
try:
    os.makedirs('/opt/ml/processing/output/train')
    os.makedirs('/opt/ml/processing/output/validation')
    os.makedirs('/opt/ml/processing/output/test')
except:
    pass
# Save data locally
train.to_csv("/opt/ml/processing/output/train/train.csv")
validation.to_csv("/opt/ml/processing/output/validation/validation.csv")
test.to_csv("/opt/ml/processing/output/test/test.csv")
print('Finished running processing job')

Amazon S3 버킷을 잠시 살펴보면 파일이 성공적으로 처리되고 저장되었음을 알 수 있습니다. 이제 이 결과물을 SageMaker 학습 작업의 입력으로 곧바로 사용할 수 있습니다.

$ aws s3 ls --recursive s3://sagemaker-us-west-2-123456789012/sagemaker-scikit-learn-2019-11-20-13-57-17-805/output
2019-11-20 15:03:22 19967 sagemaker-scikit-learn-2019-11-20-13-57-17-805/output/test.csv
2019-11-20 15:03:22 64998 sagemaker-scikit-learn-2019-11-20-13-57-17-805/output/train.csv
2019-11-20 15:03:22 18058 sagemaker-scikit-learn-2019-11-20-13-57-17-805/output/validation.csv

자체 컨테이너를 사용하는 경우에는 어떨까요?

자체 컨테이너를 사용하여 데이터 사전 처리
잘 알려진 spaCy 라이브러리를 사용하여 텍스트 데이터를 사전 처리한다고 가정해보겠습니다. 이 작업에 사용할 일반 Docker 컨테이너를 정의하는 방법은 다음과 같습니다.

FROM python:3.7-slim-buster
# Install spaCy, pandas, and an english language model for spaCy.
RUN pip3 install spacy==2.2.2 && pip3 install pandas==0.25.3
RUN python3 -m spacy download en_core_web_md
# Make sure python doesn't buffer stdout so we get logs ASAP.
ENV PYTHONUNBUFFERED=TRUE
ENTRYPOINT ["python3"]

그런 다음 Docker 컨테이너를 빌드하고, 로컬에서 테스트한 다음 관리형 Docker 레지스트리 서비스인 Amazon Elastic Container Registry로 푸시합니다.

다음 단계는 ScriptProcessor 객체를 사용하여 사전 처리 작업을 구성하고 앞서 빌드하고 푸시한 컨테이너의 이름을 전달하는 것입니다.

from sagemaker.processing import ScriptProcessor
script_processor = ScriptProcessor(image_uri='123456789012.dkr.ecr.us-west-2.amazonaws.com/sagemaker-spacy-container:latest',
                role=role,
                instance_count=1,
                instance_type='ml.m5.xlarge')

마지막으로 위의 예제에서 했던 대로 작업을 실행합니다.

script_processor.run(code='spacy_script.py',
    inputs=[ProcessingInput(
        source='dataset.csv',
        destination='/opt/ml/processing/input_data')],
    outputs=[ProcessingOutput(source='/opt/ml/processing/processed_data')],
    arguments=['tokenizer', 'lemmatizer', 'pos-tagger']
)

나머지 과정은 위의 예제와 동일합니다. 즉, 컨테이너에 입력을 복사하고, 컨테이너에서 출력을 S3에 복사합니다.

정말 간단하지 않나요? 사전 처리에 초점을 맞췄지만, 앞서 말했듯이 사후 처리 및 모델 평가에 대해서도 동일한 작업을 실행할 수 있습니다. 예제는 Github에서 확인하실 수 있습니다.

지금 이용 가능
현재 Amazon SageMaker를 사용할 수 있는 모든 상용 리전에서 사용할 수 있습니다.

사용해 보시고 피드백이 있으면 Amazon SageMaker에 대한 AWS 포럼 또는 평소에 연락하는 AWS Support 담당자를 통해 알려주시기 바랍니다.

Julien

Source: Amazon SageMaker Processing – 완전 관리형 데이터 처리 및 모델 평가

Exit mobile version