Kubernetes 이야기

온라인 서빙과 배치 서빙 본문

Kubernetes/MLOps

온라인 서빙과 배치 서빙

kmaster 2024. 5. 6. 22:53
반응형

 

기계 학습 모델을 제공한다는 것은 사용자에게 실시간 예측을 제공하거나 오프라인 사용을 위한 일괄 예측을 제공하기 위해 예측 또는 추론에 사용할 수 있도록 하는 것을 의미한다.

 

모델 서빙과 관련된 다양한 오픈소스가 있으니, 간단한 모델의 경우 Framework보다 Flask나 Fastapi로 구현하는 경우가 실제 많다. MLFlow에 저장된 모델을 사용하여 온라인 서빙 또는 배치 서빙 하는 방법을 알아보자.

온라인 서빙 (Online Serving)

온라인 서빙은 실시간 또는 거의 실시간 응답을 제공해야 하는 경우에 적합하다. API를 통해 요청이 들어오면 바로 결과를 반환하게 된다.

 

구현 방법:

  1. FastAPI 또는 Flask 사용: REST API 서버를 구축하는 데 FastAPI 또는 Flask 같은 웹 프레임워크를 사용
  2. 모델 로드 및 인퍼런스:
    • MLflow로 모델을 로드
    • 로드된 모델을 사용하여 예측을 수행
  3. 모니터링:
    • 예측 성능, 서버 부하, 에러 등을 모니터링하여 서빙 상태를 추적

예시 코드:

from fastapi import FastAPI, HTTPException
import mlflow.pyfunc
import pandas as pd
from pydantic import BaseModel

# FastAPI 앱 생성
app = FastAPI()

# MLflow 모델 로드 (예: "runs:/<your_run_id>/model")
model_uri = "runs:/<your_run_id>/model"
model = mlflow.pyfunc.load_model(model_uri)

class ModelInput(BaseModel):
    feature1: float
    feature2: float
    feature3: float
    feature4: float

@app.post("/predict")
def predict(input_data: ModelInput):
    try:
        data_df = pd.DataFrame([input_data.dict()])
        prediction = model.predict(data_df)
        return {"prediction": prediction.tolist()}
    except Exception as e:
        raise HTTPException(status_code=400, detail=str(e))

 

배치 서빙 (Batch Serving)

 

배치 서빙은 대량의 데이터를 한 번에 처리하는 경우에 적합하다. 배치 작업은 일반적으로 예약된 일정에 따라 또는 이벤트에 의해 트리거된다.

 

구현 방법:

  1. 데이터 소스 및 대상 정의:
    • 데이터를 어디에서 가져오고, 결과를 어디에 저장할지 결정한다. 예를 들어, S3 버킷이나 데이터베이스.
  2. MLflow 모델 로드 및 배치 인퍼런스:
    • MLflow로 모델을 로드
    • 데이터를 불러와 배치로 예측을 수행
  3. 배치 작업 스케줄링:
    • 작업 예약을 위해 스케줄링 도구를 사용
    • Airflow나 Argo Workflow등을 사용하면 데이터 파이프라인 자동화 및 워크플로 관리에 도움이 된다.

예시 코드:

import mlflow.pyfunc
import pandas as pd

# MLflow 모델 로드
model_uri = "runs:/<your_run_id>/model"
model = mlflow.pyfunc.load_model(model_uri)

# 데이터 로드 (예: CSV 파일로부터)
data = pd.read_csv("input_data.csv")

# 모델로 배치 예측 수행
predictions = model.predict(data)

# 결과 저장 (예: CSV 파일로 저장)
output_data = pd.DataFrame(predictions, columns=["predictions"])
output_data.to_csv("output_predictions.csv", index=False)

 

통합 및 최적화 고려 사항

 

  1. 인프라 관리: Kubernetes나 Docker 등을 사용해 온라인 및 배치 서빙을 확장성 있게 관리
  2. 로깅 및 모니터링:
    • 예측 결과 및 성능 지표를 기록하고 분석
    • Prometheus, Grafana 등의 모니터링 시스템을 사용해 서버 상태를 추적
  3. 보안: API 요청과 데이터 저장 시 암호화 및 인증 메커니즘을 적용
  4. 자동화: CI/CD 파이프라인을 구축해 모델 업데이트 시 자동으로 재배포

이러한 방법을 통해 온라인 서빙과 배치 서빙을 모두 커버하는 모델 서빙 솔루션을 구축할 수 있다.

반응형

'Kubernetes > MLOps' 카테고리의 다른 글

Ollama and Chainlit으로 Langchain과 RAG 구현하기  (0) 2023.12.30
Kafka를 사용하여 실시간 데이터 파이프라인 구축  (1) 2023.12.11
MLflow Serving  (0) 2023.09.09
mlflow  (0) 2023.09.09
dvc  (0) 2023.09.08
Comments