Model Serving

정현호·2022년 11월 8일
0

AI 서비스 개발

목록 보기
1/2

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

Serving Input - Single Data Point

단일 데이터를 받아 실시간으로 예측을 하는 예제

기계 고장 예측 모델 : 센서의 실시간 데이터가 제공되면 특정 기계 부품이 앞으로 N분안에 고장날지 아닐지를 예측

음식 배달 소요 시간 예측 : 해당 지역의 과거 평균 시간, 실시간 교통 정보, 음식 데이터 등을 기반으로 음식 배달 소요 시간 예측

Online Serving을 구현하는 방식

  1. 직접 API 웹 서버 개발 : Flask, FastAPI 등을 사용해 서버 구축

  2. 클라우드 서비스 활용 : AWS의 SageMaker, GCP의 Vertex AI 등

    1. 클라우드의 내부 실행 구조를 잘 알아야 문제 상황이 발견되었을 때 잘 해결할 수 있음
    2. 클라우드 서비스에선 어떤 방식으로 AI 제품을 만들었는지 확인할 수도 있어서 사용해보는 것도 좋음
  3. Serving 라이브러리 활용 : Tensorflow Serving, Torch Serve, MLFlow, BentoML 등

    1. FastAPI 등을 활용할 수 있지만, 처음에 서버에 대한 이해가 충분하지 않으면 어려울 수 있음
    2. 다양한 방식으로 개발할 수 있지만, 매번 추상화된 패턴을 가질 수 있음
    3. 추상화된 패턴을 잘 제공하는 오픈소스를 활용하는 방식

    상당히 간단하게 Serving을 할 수 있어보임.

어떤 방법을 쓰느냐는 주어진 환경(일정, 인력 , 예산, 요구 성능)에 따라 다름

추천 방식 (회사에서 클라우드 비용이 괜찮을 경우)

  1. 프로토타입 모델을 클라우드 서비스를 활용해 배포
  2. 직접 FastAPI 등을 활용해 서버 개발
  3. Serving 라이브러리를 활용해 개발

Online Serving에서 고려할 부분

실시간 예측을 하기 때문에 예측할 때 지연시간(Latency)를 최소화해야함

Latency : 하나의 예측을 요청하고 반환값을 받는데까지 걸리는 시간, 이 값은 짧을수록 좋다.

  1. Input 데이터를 기반으로 Database에 있는 데이터를 추출해서 모델 예측해야하는 경우
    • 데이터는 다양한 공간(Database, AWS S3)에 저장되어 있을 수 있음
    • 데이터를 추출하기 위해 쿼리를 실행하고, 결과를 받는 시간이 소요
  1. 모델이 수행하는 연산

    • RNN, LSTM 등은 회귀분석보다 많은 연산을 요구하고, 더 오래걸림
    • 이를 위해 모델을 경량화하는 작업이 필요할 수 있으며, 복잡한 모델보다 간단한 모델을 사용하는 경우도 존재
  2. 결과 값에 대한 보정이 필요한 경우

    • 머신러닝 알고리즘에서 유효하지 않은 예측값이 반환될 수 있음
    • 예를 들어 집 값을 예측하는데, 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 장단점

  1. 장점

    • Jupyter Notebook에 작성한 코드를 함수화한 후, 주기적으로 사용하는 구조
    • Online Serving보다 구현이 수월하며, 간단하다.
    • 한번에 많은 데이터를 처리하므로 Latency가 문제되지 않음.
  2. 단점

    • 실시간으로 활용할 수 없음
    • 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

  1. [Rules of Machine Learning: Best Practices for ML Engineering](https://developers.google.com/machine-learning/guides/rules-of-ml) 문서 읽고 정리하기!
  2. Online Serving / Batch Serving 기업들의 Use Case 찾아서 정리하기(어떤 방식으로 되어 있는지 지금은 이해가 되지 않아도 문서를 천천히 읽고 정리하기)

이 글은 커넥트 재단 Naver AI Boost Camp 교육자료를 참고했습니다.

profile
반갑습니다.

0개의 댓글