1. Model Serving
1.1 Serving Basic
Serving
- Production(Real World) 환경에 모델을 사용할 수 있도록 배포
- 머신러닝 모델을 개발하고, 현실 세계(앱, 웹)에서 사용할 수 있게 만드는 행위
- 서비스화라고 표현할 수도 있음
- 머신러닝 모델을 회사 서비스의 기능 중 하나로 활용
- 예 : 추천 시스템의 추천 알고리즘 - Input이 제공되면 모델이 예측 값(Output)을 반환
serving 방식
- online serving
- batch serving
- IoT, mobile 등 클라이언트에서 Edge Serving
2. Online Serving
2.1 Web Server Basic
2.2 API
2.3 Online Serving Basic
Online Serving을 구현하는 방식
1) 직접 API 웹 서버 개발 : Flask, FastAPI 등을 사용해 서버 구축
2) 클라우드 서비스 활용 : AWS의 SageMaker, GCP의 Vertex AI 등
- 직접 구축해야 하는 MLOps의 다양한 부분(API 서버 만들기)이 만들어짐
- 사용자 관점에선 PyTorch 사용하듯 학습 코드만 제공하면 API 서버가 만들어짐
- 비용 문제 : 직접 만드는 것보단 더 많은 비용이 나갈 수 있음
- 클라우드 서비스가 익숙해야 잘 활용할 수 있음
3) Serving 라이브러리 활용 : Tensorflow Serving, Torch Serve, MLFlow, BentoML 등
- Fast API 등을 활용할 수 있지만, 처음에 서버에 대한 이해가 충분하지 않으면 어려울 수 있음
- 다양한 방식으로 개발할 수 있지만, 매번 추상화된 패턴을 가질 수 있음
- 추상화된 패턴을 잘 제공하는 오픈소스를 활용하는 방식
Serving방법을 선택하는 가이드
추천 방식
- 만약 회사에서 클라우드 비용에 대해 괜찮을 경우
1) 프로토타입 모델을 클라우드 서비스를 활용해 배포
2) 직접 FastAPI 등을 활용해 서버 개발
3) Serving 라이브러리를 활용해 개발
이런 Flow로 체험하는 것을 추천
1) 프로토타입 개발
2) Fast API로 서버 개발
3) Serving 라이브러리로 개발
Online Serving 고려해야할 부분
1) Input 데이터를 기반으로 Database에 있는 데이터를 추출해서 모델 예측해야 하는 경우
- 데이터는 다양한 공간(Database, AWS S3)에 저장되어 있을 수 있음
- 데이터를 추출하기 위해 쿼리를 실행하고, 결과를 받는 시간이 소요
2) 모델이 수행하는 연산
- RNN, LSTM 등은 회귀 분석보다 많은 연산을 요구하고, 더 오래 걸림
- 이를 위해 모델을 경량화하는 작업이 필요할 수 있으며, 복잡한 모델보다 간단한 모델을 사용하는 경우도 존재
3) 결과 값에 대한 보정이 필요한 경우
- 머신러닝 알고리즘에서 유효하지 않은 예측값이 반환될 수 있음
- 예를 들어 집 값을 예측하는데, 0 이하의 마이너스 값이 나올 수 있음
- 이런 경우 결과를 보정하는 코드가 필요할 수 있음
- 예 : 집 값이 마이너스가 나오면 0으로 표시한다 등
해결방법
- 데이터 전처리 서버 분리(혹은 Feature를 미리 가공 - Feature Store)
- 모델 경량화
- 병렬처리(Ray)
- 예측 결과 캐싱
3. Batch Serving
3.1 Batch Serving Basic
Batch Serving은 주기적으로 학습을 하거나 예측을 하는 경우
- 30분에 1번씩 최근 데이터를 가지고 예측
- Batch 묶음(30분의 데이터)를 한번에 예측
- 모델의 활용 방식에 따라 30분일 수도 있고, 1주일, 하루 단위일 수 있음
- 한번에 많은 예측을 실행
- airflow, cron job 등으로 스케줄링
예시
- 추천 시스템 : 1일 전에 생성된 컨텐츠에 대한 추천 리스트 예측
- 1시간 뒤 수요 예측
- 재고 및 입고 최적화를 위해 매일 매장별 제품 수요 예측
- 실시간이 필요 없는 대부분의 방식에서 활용 가능
단점
실시간으로 활용할 수 없음
Cold Start 문제 : 오늘 새로 생긴 컨텐츠는 추천할 수 없음
3.2 Online Serving vs Batch Serving
Online vs Batch를 선택하는 기준
1) Input 관점
- 데이터 하나씩 요청하는 경우 : Online
- 여러가지 데이터가 한꺼번에 처리되는 경우 : Batch
2) Output 관점
- 인퍼런스 Output을 어떻게 활용하는지에 따라 다름
- API 형태로 바로 결과를 반환해야 하는 경우 : Online
- 서버와 통신이 필요한 경우 : Online
- 1시간에 1번씩 예측해도 괜찮은 경우 : Batch
'부스트캠프 AI Tech 2기 > 2기 Product Serving' 카테고리의 다른 글
Linux & Shell Command (0) | 2021.12.10 |
---|---|
웹 서비스 형태 - Streamlit (0) | 2021.12.09 |
Notebook 베이스 - Voila (0) | 2021.12.09 |
머신러닝 프로젝트 라이프 사이클 (0) | 2021.12.07 |
Product Serving 개론 (0) | 2021.12.07 |