-
SageMaker를 활용한 빅데이터 처리 및 훈련, 배포, 추론 수행MLOps/AWS 2024. 2. 27. 17:08
데이터 전처리 by 스파크 EMR
기본적으로 Data Mart 에서 가져와서 전처리 하는 경우 시간 및 유효성, 정합성에 문제가 없다면 고려X
- IF 데이터셋이 크다면? OOM 문제 발생…
- Spark EMR 클러스터를 사용해 처리 가능
단계
- EMR Notebook에서 대용량 파일 가져오기
- EC2 인스턴스에서 데이터 전처리: 데이터가 EMR 노트북에 의해 로드된 후, Amazon EC2(Elastic Compute Cloud) 인스턴스에서 데이터 전처리 작업
- S3에 Parquet 형식으로 데이터 저장: 전처리된 데이터는 최종적으로 Amazon S3(Simple Storage Service) 버킷에 Parquet 형식으로 저장
장점
- 다양한 데이터 소스 지원: S3, DynamoDB, RDS 등 AWS의 다양한 데이터 저장 서비스와 통합
사용 사례
- 데이터 처리 및 분석: 대규모 로그 분석, ETL 작업, 실시간 데이터 처리 등
- 머신 러닝: 대규모 데이터셋을 이용한 머신 러닝 모델 학습 및 평가
- 실시간 스트리밍 처리: 실시간 데이터 스트리밍 분석 및 처리
요금
단점
- 비용: 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 - IF 데이터셋이 크다면? OOM 문제 발생…