Product Serving 방식 - Online, Batch
Date:
Product Serving
- Production(Real World) 환경에 모델을 사용할 수 있도록 배포하는 행위
- ML 모델을 개발하고 사람들이 서비스를 이용할 수 있도록 하는 것
Serving 도구
웹 서버(Web Server)
- HTTP를 통해 웹 브라우저에서 요청하는 HTML문서나 오브젝트를 전송해주는 프로그램을 칭함
- 크게 Request(요청)와 Response(답변)의 대화로 이루어짐
API
- API : Application Programming Interface
- 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 통칭하는 말
- 특정 서비스를 배포할 목적으로 외부에 노출시켜둔 API가 있음
- ex : 기상청 API, 지도 API, Python 라이브러리(Pandas, Pytorch, …) 등등
Serving 방법
※ 간단 용어 정리
- Serving : 모델을 웹/앱 서비스로 배포하는 과정, ML 모델을 활용하고 서비스 하는 방식
- Inference : ML 모델에 데이터가 제공되어 예측
- 위 두 용어는 혼재되어 사용되는 경우도 있음(ex. Online Serving, Online Inference)
Online Serving
- 요청(Request)가 올때 마다 실시간으로 서비스를 진행함
- ML 모델 서빙을 예시 : Client → 서버로 HTTP 요청(Request) → 서버 내 ML 모델 inference → 예측값 반환(Response)
- 실시간 예측이 필요한 상황
- 기계 고장 예측 모델 : 센서로부터 실시간 데이터를 받아 고장을 예측
- 음실 배달 소요시간 예측 : 과거 배달 이력, 교통정보, 음식 데이터를 기반으로 배달 소요시간 예측
구현 방법
- 직접 API 웹 서버 개발 : Flask, FastAPI 등
- 클라우드 서비스 활용 : AWS의 SageMaker, GCP의 Vertex AI 등
- 장점
- 직접 구축해야하는 MLOps의 다양한 부분이 만들어짐
- 사용자 관점에선 Pytorch 사용하듯 학습코드만 제공하면 API서버가 만들어짐
- 단점
- 서비스에 익숙해져야 잘 활용가능함
- 자체 제작보다 높은 단가
- 장점
- Serving 라이브러리 활용 : Tensorflow Serving, Torch Serve, MLFlow, BentoML 등
Latency 문제
실시간 예측이기 때문에 Latency(지연시간)를 최소화가 필요함
Latency를 늘리는 요소
- 데이터 Input 시간 : Database에 있는 데이터를 추출하여 사용하는 경우가 있을 수 있고 이로인한 쿼리 및 결과를 받는 시간이 걸릴 수 있음
- 순수 모델 연산 시간 : RNN, LSTM 등의 무거운 모델일 수록 시간이 오래 걸리게됨, 복잡한 모델 보단 간단한 모델로 사용하여 줄이는 경우도 많음
- 결과값에 대한 추가적인 보정 : 결과값을 단순 숫자나 유효하지 않은 값이 출력될 수 있기 때문에 보정하는 코드가 필요할 수 있음
Basic한 해결 방법
- 데이터 전처리 서버 분리(Feature 선 가공 - Feature Store)
- 모델 경량화
- 병렬처리(Ray)
- 예측결과 캐싱
Batch Serving
- 어떤 시간이나, 개수 단위의 Batch 묶음의 데이터를 처리하는 방식(Workflow Scheduler에 맞춰서 진행)
- Online Serving과 다르게 따로 라이브러리가 있진 않음, 단순하게 개수나, 정해진 시간이 되면 Python main.py 형식으로 결과값을 출력함
- 데이터를 한 번에 처리하기 때문에 Latency에 영향이 적지만, 실시간 결과 출력은 어려움
- 추천 알고리즘, 수요 예측 등에 사용됨
Workflow Scheduler - Airflow
- 데이터 엔지니어링에서 자주 활용됨
- Linux의 Cron job
Edge Serving
- Device에 ML 모델을 올려서, 직접 Input을 받아 모델을 돌려 결과값을 출력하는 하나의 완성 되어있는 환경
- 라즈베리파이에 얼굴인식 모델을 구현하여 Display로 출력
Online vs Batch
- Output 관점으로 Serving 방식을 선택하게 됨
- Online : API 형태로 바로 결과 반환이 필요한 경우, 서버와 통신이 필요한 경우
- Batch : 결과가 바로 필요하지 않은 경우(1시간에 1번씩 결과가 주어져도 괜찮은 경우)
개발과정
- 처음부터 Online으로 만드는 것보단, 실시간 모델 결과가 어떻게 활용되는지 보고, 점차 API형태로 변환하는 방식으로 진행
📌reference
- boostcourse AI tech-
💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡
댓글