Serving 이란?
- Production(Real World) 환경에 모델을 사용할 수 있도록 배포
- 머신러닝 모델을 개발하고, 현실 세계(앱, 웹)에서 사용할 수 있게 만드는 행위
- 서비스화라고 표현할 수도 있음
- 머신러닝 모델을 회사 서비스의 기능중 하나로 활용
- 예 : 추천 시스템의 추천 알고리즘
Input이 제공되면 모델이 예측값(Output)을 반환
크게 2가지 방식이 존재
- Online Serving
- Batch Serving
그 외에 클라이언트(모바일 기기,IoT Device 등)에서 Edge Serving도 존재
Serving : 모델을 웹/앱 서비스에 배포하는 과정, 모델을 활용하는 방식, 모델을 서비스화 하는 관점
Inference : 모델에 데이터가 제공되어 예측하는 경우, 사용하는 관점
Online Serving
웹 서버 in Wikipedia
- HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트를 전송해주는 서비스 프로그램
- 요청(request)을 받으면 요청한 내용을 보내주는(response) 프로그램
Server : Client의 request에 대한 response를 제공하는 역할
-
Web Server는 Clinet의 다양한 요청을 처리해주는 역할
-
Machine Learning Server는 Client의 다양한 요청을 처리해주는 역할 ( 데이터 전처리, 모델을 기반으로 예측 등 )
크롬에서 https://www.youtube.com/에 접근하는 경우 해당 페이지를 보여달라고 요청(request) 유튜브 서버는 유튜브 메인 페이지를 반환(response)
[크롬 ] →← [ www.youtube.com ]
머신러닝 모델 서버
- 어떤 데이터(input)을 제공하며 예측해달라고 요청(Request)하면, 모델을 사용해 예측 값을 반환(Response)하는 서버

API
API 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

- 요청(Request)이 올때마다 실시간으로 예측
- 클라이언트(애플리케이션)에서 ML모델 서버에 HTTP 요청(request)하고, 머신러닝 모델 서버에서 예측한 후, 예측 값(응답)을 반환(Response)
- Online Serving / Online Inference
단일 데이터를 받아 실시간으로 예측을 하는 예제
기계 고장 예측 모델 : 센서의 실시간 데이터가 제공되면 특정 기계 부품이 앞으로 N분안에 고장날지 아닐지를 예측
음식 배달 소요 시간 예측 : 해당 지역의 과거 평균 시간, 실시간 교통 정보, 음식 데이터 등을 기반으로 음식 배달 소요 시간 예측
Online Serving을 구현하는 방식
-
직접 API 웹 서버 개발 : Flask, FastAPI 등을 사용해 서버 구축
-
클라우드 서비스 활용 : AWS의 SageMaker, GCP의 Vertex AI 등
- 클라우드의 내부 실행 구조를 잘 알아야 문제 상황이 발견되었을 때 잘 해결할 수 있음
- 클라우드 서비스에선 어떤 방식으로 AI 제품을 만들었는지 확인할 수도 있어서 사용해보는 것도 좋음
-
Serving 라이브러리 활용 : Tensorflow Serving, Torch Serve, MLFlow, BentoML 등
- FastAPI 등을 활용할 수 있지만, 처음에 서버에 대한 이해가 충분하지 않으면 어려울 수 있음
- 다양한 방식으로 개발할 수 있지만, 매번 추상화된 패턴을 가질 수 있음
- 추상화된 패턴을 잘 제공하는 오픈소스를 활용하는 방식
상당히 간단하게 Serving을 할 수 있어보임.
어떤 방법을 쓰느냐는 주어진 환경(일정, 인력 , 예산, 요구 성능)에 따라 다름
추천 방식 (회사에서 클라우드 비용이 괜찮을 경우)
- 프로토타입 모델을 클라우드 서비스를 활용해 배포
- 직접 FastAPI 등을 활용해 서버 개발
- Serving 라이브러리를 활용해 개발
Online Serving에서 고려할 부분
실시간 예측을 하기 때문에 예측할 때 지연시간(Latency)를 최소화해야함
Latency : 하나의 예측을 요청하고 반환값을 받는데까지 걸리는 시간, 이 값은 짧을수록 좋다.
- Input 데이터를 기반으로 Database에 있는 데이터를 추출해서 모델 예측해야하는 경우
- 데이터는 다양한 공간(Database, AWS S3)에 저장되어 있을 수 있음
- 데이터를 추출하기 위해 쿼리를 실행하고, 결과를 받는 시간이 소요
-
모델이 수행하는 연산
- RNN, LSTM 등은 회귀분석보다 많은 연산을 요구하고, 더 오래걸림
- 이를 위해 모델을 경량화하는 작업이 필요할 수 있으며, 복잡한 모델보다 간단한 모델을 사용하는 경우도 존재
-
결과 값에 대한 보정이 필요한 경우
- 머신러닝 알고리즘에서 유효하지 않은 예측값이 반환될 수 있음
- 예를 들어 집 값을 예측하는데, 0 이하의 마이너스 값이 나올 수 있음
- 이런 경우 결과를 보정하는 코드가 필요할 수 있음 ( 음수가 나올 경우로 0 으로 표기 )
Batch Serving

- 한번에 많은 양의 데이터가 request, 그리고 많은 양의 데이터가 response
- Batch Serving은 주기적으로 학습을 하거나 예측을 하는 경우
- 특정 시간에 반복해서 실행
- Batch는 데이터 엔지니어링에서 자주 활용되는 용어.
Batch Serving 관련한 라이브러리는 따로 존재하지 않음.
함수 단위를 “주기적”으로 실행 ( 10:00 python main.py, 11:00 python main.py )
Airflow, Cron Job 등으로 스케쥴링 작업(Workflow Scheduler)
학습 / 예측을 별도의 작업으로 설정
- 학습 : 1주일에 1번
- 예측 : 10분, 30분, 1시간에 1번씩
추천시스템 : 1일전에 생성된 컨텐츠에 대한 추천 시스템 예측
1시간 뒤 수요 예측
재고 및 입고 최적화를 위해 매일 매장별 제품 수요 예측
→ 실시간이 필요 없는 대부분의 방식에서 사용 가능
Batch Serving 장단점
-
장점
- Jupyter Notebook에 작성한 코드를 함수화한 후, 주기적으로 사용하는 구조
- Online Serving보다 구현이 수월하며, 간단하다.
- 한번에 많은 데이터를 처리하므로 Latency가 문제되지 않음.
-
단점
- 실시간으로 활용할 수 없음
- Cold Start 문제 : 오늘 새로 생긴 컨텐츠는 추천할 수 없음
Spotify의 추천 알고리즘 : Discover Weekly
추천(예측)을 실시간으로 해주는 것이 아닌 일주일 단위로함 → Online Serving이 아니여도 좋은 성능으로 장점을 가짐
Workflow Scheduler
- 데이터 엔지니어링에서 자주 활용되는 Airflow
- Linux의 Cron Job
- 전처리, 학습, 예측같은 파이프라인을 짤수 있다.
Online Serving vs Batch Serving
- 선택하는 기준은 Input 관점으로 생각하면 된다.
- 데이터가 하나씩 실시간으로 요청하는 경우 : Online Serving
- 여러가지 데이터가 한꺼번에 처리되는 경우 : Batch Serving
- 인퍼런스 Ouput을 어떻게 활용하는지에 따라 다름
- API 형태로 바로 결과를 반환해야 하는 경우 : Online
- 서버와 통신이 필요한 경우 : Online
- 1시간에 1번씩 예측해도 괜찮은 경우 : Batch
처음부터 Online Serving(API 형태) 만들어야 하는 것은 아니고, 실시간 모델 결과가 어떻게 활용되는지에 대한 생각이 필요 ( 예측해도 활용이 되지 않는다면 Batch로 진행해도 무방 )
Batch Serving의 결과를 Database에 저장하고, 서버는 DataBase의 데이터를 쿼리해서 주기적으로 조회하는 방식으로 사용할 수 있음.
우선 Batch Serving으로 모델을 운영하면서 점점 API 형태로 변환
Further Question
- [Rules of Machine Learning: Best Practices for ML Engineering](https://developers.google.com/machine-learning/guides/rules-of-ml) 문서 읽고 정리하기!
- Online Serving / Batch Serving 기업들의 Use Case 찾아서 정리하기(어떤 방식으로 되어 있는지 지금은 이해가 되지 않아도 문서를 천천히 읽고 정리하기)
이 글은 커넥트 재단 Naver AI Boost Camp 교육자료를 참고했습니다.