About me
home
Portfolio
home

AWS 정리

생성일
2023/07/04
작성자
태그
EC2
VPC
SageMaker

SageMaker

SageMaker : End-to-End 관리형 머신러닝 플랫폼
S3 버킷: 학습 데이터 를 보관하는 곳
학습 코드를 Script 형태로 EC2에 갖고 있거나 docker 컨테이너 이미지 형태로 갖고 있으면 된다.
ECR을 통해 이미지를 가져와 컨테이너를 짓고 학습을 수행
→ 학습된 모델 아티팩트가 자동으로 S3에 저장됨
→ 이후 클러스터는 더이상 안 쓰이므로 release(종료)된다.
배포 환경에 필요한거 2가지
1.
모델 아티팩트(S3에 있음)
2.
inference 코드(ECR에 이미지형태로 있음)
Model Hosting을 하기 위해 EC2를 생성하여 inference 코드를 불러오고 모델 아티팩트도 불러온다. → inference할 수 있는 API 서비스가 구동된다.
따라서 inference Endpoint(예측 엔드포인드)를 생성하여 외부 client에서 API를 통해 만들어진 모델을 사용할 수 있게 된다. 클라이언트는 엔드포인드를 통해 실시간 추론을 수행할 수 있게 되고 트래픽에 따라 로드 밸런싱과 오토스케일링을 수행할 수 있다.
배포 컨테이너를 구동할 때에는 추론을 위한 HTTP 요청을 받아들일 수 있는 RESTful API를 실행하는 serve 명령어가 자동으로 실행되면서 엔드포인트가 시작된다. 엔드포인트가 시작할 때, SageMaker는 도커 컨테이너에서 사용 가능한 외부의 모델 아티팩트, 데이터, 환경설정 정보 등을 배포 인스턴스의 /opt/ml 폴더로 로딩한다.
/opt/ml 폴더는 도커 컨테이너 밖에서 접근가능한 머신러닝 관련 파일들의 볼륨(volume)을 의미한다.
고객 데이터를 추가적으로 수집하게 되면 사이클을 다시 돌게 된다.
데이터 전처리를 Apache Spark 대신에 FIWARE를 써도 될 듯 하다.
학습된 모델(기존까지 했던 과정)을 가져와서 SageMaker에서 호스팅 만 해도 될 것 같다.
BYO(Bring Your Own) 알고리즘 소스코드를 가져와 SageMaker에 올려 MLOps가 되는 모델이 될 수 있다.
Lambda와 API 게이트웨이를 통해 REST API 로 외부와 연결될 수 있고 하나의 마이크로서비스처럼 머신러닝 추론 서비스를 구성할 수 있다.

IoT Edge 배포

Greengrass : 엣지에 인터넷과 연결되지 않은 off-site의 IoT와 클라우드를 연결하는 게이트웨이
머신러닝 추론 런타임을 제공함
클라우드에서 train
training 된 결과를 offline site에 전송
학습된 모델중 IoT에 deploy할 모델을 선택할 수 있다.
AWS CodePipeline : CI/CD 파이프라인을 구성할 수 있다. 젠킨스와 유사하다.

Script모드로 사전 훈련된 모델을 배포하는 방법

1.
모델 아티팩트 준비 ( model.tar.gz로 압축해야 한다.)
Pytorch를 사용한다면 모델 파라미터 파일을 바로 넣으면 된다. (pth 파일은 weight 가중치만 저장되며 네트워크 구조를 정의한 graph는 저장되진 않는다.)
1.
requirement.txt 에 추가할 패키지 명시
스크립트 파일 내에서 패키지를 설치할 수도 있지만, 향후 파이프라인을 고려하면 별도의 파일에서 관리하는 것이 더 적합하다.
2.
[option] 추론 컨테이너 도커 이미지를 생성. (BYO 컨테이너)
추론 컨테이너 도커 이미지를 빌드하여 ECR에 등록한다. 물론 자체적으로 컨테이너를 구성하지 않는다면 필요하진 않다.
3.
local 엔드포인트 배포 및 디버깅
추론 컨테이너를 배포하기 전에 로컬 환경에서 충분히 디버깅을 수행하고 로컬 엔드포인트에 배포한다.
4.
hosting 엔드포인트 배포
엔드포인트에는 모델 아티팩트의 사본과 추론 스크립트가 포함되어 있다.
여기서 model_data는 S3 경로만 지정해줘야 한다.
5.
A/B 테스트, 오토스케일링, 모니터링
data drift, 사용자 유입에 따른 트래픽 등을 꾸준히 모니터링하면서 엔드포인트를 업데이트한다.
1.
Session을 생성하면 SageMaker와 커넥션이 맺어진다.
2.
estimator라는 객체를 생성해 training을 하기위한 하드웨어, 모델에 대한 정보를 지정해줌(container → 이미지를 불러옴), (role → IAM 규칙 정의)
3.
하이퍼파라미터를 지정해줌
4.
fit을 해줄 때, train에 사용되는 EC2 instance가 생성이 되고, train이 완료된 결과물은 S3에 모델파일로 저장이 된다.
5.
배포를 하게 되면 Endpoint가 생성이 되고 이를 통해 predict()를 통해 추론이 바로 가능하다.