MLOps/AWS

SageMaker를 활용한 빅데이터 처리 및 훈련, 배포, 추론 수행

입짧은달님 2024. 2. 27. 17:08

데이터 전처리 by 스파크 EMR

기본적으로 Data Mart 에서 가져와서 전처리 하는 경우 시간 및 유효성, 정합성에 문제가 없다면 고려X

 

  • IF 데이터셋이 크다면? OOM 문제 발생…
    • Spark EMR 클러스터를 사용해 처리 가능

단계

  1. EMR Notebook에서 대용량 파일 가져오기
  2. EC2 인스턴스에서 데이터 전처리: 데이터가 EMR 노트북에 의해 로드된 후, Amazon EC2(Elastic Compute Cloud) 인스턴스에서 데이터 전처리 작업
  3. S3에 Parquet 형식으로 데이터 저장: 전처리된 데이터는 최종적으로 Amazon S3(Simple Storage Service) 버킷에 Parquet 형식으로 저장

장점

  • 다양한 데이터 소스 지원: S3, DynamoDB, RDS 등 AWS의 다양한 데이터 저장 서비스와 통합

사용 사례

  • 데이터 처리 및 분석: 대규모 로그 분석, ETL 작업, 실시간 데이터 처리 등
  • 머신 러닝: 대규모 데이터셋을 이용한 머신 러닝 모델 학습 및 평가
  • 실시간 스트리밍 처리: 실시간 데이터 스트리밍 분석 및 처리

요금

 

빅 데이터 처리 및 데이터 분석 – Amazon EMR 요금 – Amazon Web Services

 

aws.amazon.com

단점

  • 비용: AWS EMR은 관리형 서비스이므로, EC2 인스턴스 비용 외에 추가적인 EMR 비용이 발생
  • 데이터 전송 비용: 데이터를 AWS의 다른 서비스나 외부 시스템으로 전송할 때 추가 비용이 발생.. 특히 외부 시스템으로 전송 시 높은 비용

 

SageMaker에서 훈련 수행

  • SageMaker Studio 내의 Jupyterlab에서 수행

 

예제 모델: Object2Vec

  • Amazon에서 개발한 객체(텍스트, 이미지, 오디오…) → 벡터 변환 모델

훈련 단계

  • S3에 적재된 데이터 가져오기
  • 데이터셋 분할(훈련, 검증, 테스트)
    • 적절한 (.jsonl) 형식으로 변환
    • 준비된 데이터셋을 S3버킷에 다시 업로드
  • 알고리즘의 도커 이미지 가져오기
 container = get_image_uri(boto3.Session().region_name, 'object2vec') 
 #input: region name, name of the algorithm

 

  • Hyperparameter 정의 ( 레이어 수, vocab_size, 최적화 알고리즘 등…)
  • Object2Vec estimator의 훈련 및 검증
## get estimator
regressor = sagemaker.estimator.Estimator(container,
                                    role, 
                                    train_instance_count=1, 
                                    train_instance_type='ml.m5.4xlarge',  #ml.p2.xlarge
                                    output_path=output_path,
                                    sagemaker_session=sess)

## set hyperparameters
regressor.set_hyperparameters(**static_hyperparameters)

## train, tune, and test the model
regressor.fit(input_paths)
  • 훈련 시간: 인스턴스의 유형에 따라 달라짐,
    • 약 10만 행의 정형 데이터 이용, m5.4xlarge 인스턴스 기준 10에포크 완료 시에 2시간 정도 소요
  • 훈련 작업, 처리량 모니터링 (Training 섹션에서 확인 가능)
  • 추론 시 사용하도록 엔드포인트에 배포

 

훈련한 모델의 배포 및 추론 수행

배포

  • 세이지메이커 SDK는 훈련된 모델을 배포할 수 있는 메소드 제공
    • create_model 메서드를 통해 (데이터의)직렬, 역직렬 변환 전달
from sagemaker.predictor import json_serializer, json_deserializer

# create a model using the trained algorithm
regression_model = regressor.create_model(
                        serializer=json_serializer,
                        deserializer=json_deserializer,
                        content_type='application/json')

 

  • 모형 배포
# deploy the model
predictor = regression_model.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge')

 

엔드포인트 섹션에서 확인 가능

 

추론

  • RealTimePredictor 객체 생성 (엔드포인트를 input으로 받음)
from sagemaker.predictor import RealTimePredictor, json_serializer, json_deserializer
predictor = RealTimePredictor(endpoint='object2vec-2024-02-20-21-59-03-344', sagemaker_session=sess, serializer=json_serializer,
                                deserializer=json_deserializer,
                        content_type='application/json')
  • predict() 메소드 호출
  • 평가

 

Hyperparameter 최적화 수행

  • 매개변수 튜닝은 많은 리소스가 드는 작업…
    • SageMaker의 HPO (HyperParameter Optimization)을 통해 최적 조합 선택 자동화
  • 하이퍼파라미터 예시

  • 파이썬 SDK의 HyperparameterTuner 클래스 사용
    • 목표: 오차 감소
  • 조율작업 인스턴스화
    • 범위 정의
    • 목적 함수 지정
from time import gmtime, strftime 
from sagemaker.tuner import IntegerParameter, CategoricalParameter, ContinuousParameter, HyperparameterTuner

tuning_job_name = "object2vec-job-{}".format(strftime("%d-%H-%M-%S", gmtime()))

hyperparameters_ranges = { "learning_rate": ContinuousParameter(0.0004, 0.02),
                            "dropout": ContinuousParameter(0.0, 0.4),  
                            "enc_dim": IntegerParameter(1000, 2000),
                            "mlp_dim": IntegerParameter(256, 500),
                            "weight_decay": ContinuousParameter(0, 300) }     

objective_metric_name = 'validation:mean_squared_error'
  • Estimator 정의 → HyperparameterTuner 클래스에 입력 → tuner 객체를 데이터셋에 맞춤
  • Studio UI 혹은 SageMaker API를 통해 최적의 모델, 결과 조회
    • 하이퍼파라미터와 MSE간의 상관관계 여부 조회 가능

 

실험 관리

 
📌목적: 모형의 개발 및 실험 주기를 빠르게!
(훈련 → 조율 → 성능 모니터링 → 성능이 낮다면? train과 test 데이터 비교…)

 

SageMaker에서 제공하는 실험 관리 서비스

  • 실험 구성, 추적 및 평가 : 모형 순위표 생성, 성능 지표로 모델 비교
  • 훈련 실행 결과를 쉽게 조회 : 작업이름, 상태, 시작지간, 수정시간, 실패 이유 등으로 검색 가능
  • 모형의 버전 추적 : 사용한 훈련 데이터, 하이퍼파라미터 값, 성능, 버전 추적
  • UI 혹은 API로 접근 가능
    • API로 접근 시 boto3을 사용하여 검색 함수 호출

search_params={
   "MaxResults": 10,
   "Resource": "TrainingJob",
   "SearchExpression": { 
      "Filters": [{ 
            "Name": "AlgorithmSpecification.TrainingImage",
            "Operator": "Contains",
            "Value": "object2vec"
         }
     ]},
 # "SortBy": "Metrics.validation:mean_squared_error",
  "SortOrder": "Descending"
}
sgmclient = boto3.client(service_name='sagemaker')
results = sgmclient.search(**search_params)