ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SageMaker를 활용한 빅데이터 처리 및 훈련, 배포, 추론 수행
    MLOps/AWS 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)

     

    'MLOps > AWS' 카테고리의 다른 글

    [Sagemaker] Introduction  (0) 2024.05.19
    SageMaker 사이클 및 SDK 2.x 사용법  (0) 2024.02.29
    ECR  (0) 2024.02.27
    AWS CLI 사용 & 파이썬 SDK boto 설치  (0) 2024.02.27
Designed by Tistory.