네이버 AI 부스트캠프 4기 : AI 서비스 기초 2

nask·2022년 11월 9일

AI 서비스 개발 기초 3강 : Model Serving

Model Serving

Serving

  • Production(Real World) 환경에 모델을 사용할 수 있도록 배포
  • 머신러닝 모델을 개발하고, 현실 세계(앱, 웹)에서 사용할 수 있게 만드는 행위
  • 서비스화라고 표현할 수도 있음
  • 머신러닝 모델을 회사 서비스의 기능 중 하나로 활용(예 : 추천 시스템의 추천 알고리즘)
  • Input이 제공되면 모델이 예측 값(Output)을 반환
  • 모델을 활용하는 방식, 모델을 서비스화하는 관점
  • 크게 online/batch serving으로 나뉨
  • batch serving는 inference도 포함하지만 online serving과 online inference는 나눌 수도 있음

Inference

  • 모델에 데이터가 제공되어 예측하는 경우, 사용하는 관점
  • serving과 용어가 혼재되는 경우 존재

Online Serving

  • API 형태로 바로 결과를 환해야 하는 경우나 서버와 통신이 필요한 경우 사용

  • 처음부터 Online serving 형태로 만들기보다는 실시간 모델 결과가 어떻게 활용될지에 대해 생각해보고 필요하다면 진행

ML 모델 서버

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

  • ML 모델 서버에 요청 시 ML 서버에서 데이터 전처리가 이루어질 수도, 별도의 전처리 서버에서 이루어질 수도 있음

  • 서비스의 서버에 ML 서버가 포함될 수도, 별도 운영할 수도 있음

API(Application Programming Interface)

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

  • 기계와 인간의 소통 창구 ex) 리모컨

  • 오픈 API, 라이브러리의 함수(Pandas, Tensorflow, PyTorch...) 등

  • 타코집의 주문 요청 API, 메뉴확인 API, 결제 API 등 각기 다른 기능

구현 방식

1) 직접 API 웹 서버 개발

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

2) 클라우드 서비스 활용

AWSSageMaker, GCPVertexAI

  • 직접 구축해야 하는 MLOps의 다양한 부분(API 서버 만들기)이 만들어짐

  • 사용자 관점에선 PyTorch 사용하듯 학습 코드만 제공하면 API 서버가 만들어짐

  • 비용 문제 : 직접 만드는 것보단 더 많은 비용이 나갈 수 있음

  • 회사의 상황에 따라 클라우드 서비스를 활용하는 것이 좋은 시기도 존재
    (소수의 인원만 존재하며, 소수의 인원이 많은 업무를 해야하는 경우)

  • 클라우드의 내부 실행 구조를 잘 알아야 문제 상황이 발견되었을 때 잘 해결할 수 있음

  • 클라우드 서비스에선 어떤 방식으로 AI 제품을 만들었는지 확인할 수도 있어서 사용해보는 것도 좋음

3) Serving 라이브러리 활용

Tensorflow Serving, Torch Serve, MLFlow, BentoML

  • Fast API를 사용하기에는 서버에 대한 이해가 충분하지 않을 때 사용 가능

  • 추상화된 패턴을 잘 제공하는 오픈소스를 활용

  • BentoML 예시

    위 코드를 실행하고 학습한 뒤 CLI에서 bentoml serve IrisClassifier:latest
    입력하면 배포 완료

고려사항

  • serving 라이브러리의 경우 사용법은 간단하지만 라이브러리에 종속될 우려와, low level의 이해가 부족하다는 점, 그리고 서버 프로그래밍의 필요성 때문에 서버 프로그래밍 이후에 학습할 예정

  • Python, 패키지 버전 등 dependency와 재현 가능성 중요(Virtualenv, Poetry, Docker)

  • Latency 최소화 : 데이터 추출 위한 쿼리 실행 및 결과 반환, 모델 수행 연산, 결과 값에 대한 보정(후처리) 필요-ex) 집값 음수

해결 방법

  • 데이터 전처리 서버 분리 or Feature store 사용

  • 모델 경량화

  • 병렬처리(Ray)

  • 예측 결과 캐싱

Batch Serving

  • Batch Serving은 주기적으로 한번에 많은 양을 학습하거나 예측하는 경우 사용

  • Workflow Scheduler 사용(10시에 python main.py 실행) - Airflow, Cron Job

  • 학습 / 예측을 별도의 작업으로 설정하여 따로 진행 가능

  • 실시간이 필요 없는 대부분의 방식에서 활용 가능

  • Jupyter Notebook에 작성한 코드를 함수화한 후, 주기적으로 실행하는 간단한 구조로, Online Serving보다 구현이 수월하며 간단함

  • 한번에 많은 데이터를 처리하므로 Latency가 문제되지 않음

Further Question

1. Rules of Machine Learning: Best Practices for ML Engineering 문서 읽고 정리하기!

추후 정리 예정

2. Online Serving / Batch Serving 기업들의 Use Case 찾아서 정리하기(어떤 방식으로 되어 있는지 지금은 이해가 되지 않아도 문서를 천천히 읽고 정리하기)

추후 정리 예정

0개의 댓글