일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 딥러닝
- matplotlib
- KLUE
- 기아
- N2N
- 현대자동차
- dataset
- Bart
- Bert
- word2vec
- N21
- passage retrieval
- 데이터 구축
- nlp
- 데이터 시각화
- seaborn
- Transformer
- ODQA
- Self-attention
- Optimization
- Data Viz
- AI 경진대회
- mrc
- AI Math
- pyTorch
- Attention
- GPT
- 2023 현대차·기아 CTO AI 경진대회
- RNN
- Ai
- Today
- Total
쉬엄쉬엄블로그
(AI 서비스 개발 기초) Model Serving 본문
이 색깔은 주석이라 무시하셔도 됩니다.
Product Serving
Model Serving
Serving Basic
- Serving
- Production(Real World) 환경에 모델을 사용할 수 있도록 배포
- 머신러닝 모델을 개발하고, 현실 세계(앱, 웹)에서 사용할 수 있게 만드는 행위
- 서비스화라고 표현할 수도 있음
- 머신러닝 모델을 회사 서비스의 기능 중 하나로 활용
- 예 : 추천 시스템의 추천 알고리즘
- Input이 제공되면 모델이 예측 값(Output)을 반환
- 크게 2가지 방식 존재
- Online Serving
- Batch Serving
- 그 외에 클라이언트(모바일 기기, IoT Device 등)에서 Edge Serving 도 존재
용어 정리
- Serving : 모델을 웹/앱 서비스에 배포하는 과정, 모델을 활용하는 방식, 모델을 서비스화하는 관점
- Inference : 모델에 데이터가 제공되어 예측하는 경우, 사용하는 관점
- Serving - Inference 용어가 혼재되어 사용되는 경우도 존재
- Online Serving / Online Inference
- Batch Serving(+ Inference)
Online Serving
Web Server Basic
웹 서버 (Wikipedia)
- HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트를 전송해주는 서비스 프로그램
- 요청(Request)을 받으면 요청한 내용을 보내주는(Response) 프로그램
- Client의 다양한 요청을 처리해주는 역할
- Machine Learning Server는 데이터 전처리, 모델을 기반으로 예측 등 다양한 요청을 처리해주는 역할을 함
크롬에서 https://www.youtube.com/에 접근하는 경우, 해당 페이지를 보여달라고 요청(Request)
유튜브 서버는 유튜브 메인 페이지를 반환(Response)머신러닝 모델 서버
어떤 데이터(Input)를 제공하며 예측해달라고 요청(Request)하면, 모델을 사용해 예측 값을 반환(Response)하는 서버
우리가 만들 마스크 예측 모델 프로토타입
- 이미지 업로드하고 분류하는 과정 : 머신러닝 모델 예측
API
- API(Application Programming Interface)
- 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
- 사용자들이 프로그램이나 어플리케이션을 사용할 수 있도록 여러 기능이 존재
- TV의 리모컨 : TV를 켜거나, 채널을 이동하거나, 음량을 조정
- 인터페이스 : 기계와 인간의 소통 창구!
- 특정 서비스에서 해당 기능을 사용할 수 있도록 외부에 노출 : 기상청 API, 지도 API
- 라이브러리의 함수 : Pandas, Tensorflow, PyTorch
Online Serving Basic
요청(Request)이 올 때마다 실시간으로 예측
클라이언트(애플리케이션)에서 ML 모델 서버에 HTTP 요청(Request)하고, 머신러닝 모델 서버에서 예측한 후, 예측 값(응답)을 반환(Response)
Online Serving / Online Inference
ML 모델 서버에 요청할 때, 필요시 ML 모델 서버에서 데이터 전처리를 해야할 수 있음
(혹은 분리를 위해 전처리 서버 / ML 모델 서버로 나눌 수도 있음)서비스의 서버에 ML 서버를 포함하는 경우도 있고, ML 서버를 별도로 운영하는 경우도 존재
회사에서 개발 조직과 데이터 조직의 협업하는 방식에 따라 다르게 개발할 수 있음
Online Serving을 구현하는 방식
직접 API 웹 서버 개발
Flask, FastAPI 등을 사용해 서버 구축
localhost(예를 들면 www.naver.com/) 웹 서버 예시
클라우드 서비스 활용
AWS의 SageMaker, GCP의 Vertex AI 등
클라우드 서비스의 장점
직접 구축해야 하는 MLOps의 다양한 부분(API 서버 만들기)이 만들어짐
사용자 관점에선 PyTorch 사용하듯 학습 코드만 제공하면 API 서버가 만들어짐
클라우드 서비스의 아쉬운 점
- 클라우드 서비스가 익숙해야 잘 활용할 수 있음
- 비용 문제 : 직접 만드는 것 보단 더 많은 비용이 나갈 수 있음
회사의 상황에 따라 클라우드 서비스를 활용하는 것이 좋은 시기도 존재
- 소수의 인원만 존재하며, 소수의 인원이 많은 업무를 해야하는 경우
- 클라우드의 내부 실행 구조를 잘 알아야 문제 상황이 발견되었을 때 잘 해결할 수 있음
- 클라우드 서비스에선 어떤 방식으로 AI 제품을 만들었는지 확인할 수도 있어서 사용해보는 것도 좋음
Serving 라이브러리 활용
Tesnorflow Serving, Torch Serve, MLFlow, BentoML 등
Fast API 등을 활용할 수 있지만, 처음에 서버에 대한 이해가 충분하지 않으면 어려울 수 있음
다양한 방식으로 개발할 수 있지만, 매번 추상화된 패턴을 가질 수 있음
추상화된 패턴을 잘 제공하는 오픈소스를 활용하는 방식
Serving Input - Single Data Point
- 단일 데이터를 받아 실시간으로 예측을 하는 예제
- 기계 고장 예측 모델
- 센서의 실시간 데이터가 제공되면 특정 기계 부품이 앞으로 N분 안에 고장날지 아닐지를 예측
- 음식 배달 소요 시간 예측
- 해당 지역의 과거 평균 배달 시간, 실시간 교통 정보, 음식 데이터 등을 기반으로 음식 배달 소요 시간 예측
다양한 Serving 방법을 선택하는 가이드
- 어떤 방법을 쓰느냐는 주어진 환경(회사에서 주어진 일정, 인력, 예산, 요구 성능 등)에 따라 다름
- 추천 방식
- (만약 회사에서 클라우드 비용에 대해 괜찮을 경우)
- 프로토타입 모델을 클라우드 서비스를 활용해 배포
- 직접 FastAPI 등을 활용해 서버 개발
- Serving 라이브러리를 활용해 개발
- 이런 Flow로 체험하는 것을 추천
- 프로토타입 개발
- Fast API로 서버 개발
- Serving 라이브러리로 개발
- 바로 Serving 라이브러리를 학습하지 않는 이유
- 사용하기엔 편하지만, 이 강의는 툴을 학습하는 강의가 아니라 점진적으로 문제를 해결하는 강의
- 여러가지 방법 중 이 방법을 왜 선택하는지에 대한 인식을 키워주고 싶음
- 오픈소스는 계속 개발되고 있기 때문에 언제든 새로운 오픈소스가 나올 수 있음
(=라이브러리에 종속되지 말기) - High Level 오픈소스를 먼저 사용할 경우 Low Level의 이해도가 부족할 수 있음
- 서버 프로그래밍은 필수적으로 경험해야 하기 때문에 먼저 서버 프로그래밍을 해보고 Serving 라이브러리를 학습!
Online Serving에서 고려할 부분
- Serving할 때 Python 버전, 패키지 버전 등 Dependency가 굉장히 중요
- “재현 가능”하지 않은 코드는 Risk를 가지고 있는 코드
- 관련해서 Virtualenv, Poetry, Docker도 학습할 예정
- 실시간 예측을 하기 때문에 예측할 때 지연 시간(Latency)를 최소화해야 함
- Latency : 하나의 예측을 요청하고 반환 값을 받는 데까지 걸리는 시간
- 이 값은 짧을 수록 좋으며, Latency가 길다는 것은 Loading이 긴 것과 유사한 상황
- Input 데이터를 기반으로 Database에 있는 데이터를 추출해서 모델 예측해야 하는 경우
- 데이터는 다양한 공간(Database, AWS S3)에 저장되어 있을 수 있음
- 데이터를 추출하기 위해 쿼리를 실행하고, 결과를 받는 시간이 소요
- 모델이 수행하는 연산
- RNN, LSTM 등은 회귀 분석보다 많은 연산을 요구하고, 더 오래 걸림
- 이를 위해 모델을 경량화하는 작업이 필요할 수 있으며, 복잡한 모델보다 간단한 모델을 사용하는 경우도 존재
- 결과 값에 대한 보정이 필요한 경우
- 머신러닝 알고리즘에서 유효하지 않은 예측값이 반환될 수 있음
- 예를 들어 집 값을 예측하는 데, 0 이하의 마이너스 값이 나올 수 있음
- 이런 경우 결과를 보정하는 코드가 필요할 수 있음
- 예 : 집 값이 마이너스가 나오면 0으로 표시한다 등
- 앞의 문제를 해결하기 위해 여러가지 방법이 존재하며, Part 4에서 다양한 가이드를 제공
- 다양한 방법
- 데이터 전처리 서버 분리(혹은 Feature를 미리 가공 - Feature Store)
- 모델 경량화
- 병렬처리(Ray)
- 예측 결과 캐싱
- 등 문제 상황에 맞는 해결 방법이 존재
Batch Serving
Batch Serving Basic
Batch Serving은 주기적으로 학습을 하거나 예측을 하는 경우
- 30분에 1번씩 최근 데이터를 가지고 예측
- Batch 묶음(30분의 데이터)를 한 번에 예측
- 모델의 활용 방식에 따라 30분일 수도 있고, 1주일, 하루 단위일 수 있음
- 한 번에 많은 예측을 실행
- 특정 시간에 반복해서 실행
- Batch는 데이터 엔지니어링에서 자주 활용되는 용어
- 한꺼번에 배치 단위로 묶음 (DataLoader의 Batch와 유사)
Batch Serving 관련한 라이브러리는 따로 존재하지 않음
함수 단위를 “주기적”으로 실행함
Airflow, cron Job 등으로 스케줄링 작업(Workflow Scheduler)
- 학습 / 예측을 별도의 작업으로 설정
- 학습 : 1주일에 1번
- 예측 : 10분, 30분, 1시간에 1번씩
- 학습 / 예측을 별도의 작업으로 설정
예시
- 추천 시스템 : 1일 전에 생성된 컨텐츠에 대한 추천 리스트 예측
- 1시간 뒤 수요 예측
- 재고 및 입고 최적화를 위해 매일 매장별 제품 수요 예측
- 실시간이 필요 없는 대부분의 방식에서 활용 가능
장점
- Jupyter Notebook에 작성한 코드를 함수화한 후, 주기적으로 실행하는 간단한 구조!
- Online Serving보다 구현이 수월하며, 간단함
- 한 번에 많은 데이터를 처리하므로 Latency가 문제되지 않음
단점
- 실시간으로 활용할 수 없음
- Cold Start 문제 : 오늘 새로 생긴 컨텐츠는 추천할 수 없음
스포티파이의 예측 알고리즘 - Discover Weekly
g" alt="https://miro.medium.com/max/720/1*YsViTZr9QTftehZivEEKYA.png">
1주일 단위로 학습과 예측을 하여 추천곡을 공유함
실시간이 정답은 아니라는 것을 보여줌
Workflow Scheduler
데이터 엔지니어링에서 자주 활용되는 Airflow
Linux의 Cron Job
Awesome Workflow Engines Github
Online Serving vs Batch Serving
- Online vs Batch를 선택하는 기준
- Input 관점
- 데이터 하나씩 요청하는 경우 : Online
- 여러가지 데이터가 한꺼번에 처리되는 경우 : Batch
- Output 관점
- 인퍼런스 Output을 어떻게 활용하는지에 따라 다름
- API 형태로 바로 결과를 반환해야 하는 경우 : Online
- 서버와 통신이 필요한 경우 : Online
- 1시간에 1번씩 예측해도 괜찮은 경우 : Batch
- Input 관점
- 처음부터 Online Serving(API 형태)로 만들어야 하는 것은 아니고, 실시간 모델 결과가 어떻게 활용되는지에 대한 생각이 필요(예측해도 활용이 되지 않는다면 Batch로 진행해도 무방)
- Batch Serving의 결과를 Database에 저장하고, 서버는 Database의 데이터를 쿼리해서 주기적으로 조회하는 방식으로 사용할 수 있음
- 우선 Batch Serving으로 모델을 운영하면서 점점 API 형태로 변환
출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)
'부스트캠프 AI Tech 4기' 카테고리의 다른 글
(AI 서비스 개발 기초) Notebook 베이스 - Voila (0) | 2023.08.04 |
---|---|
(AI 서비스 개발 기초) 머신러닝 프로젝트 라이프 사이클 (0) | 2023.08.03 |
(AI 서비스 개발 기초) MLOps 개론 (2) | 2023.08.01 |
(Data Viz) 주제별 시각화와 사용법 - Custom Matplotlib Theme (0) | 2023.07.31 |
(NLP 기초대회) Prediction Service (0) | 2023.07.29 |