Architecture of API to serve ML model
- AWS EC2와 Python Flask 기반 모델 학습 및 추론을 요청/응답하는 API 서버 개발
Interface
- 사용자는 기계와 소프트웨어를 제어하기 위해 인터페이스를 정해진 매뉴얼에 따라 활용하여 원하는 경험을 획득
- 컴퓨터의 마우스, 키보드와 같이 입력을 위한 인터페이스와 모니터나 프린터와 같이 정보를 받는 출력을 위한 인터페이스가 있음
- 인터페이스는 상호 합의된 메뉴얼에 따라 적절한 입력을 받아 기대되는 출력을 제공할 수 있음
API란?
- Application Programming Interface의 약자로 기계와 기계, 소프트웨어와 소프트웨어 간의 커뮤니케이션을 위한 인터페이스를 의미
- 노드와 노드 간 데이터를 주고 받기 위한 인터페이스로, 사전에 정해진 정의에 따라 입력이 들어왔을 때 적절한 출력을 전달해야 함
RESTful API for ML/DL model inference
- Rest 아키텍쳐를 따르는 API로 HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 연산을 요청하고 반환하는 API를 지칭
- RESTful API는 데이터나 정보의 교환/요청 등을 위한 인터페이스 REST 아키텍쳐를 따라 구현한 API
- 일반적으로 데이터 값을 담아 요청하고 모델이 추론한 결과에 대한 return을 json 형태로 변환하도록 설계
- RESTful API는 요청 메세지만 봐도 어떤 내용으로 되어있는지 알 수 있도록 표현됨
- 📌 REST라는 아키텍처를 사용하고 있다.
Model Serving
- 학습된 모델을 REST API 방식으로 배포하기 위해서 학습된 모델의 Serialization과 웹 프레임워크를 통해 배포 준비 필요
- 모델을 서빙할 때는 학습 시의 데이터 분포나 처리 방법과의 연속성 유지 필요
- 모델을 배포하는 환경에 따라 다양한 Serving Framework를 고려하여 활용
Serialization & De-serialization
- 학습한 모델의 재사용 및 배포를 위해서 저장하고 불러오는 것
- Serialization을 통해 ML/DL model object를 disk에 write하여 어디든 전송하고 불러올 수 있는 형태로 변환
- De-Serialization을 통해 Python 혹은 다른 환경에서 model을 불러와 추론/학습에 사용
- 모델을 배포하는 환경을 고려해 환경에 맞는 올바른 방법으로 Serialization을 해야 De-serialization이 가능
Skeleton of handler to serve model
class ModelHandler(BaseHandler):
def __init__(self):
pass
def initialize(self, **kwargs):
pass
def preprocess(self, data):
pass
def inference(self, data):
pass
def postprocess(self, data):
pass
def handle(self, data):
pass
Model serving을 위한 다양한 Frameworks
- 딥러닝 모델의 안정적인 serving을 위해 Tensorflow serving이나 TorchServe, TensorRT 같은 프레임워크를 사용하는 것이 일반적
- Flask와 같은 웹프레임워크는 클라이언트로부터의 요청을 처리하기 위해 주로 사용
- 별도의 모델 추론을 위한 API 서버를 운용하여 내부 혹은 외부 통신을 예측/추론값 변환
- 대용량 데이터 배치처리와 딥러닝 모델의 활용이 늘면서 multi node, multiGPU 환경에서의 안정적인 모델 서빙을 위함
'프로그래머스 AI 데브코스 5기 > CS' 카테고리의 다른 글
Web Scrapping 기초 (0) | 2023.03.20 |
---|---|
재귀 알고리즘(Recursive Algorithm) (0) | 2023.03.19 |
AWS Enviroment 환경 세팅 (0) | 2023.03.17 |
Basis of Cloud Service - AWS를 활용한 인공지능 모델 배포 (0) | 2023.03.17 |
선형 배열(Linear Array) (0) | 2023.03.16 |