> For the complete documentation index, see [llms.txt](https://lswkim322.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lswkim322.gitbook.io/til/til-ml/boostcamp/p-stage-product-serving/part-1-product-serving/1.3-model-serving.md).

# 1.3 Model Serving

> * Product Serving 에 대해 자세히 알아보기&#x20;

## 1. Model Serving

### 1.1. Serving Basic

**"Production(Real World) 환경에 모델을 사용할 수 있도록 배포"**

* 머신러닝 모델을 개발하고, 현실 세계(앱, 웹)에서 사용할 수 있게 만드는 행위
* 서비스화라고 표현할 수도 있음
* 머신러닝 모델을 회사 서비스의 기능 중 하나로 활용
  * ex) 추천 시스템의 추천 알고리즘
* Input이 제공되면 모델이 예측 값(Output)을 반환

**Serving : 모델을 웹/앱 서비스에 배포하는 과정, 모델을 활용하는 방식, 모델을 서비스화하는 관점 Inference : 모델에 데이터가 제공되어 예측하는 경우, 사용하는 관점**

**웹 서버(Wikipedia)**

* HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트를 전송해주는 서비스 프로그램
* 요청(Request)을 받으면 요청한 내용을 보내주는(Response) 프로그램

**머신러닝 모델 서버**

* 어떤 데이터(Input)를 제공하며 예측해달라고 요청(Request)하면, 모델을 사용해 예측 값을 반환(Response)하는 서버

#### API(Application Programming Interface)

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

* 특정 서비스에서 해당 기능을 사용할 수 있도록 외부에 노출 : 기상청 API, 지도 API
* 라이브러리의 함수 : Pandas, Tensorflow, PyTorch

## 2. Online Serving

![](/files/KD4BP60XSkbXE1YOsz4i)

* 요청(Request)이 올 때마다 실시간으로 예측
* 클라이언트(애플리케이션)에서 ML 모델 서버에 HTTP 요청(Request)하고, 머신러닝 모델 서버에서 예측한 후, 예측 값(응답)을 반환(Response)

> 진행하고 있는 프로젝트로 생각하면, 욕설감지의 경우 실시간으로 이루어지는 Online Serving으로 볼 수 있다.
>
> 사용자가 문구를 입력 -> 서버로 Text 전달 -> 욕설여부 판단 -> 사용자에게 전달&#x20;

* ML 모델 서버에 요청할 때, 필요시 ML 모델 서버에서 데이터 전처리를 해야할 수 있음 (혹은 분리를 위해 전처리 서버 / ML 모델 서버로 나눌 수도 있음)
  * 전처리에 사용되는 비용이 클 경우
* 서비스의 서버에 ML 서버를 포함하는 경우도 있고, ML 서버를 별도로 운영하는 경우도 존재
* <mark style="background-color:blue;">**Online Serving을 구현하는 방식**</mark>
  * 직접 API 웹 서버 개발 : Flask, FastAPI 등을 사용해 서버 구축
  * 클라우드 서비스 활용 : AWS의 SageMaker, GCP의 Vertex AI 등
  * Serving 라이브러리 활용 : Tensorflow Serving, Torch Serve, MLFlow, BentoML 등
* <mark style="background-color:blue;">**Online Serving에서 고려할 부분**</mark>
  * 재현가능성, 디펜던시 관리 (poetry, Docker)
  * 실시간 예측처리를 고려한 속도 &#x20;
    * Data Load
    * 모델 연산
    * 후처리&#x20;

## 3. Batch Serving

![](/files/lLUDdJOkWg9tBQDg5TT1)

* 주기적인 Term을 가지고 이루어지는 과정(스케줄러)
* Airflow, Cron Job 등으로 스케쥴링 작업(Workflow Scheduler)

> &#x20;라이브커머스 하루의 방송이 종료되고, 그날 발생한 데이터에 대한 분석 및 리포팅을 하는 경우 그날의 작업이 완료되고, 새벽에 배치가 이루어지면 된다.
>
> &#x20;단, 실시간이 아니므로 적용되기까지 시간이 소요된다. &#x20;

![](/files/r9ZHVbnxQlNqkm9kDf9q)

## 4. Further Reading

{% embed url="<https://developers.google.com/machine-learning/guides/rules-of-ml>" %}

{% hint style="info" %}
다른 것보다 실제로 회사생활을 해본 경험으로 어떤 이슈들과 어떤 점을 중점적으로 생각하여야하는지가 잘 와닿았다. API서버도 구축해본 경험이 있고, 실시간 / Batch 데이터 전송도 경험해본바가 있어 생소한 툴에 대한 활용법 위주로 생각해보면 좋을 것 같다.                 &#x20;
{% endhint %}
