네이버 부스트 캠프 ai tech 변성윤 강사님의 강의 영상을 정리한 글입니다.
문제, 잘못된 점이 있다면 최대한 빠르게 수정하겠습니다 !
목차
1. Model Serving
1.1 Serving Basic
2. Online Serving
2.1 Web Server Basic
2.2 API
2.3 Online Serving Basic
3. Batch Serving
3.1 Batch Serving Basic
3.2 Online Serving vs Batch Serving
Serving Basic
Serving
크게 2가지 방식
용어가 혼재되는 경우가 있다. 정리하고 가자 !
Serving : 모델을 웹/앱 서비스에 배포하는 과정, 모델을 활용하는 방식, 모델을 서비스화하는 관점
Inferece : 모델에 데이터가 제공되어 예측하는 경우, 사용하는 관점
Serving - Inferece 용어가 혼재되어 사용되는 경우도 존재
Online Serving/ online inferece
Batch Serving(+inference)
Web Server Basic
웹서버 (wikipedia)
web server(홀서빙알바)는 client(손님)의 다양한 요청을 처리해주는 역할.
machine learning server는 client의 다양한 요청을 처리해주는 역할
(데이터 전처리, 모델을 기반으로 예측 등)
모든 웹서버는 Request와 Response로 나뉜다.
유튜브에 접속했을때 .
HTTP Request ->
크롬 : Browser, Client www.youtube.com : Server
<- HTTP Response
고객이 회원가입을 요청 (HTTP Request)
쇼핑몰은 검증한 후 회원가입 완료 응답 ( HTTP Response)
머신러닝 모델 서버
API
Application Programming Interface
운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
사용자들이 프로그램이나 어플리케이션을 사용할 수 있도록 여러 기능이 존재
TV의 리모컨: TV를 켜거나, 채널을 이동하거나, 음량을 조정
인터페이스 : 기계와 인간의 소통 창구 !
API:
카카오,구글,네이버,AWS,구글 등에서 API 제공
라이브러리의 API Document : 함수가 API라고 생각하면 된다!
Online Serving Basic
Input Data -> (Rest API <-> Model) -> Output data
요청(Request)이 올 때마다 실시간으로 예측
ML모델 서버에 요청할때 필요시 ML모델 서버에서 데이터 전처리를 해야할 수 있음
(혹은 분리를 위해 전처리 서버/ ML모델 서버로 나눌 수도 있음)
서비스의 서버에 ML서버를 포함하는 경우도 있고, ML서버를 별도로 운영하는 경우도 존재
회사에서 개발 조직과 데이터 조직의 협업하는 방식에 따라 다르게 개발할 수 있음.
Online Serving을 구현하는 방식
1) 직접 API 웹 서버 개발 : Flask, FastAPI 등을 사용해 서버 구축
2) 클라우드 서비스 활용 : AWS의 SageMaker, GCP의 vertex AI등.
3) Serving 라이브러리 활용 : TF Serving, Torch Serve, MLFlow, BentoML 등
다양한 serving방법을 선택하는 가이드
어떤 방법을 쓰느냐는 주어진 환경(회사에서 주어진 일정, 인력, 예산, 요구, 성능 등)에 따라 다름
추천 방식
이 강의에선 아래와 같은 방식으로 진행
1. 프로토타입 개발
2. Fast API로 서버개발
3. Serving 라이브러리로 개발
왜 바로 Serving 라이브러리를 학습하지 않는가?!
Online Serving에서 고려한 부분
Serving 할 때 Python 버전, 패키지 버전 등 Dependency가 굉장히 중요
"재현 가능"하지 않은 코드는 Risk를 가지고 있는 코드
관련해서 Virtualenv, Poetry, Docker도 학습할 예정
실시간 예측을 하기 때문에 예측할 때 지연시간(latency)를 최소화 해야함.
Latency:하나의 예측을 요청하고 반환값을 받는데까지 걸리는 시간
이 값은 짧을 수록 좋으며 Latency가 길다는 것은 Loading이 긴 것과 유사
머신러닝 알고리즘에서 유효하지 않은 예측값이 반환될 수 있음
예를 들어 집 값을 예측하는데, 0 이하의 마이너스 값이 나올 수 있음
이런 경우 결과를 보정하는 코드가 필요할 수 있음
예 : 집값이 마이너스면 0을 표기
part 4에서 데이터 전처리,서버분리, Feature Store) 모델 경량화, 병렬처리 (Ray), 예측 결과 캐싱
Serving Input -> Single Data Point
단일 데이터를 받아 실시간으로 예측을 하는 예제
기계 고장 예측 모델
Workflow Scheduler
위작업을 특정 기간 단위(하루, 1시간) 등으로 실행
10시에 python main.py 11시에 python main.py 실행 등.
Batch Serving : 주기적으로 학습을 하거나 예측을 하는경우
Batch Serving관련한 라이브러리는 따로 존재하지 않음
함수단위를 "주기적"으로 실행함
아침 10시에 python main.py
아침 11시에 python main.py
Airflow, Cron Job등으로 스케쥴링 작업(Workflow Scheduler)
학습/예측을 별도의 작업으로 설정
예시 : 추천시스템
1일전에 생성된 컨텐츠에 대한 추천 리스트 예측
1시간 뒤 수요 예측
재고 및 입고 최적화를 위해 매일 매장별 제품 수요 예측
->실시간이 필요 없는 대부분의 방식에서 활용 가능
Batch Serving Basic-장점
Jupyter notebook에 작성한 코드를 함수화한 후 주기적으로 실행하는 간단한 구조 !
Online Serving보다 구현이 수월하며, 간단함.
한번에 많은 데이터를 처리하므로 Latency가 문제되지 않음
Batch Serving Basic-단점
실시간으로 활용할 수 없음
Cold Start문제 : 오늘 새로 생긴 컨텐츠는 추천할 수 없음
Workflow Scheduler
online vs Batch를 선택하는 기준 - Input 관점
데이터 하나씩 요청하는 경우 : Online
여러가지 데이터가 한꺼번에 처리되는 경우 : Batch
online vs Batch를 선택하는 기준 - Output 관점
inference output을 어떻게 활용하는지에 따라 다름
처음부터 Online Serving(API형태)만들어야 하는 것은 아니고,
실시간 모델 결과가 어떻게 활용되는지에 대한 생각이 필요
(예측해도 활용이 되지 않는다면 Batch로 진행해도 무방)
Batch Serving의 결과를 Database에 저장하고,
서버는 Database의 데이터를 쿼리해서 주기적으로 조회하는 방식으로 사용할 수 있음
우선 Batch Serving으로 모델을 운영하면서 점점 API 형태로 변환