zzsza - Product Serving Repogitory
★ 왜 이런 기술이 등장했는지, 어떻게 활용할 수 있을지에 촛점★
수평으로 전체적인 정보를 다양하게 수집하고 전체 필드를 볼 수 있는 능력을 키우자.
수직으로 오랜 시간 꾸준하게 갈고 닦자. 조급해하지 않기 !
GOAL
- MLOps 가 무엇인지 학습한다.
- MLOps 가 필요한 이유를 이해한다.
- MLOps 의 각 Component 를 알아보고 왜 이런 것들이 생겼는지 이해한다.
- MLOps 관련 자료, 논문을 읽고 강의 내용 외에 어떤 내용이 있는지 파악해본다.
- MLOps Component 중 내가 매력적으로 생각하는 Top3 를 정해보고 왜 그렇게 생각했는지 작성해본다.
문제정의 ㅡ EDA ㅡ Feature Engineering ㅡ Train ㅡ Predict
- 문제 정의 후 데이터 특성 확인 및 feature engineering ( 머신러닝 또는 테이블 데이터 ) 후 학습 및 예측
MLOps = ML (Machine Learning) + Ops (Operations)
머신러닝 모델을 운영하면서 반복적으로 필요한 업무를 자동화시키는 과정
목표
: 머신러닝 모델 개발과 모델 운영에서 발생하는 문제와 반복을 최소화하고 비즈니스 가치를 창출하는 것★ MLOps 의 각 component 에서 해결하고 싶은 문제가 무엇이고 그 문제를 해결하기 위한 방법으로 어떤 방식을 활용할 수 있는지를 학습하자. ★
많은 양의 데이터를 일정 주기( 1일, 1주, 1달 등)로 한꺼번에 서빙( 예측 ) 한다.
실시간 예측
모델 Artifact, 이미지 등을 저장
예를 들어
pickle 등 MLFlow 등의 도구를 이용하여 모델의 성능을 자동으로 기록, 비교할 수 있다.
from pprint import pprint
import numpy as np
from sklearn.linear_model import LinearRegression
import mlflow
from utils import fetch_logged_data
def main():
# enable autologging
mlflow.sklearn.autolog()
# prepare training data
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.dot(X, np.array([1, 2])) + 3
# train a model
model = LinearRegression()
with mlflow.start_run() as run:
model.fit(X, y)
print("Logged data and model in run {}".format(run.info.run_id))
# show logged data
for key, data in fetch_logged_data(run.info.run_id).items():
print("\n---------- logged {} ----------".format(key))
pprint(data)
Research 단계에서 사용한 model feature 들을 불러와 사용할 수 있다.
from pprint import pprint
from feast import FeatureStore
store = FeatureStore(repo_path=".")
feature_vector = store.get_online_features(
features=[
'driver_hourly_stats:conv_rate',
'driver_hourly_stats:acc_rate',
'driver_hourly_stats:avg_daily_trips'
],
entity_rows=[{"driver_id": 1001}]
).to_dict()
pprint(feature_vector)
# Make prediction
# model.predict(feature_vector)
Feature 의 분포 를 확인할 수 있다.
Data Drift, Model Drift, Concept Drift
- Research 단계와 Production 단계에서 보이는 데이터 차이
★ 데이터 분포의 차이를 확인하고 그에 맞는 대응을 할 수 있다.
시간이 지남에 따라 모델의 성능이 떨어진 경우
모델의 지표, 인프라의 성능 지표를 잘 기록해두어야 한다.
머신러닝 모델을 직접 운영하면서 신경써야 하는 부분
- 다양한 툴을 이용하여 자동화가 가능하다.
MLOps 가 처음부터 필요한 것은 아니다. 처음에는 Minimal Value Product 로 시작해서 운영 리소스가 많이 들 때 하나씩 구축하는 방식을 활용하자.
각 tool 들이 어떤 문제를 어떤 식으로 해결하고 있는지에 집중하여 학습
GOAL
- 학습시킨 모델을 어떻게 프로덕트 단으로 서빙할 수 있는지 이해하기
- Rules of Machine Learning: Best Practices for ML Engineering 문서 읽고 정리
- Online Serving / Batch Serving 기업들의 Use Case 찾아서 정리하기
- (어떤 방식으로 되어 있는지 지금은 이해가 되지 않아도 문서를 천천히 읽고 정리하기)
용어 정리
두 용어가 혼재되어 사용되기도 한다.
- Serving
- 모델을 웹/앱 서비스에 배포하는 과정, 모델을 활용하는 방식, 모델을 서비스화하는 관점
- Inference
- 모델에 데이터가 제공되어 예측하는 경우, 사용하는 관점
예를 들어
Online Serving / Online Inference
예를 들어
Batch Serving ( + Inference )
단일 데이터를 받아 실시간으로 예측하는 예제
참고
개발 조직과 데이터 조직의 협업하는 방식에 따라 다르게 개발할 수 있다.
장점
: 쉬운 사용, 소수의 인력으로 운영시 유용단점
: 익숙해야 잘 활용, 비용이 비쌈장점
: FastAPI 나 Flask 를 추상화하고 있음 ( 추상화된 패턴을 잘 제공함 )참고
주어진 환경( 일정, 인력, 예산, 요구 성능 등 ) 에 따라 달라진다.
( 1 ) 재현 가능한 코드를 작성
예를들어
RNN, LSTMWorkflow Scheduler 로 특정 기간 단위로 자동 실행
예를 들어
1시간 뒤 수요 예측, 재고 및 입고 최적화를 위해 매일 매장별 제품 수요 예측
실시간 모델 결과가 어떻게 활용되는지 생각해보자
- Rules of Machine Learning: Best Practices for ML Engineering 문서 읽고 정리
- Online Serving / Batch Serving 기업들의 Use Case 찾아서 정리하기
- (어떤 방식으로 되어 있는지 지금은 이해가 되지 않아도 문서를 천천히 읽고 정리하기)
이 글은 커넥트 재단 Naver AI Boost Camp 교육자료를 참고했습니다.