Product Serving

DONGJIN IM·2022년 7월 9일
0

Product Serving 이론

목록 보기
2/10
post-thumbnail

Serving

Serving이란?

  • 모델을 웹/앱 서비스(현실 세계)에 배포하는 과정

  • 머신러닝 모델을 회사 서비스의 기능 중 하나로 활용할 수 있음

  • Serving : 모델을 웹/앱 서비스에 배포하는 과정 및 활용하는 방식

    • "서비스화"하는 관점에서의 용어
  • Inference : 모델에 Input이 주어지고 Output을 도출해내는 과정

    • 모델을 "사용"하는 관점에서의 용어
  • 2개 용어가 혼재되어 활용됨


Online Serving

Web Server

  • 요청을 받으면 요청한 내용을 보내주는 프로그램

    • Request를 받아 처리한 이후 Respond로써 원하는 데이터를 전송해주는 서비스 프로그램
  • Client의 다양한 요청을 처리해주는 역할

    • 데이터 전처리
    • 모델을 기반으로 한 예측

API

  • Application Programming Interface

  • 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 Interface

  • User들이 Program이나 Application의 여러 기능을 활용할 수 있도록 해주는 도구

  • 기상청 API, 지도 API : 특정 서비스를 활용할 수 있도록 외부에 노출

  • Pandas, PyTorch : 구현한 기능을 활용할 수 있게 배포해주는 API

  • 1개의 Service는 여러 개의 기능을 가지고 있고, 1개의 기능마다 1개 이상의 API가 포함되어 있다고 생각하면 됨

Online Serving

  • Service가 커질 경우 '데이터 전처리를 위한 서버' / 'ML 모델 서버'로 나누어 배포하기도 함

  • 회사 개발 조직과 데이터 조직의 협업 방식에 따라서도 나누어 배포할 수 있음

  • Single Data Point : 단일 데이터를 Input으로 받아 실시간으로 Output을 내도록 Serving한 것

  • 주어진 환경(회사 일정, 인력, 예산, 성능 등)에 따라 다른 방식 채택

  • Version 등에 대한 Dependency가 중요하므로 "재현 가능 서비스"를 위해 Docker 등의 활용이 필수적이 되고 있음

Online Serving 고려할 것 : Latency

  • Online Serving에서는 지연 시간(Latency)를 항상 최소화해야 함

    • 최대한 빠르게 output을 도출하게 만들어야 함
  • Input 데이터를 기반으로 DB에 있는 데이터를 추출해서 모델을 예측해야 하는 Case

    • DB Query를 활용해야 하기 때문에 시간이 조금 더 걸림
  • 모델 연산 시간

    • RNN, LSTM 등은 회귀 분석보다 많은 연산을 요구함(시간이 오래 걸림)
    • 모델을 경량화하거나, 정확도가 살짝 낮더라도 간단한 모델을 활용하는 경우가 존재
  • 결과값에 대한 보정이 필요함(후처리 코드)

Online Serving 방법

직접 API 웹 서버 개발

  • Flask, FastAPI 등을 활용해 서버 구축

  • localhost 웹 서버를 만듦

클라우드 서비스를 활용해 배포

  • AWS SageMaker, GCP Vertex AI 등

  • 장점 : 직접 구축해야 하는 MLOps의 다양한 부분을 할 필요 없음

    • (ex) API 서버 만들기
  • 단점 : 비용이 들고 클라우드 서비스가 익숙해야 활용 가능

  • 소수 인원일 경우 클라우드 서비스를 사용하는 것이 좋으나 내부 실행 구조를 잘 알아야지만 문제 상황이 발견되었을 때 해결할 수 있음

Serving 라이브러리 활용

  • 사용은 편하지만, 왜 해당 방식을 활용하는지 이해하지 못 할 수 있음

    • 이런 문제 해결을 위해 먼저 클라우드 서비스를 활용해 배포하는 과정을 선행해보는 것도 좋음
  • Fast API 등을 활용할 수도 있지만 서버에 대한 이해가 충분하지 않으면 활용이 어려워질 수 있음

  • 다양한 방식으로 개발이 가능

  • 매번 추상화된 패턴을 가질 수 있음

    • Serving 라이브러리는 추상화된 패턴을 잘 제공하는 오픈소스를 활용하는 방식이기 때문

Batch Serving

Batch Serving 개념

  • Input Data가 한번에 Model에 입력되고, 여러 개의 Output Data도 한꺼번에 반환하는 형태

  • Workflow Scheduler : 요청된 작업을 특정 기간 단위로 수행

  • 주기적으로 학습을 하거나 Prediction 수행

    • 학습과 예측을 별도 작업으로 설정하여 별도로 수행시킬 수 있음
  • 학습 및 Prediction을 "주기적"으로 수행함으로써 Batch Serving 가능

    • 예약을 통해 명령어를 주기적으로 걸어둠
    • Airflow, Cron Job 등의 활용 가능
  • 실시간으로 처리할 필요가 없는 대부분의 Case에서 활용

  • Latency가 문제가 되지 않으며, 병목 현상도 크게 고려하지 않아도 됨

  • Online Serving보다 구현이 수월하고 간단함

  • 단점 : 실시간으로 활용할 수 없어서 Cold Start 문제 발생

    • Cold Start : 오늘 새로 생긴 컨텐츠는 추천할 수 없음

Online VS Batch

  • Input 관점

    • Online : 데이터 하나에 대한 즉각적인 요청을 바람
    • Batch : 여러가지 데이터를 한꺼번에 처리함
  • Output 관점

    • Online : API 형태로 바로 결과를 반환해야 함
    • Batch : 일정 주기로 Output을 내도 됨
profile
개념부터 확실히!

0개의 댓글