WiseN

[Reinvent2019] 관리형 데이터 처리 및 모델 평가 - Sagemaker Processing 소개

Dec 17, 2019   |   AWS

작성자_임성균

페이스북 공유하기 트위터 공유하기
Blog thumbnail

들어가며



안녕하십니까. GS네오텍 임성균입니다.

이번 블로그 포스팅은 Sagemaker의 새로운 기능인 Sagemaker Processing에 대해 소개해보려고 합니다. ‘Processing’이란 단어만 보았을때는 무엇인가 처리를 해주는 의미를 담고 있는데 과연 무슨 기능으로 ML(Machine Learning) 사용자를 지원하는지 확인하시면 좋을듯 합니다.

자 그럼 시작하겠습니다!

 

Amazon Sagemaker Processing 소개


ML(Machine Learning) 모델을 만들기 위해서 사전 처리(Pre-processing), 사후 처리(Post-processing) 및 모델 평가(Evaluation)라는 단어를 많이 들어보셨을 것 같습니다. 간단히 말씀드리면 Amazon Sagemaker Processing은 세가지의 기능을 쉽게 실행 할 수 있도록 지원합니다.

그렇다면 하나씩 살펴볼까요?

사전처리(Pre-processing)은 아무리 정확한 알고리즘으로 모델링을 하더라도 데이터 세트가 좋지 못하면 당연히 추론의 정확도가 떨어집니다. 그렇기 때문에 데이터 사전 처리 작업은 매우 중요합니다. 예를 들면 

  • 사용중인 ML 알고리즘에 사용되는 입력 형식으로 데이터 세트 변환
  • 기존 기능을 더욱 강력한 표현 방식으로 변환(핫 인코딩 범주형)
  • 숫자 기능 재조정 또는 정규화
  • 고급 기능 엔지니어링(우편 주소를 GPS 좌표로 대체)
  • 자연어 처리 애플리케이션용으로 텍스트 정리 및 토큰화 등

 

이러한 작업을 하기 위해서 데이터 세트를 가공하는 스크립트를 생성해야 하고, 변형된 Version을 저장할 필요가 있습니다. 사실, 데이터 분석을 통해 스크립트 자동화를 구축하고 이에 맞게 변경 시키는 일이 기계학습을 수행할 때 많은 수고를 필요로 합니다.

두번째로 데이터 분석을 통해 만들어진 ML 알고리즘의 결과가 응용 프로그램의 관점 혹은 사용자의 관점에서 적절하지 않을 수도 있습니다. 그러므로 사후 처리 작업이 추가로 필요하며, 규칙 필터링 혹은 모델을 조합하거나 통합을 하는 방법이 일반적입니다.

마지막 용어는 모델평가(Evaluation)입니다. 만들어진 알고리즘에 평가를 말하는 것인데 다양한 학습 단계 데이터 세트를 기준으로 새 데이터 및 향후 데이터에 대한 ​대상을 제대로 예측할 수 있는지 여부를 판단해야 합니다. 여기서 당연히 학습 단계에 사용되지 않은 레이블이 지정된 데이터를 평가 단계에서 사용해야 할 것입니다.

용어 정리를 모두 마쳤습니다. ML을 하기 위해서는 이러한 산을 단계적으로 넘어야 합니다. 그리고 바로 이 과정을 편리하게 도움 줄 수 있는 서비스가 Amazon Sagemaker Processing입니다.

전체 예제는 아래 링크를 통해 확인할 수 있습니다!

Github - awslabs / amazon-sagemaker-examples

 

 

Amazon Sagemaker Processing 데모


Data Scientist이거나 ML Engineer, ML 초보자이신분도 Amazon Sagemaker에서 사전 처리, 사후 처리 및 모델 평가 워크로드를 쉽게 실행할 수 있게 해주는 새로운 Python SDK를 소개합니다.

이 SDK는 Dataset 변환에 있어서 가장 잘 알려진 라이브러리, SageMaker의 Scikit-learn용 기본 제공 컨테이너을 사용합니다.

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

 

▨ WorkLoad

처리 작업은 Simple Storage Service(Amazon S3)에서 입력을 다운로드 한 다음 처리 작업 중 또는 처리 후 출력을 Amazon S3에 업로드합니다​.

 ● 이번 DEMO의 과정을 간단히 살펴보겠습니다.

1. 정리(clean), 사전 처리, 기능 엔지니어링 처리 작업 수행하고 입력 데이터를 학습 및 테스트 세트로 분할하는 sckit-learn 스크립트를 실행합니다.

2. 사전 처리된 훈련 데이터에서 훈련 작업을 실행하여 모델을 훈련합니다.

3. 사전 처리된 테스트 데이터에서 처리 작업을 실행하여 훈련 된 모델의 성능을 평가합니다.

4. 마지막으로 자체 사용자 정의 컨테이너를 사용하여 자체 Python 라이브러리 및 종속성으로 처리 작업을 실행합니다.

 ● Goal: 이 데이터 세트에서 기능을 선택하고 데이터를 정리한 후 데이터를 훈련 알고리즘이 이진 분류 모델을 학습하는 데 사용할 수있는 기능으로 변환하고 데이터를 기차 및 테스트 세트로 분할합니다.

 ● Dataset : DEMO에 사용된 데이터세트는 인구 조사 소득 KDD 데이터 세트입니다.​ 이 작업은 센서스 응답자를 나타내는 행의 수입이 $ 50,000보다 큰지 또는 $ 50,000 미만인지를 예측하는 것입니다. 데이터 세트는 클래스 불균형이 심하며 대부분의 레코드는 $ 50,000 미만의 수입으로 표시됩니다. 로지스틱 회귀 모델을 학습 한 후 홀드 아웃 테스트 데이터 집합에 대해 모델을 평가하고 각 레이블의 정밀도, 리콜 및 F1 점수, 모델의 정확도 및 ROC AUC를 포함한 분류 평가 지표를 저장합니다.

 

▨ DEMO

Data pre-processing and feature engineering 단계입니다. scikit-learn 사전 처리 스크립트를 처리 작업으로 실행하려면 제공된 scikit-learn 이미지를 사용하여 처리 작업 내에서 스크립트를 실행할 수있는 SKLearn Processor를 작성합니다.

 

preprocessing.py는 사전 처리 스크립트가 포함된 코드입니다. 이 스크립트를 업데이트하여 데이터를 사전처리할 수 있습니다.
이 스크립트는 :

 1. 충돌하는 데이터가 있는 중복 및 행 제거합니다.

 2. 목표 소득 항목을 두개의 레이블이 포함된 열로 변환합니다.

 3. 고용주 숫자 열에서 일한 연령과 인원을 비닝하여 범주형 기능으로 변환합니다.

 4. 지속적인 자본 이득, 자본 손실 및 주식의 배당 규모를 조정하여 훈련에 적합​합니다.

 5. 교육, 주요 산업 코드, 작업자 클래스를 인코딩하여 교육에 적합​합니다.

 6.​ 데이터를 교육 및 테스트 데이터 세트로 분할하고 교육 기능 및 레이블과 테스트 기능 및 레이블을 저장합니다.

 

이 스크립트는 SKLearnProcessor.run() method를 이용한 처리작업 실행입니다. run () 메소드에 하나의 ProcessingInput을 제공합니다. 여기서 소스는 Amazon S3의 인구 조사 데이터 세트이고 스크립트는이 데이터를 읽는 위치입니다 (이 경우 / opt / ml / processing / input). 처리 컨테이너 내부의 이러한 로컬 경로는 / opt / ml / processing /으로 시작해야합니다.

또한 run () 메소드에 ProcessingOutput을 이용하여 스크립트가 출력 데이터를 쓰는 경로입니다. 출력 대상(s3 : // sagemaker- - / / output / ​)

run () 메소드의 arguments 매개 변수는 preprocessing.py 스크립트의 명령행 인수입니다.

다음은 Pre-processed data를 사용한 training단계입니다. train.py를 사용하여 훈련 작업을 실행하는 데 사용할 SKLearn 인스턴스를 만듭니다.

 

train.py는 훈련 데이터에 대한 로지스틱 회귀 모델을 훈련시키고, 모델을 / opt / ml / model 디렉토리에 저장합니다. 이 디렉토리는 Amazon Sagemaker가 tar하고 모델 종료시 S3에 model.tar.gz 파일로 업로드합니다.

사전 처리 된 교육 데이터에서 train.py를 사용하여 Training 실행합니다.

 

마지막으로 모델 평가 단계입니다. evaluation.py는 모델 평가 스크립트를 이용하여 평가하게 됩니다. 스크립트는 scikit-learn을 종속성으로 사용하여 실행되므로 이전에 작성한 SKLearnProcessor를 사용하여 실행하도록 합니다.  이 스크립트는 학습 된 모델과 테스트 데이터 세트를 입력으로 사용하고 각 레이블의 정밀도, 리콜 및 F1 점수, 모델의 정확도 및 ROC AUC를 포함한 분류 평가 지표가 포함 된 JSON 파일을 생성합니다.​(예제 링크에 첨부)

 

평가 보고서가 포함된 Amazon S3에서 evaluation.json 파일을 검색하게 되면 다음과 같은 결과화면이 나옵니다.

 

★ 자체 컨테이너를 사용하여 데이터 사전처리

위에서 scikit-learn이 설치된 처리 컨테이너를 사용했지만 처리 작업에서 자체 처리 컨테이너를 실행할 수 있으며 처리 컨테이너 내에서 실행할 스크립트를 계속 제공 할 수 있습니다.

아래에서는 처리 컨테이너를 만드는 방법과 ScriptProcessor를 사용하여 컨테이너 내에서 고유 코드를 실행하는 방법을 설명합니다. scikit-learn 컨테이너를 작성하고 위에서 사용한 것과 동일한 preprocessing.py 스크립트를 사용하여 처리 작업을 실행하십시오. 이 컨테이너 내에 고유 한 종속성을 제공하여 처리 스크립트를 실행할 수 있습니다.​​


 

이 코드 블록은 docker 명령을 사용하여 컨테이너를 빌드하고 Amazon ECR (Amazon Elastic Container Registry) 리포지토리를 생성한 다음 이미지를 Amazon ECR로 푸시합니다.

 

위에서 실행했던 것과 동일한 preprocessing.py 스크립트를 실행하지만 이제이 코드는 Amazon Sagemaker가 유지 관리하는 scikit-learn 이미지가 아니라이 노트북에서 빌드 한 Docker 컨테이너 내에서 실행되고 있습니다. Docker 이미지에 종속성을 추가하고이 컨테이너 내에서 고유 한 사전 처리, 기능 엔지니어링 및 모델 평가 스크립트를 실행할 수 있습니다.


 

어떠셨나요? ML 알고리즘에서 일련의 과정을 모두 끝내신겁니다. 코드 작성만으로도 일사천리지 않으셨나요?

 

마치며



DEMO를 설명하기 위해 포스팅이 조금 길어졌네요! 사후 처리 및 모델 평가에 대해서도 동일한 작업을 실행할 수 있습니다.

현재 Amazon Sagemaker를 사용할 수 있는 모든 상용 리전에서 Amazon Sagemaker Processing 기능을 모두 사용할 수 있습니다.

오늘의 포스팅은 여기서 마무리하겠습니다. 읽어주셔서 감사합니다. 끝!!​