티스토리 뷰

반응형

머신러닝 기초학습 8: 모델 배포와 운영 (MLOps) — 학습된 모델을 서비스로 연결하는 법


“좋은 모델을 만들었다면, 이제 세상에 공개할 차례다.”

모델을 실험실에서만 잘 돌게 만드는 건 ‘연구자’의 일입니다.
하지만 ‘현업’에서는 서비스에 연결되고, 자동으로 업데이트되며, 안정적으로 동작하는 모델이 진짜 가치입니다.

이번 글에서는 머신러닝의 마지막 단계,
모델 배포(Deployment)운영(MLOps) 의 개념, 구조, 실무 예제를 다룹니다.


1. MLOps란 무엇인가?

“Machine Learning + DevOps”

MLOps는 머신러닝 모델의 개발(ML)시스템 운영(Ops) 을 통합한 개념으로,
데이터 수집 → 학습 → 배포 → 모니터링 → 재학습까지의 전 과정 자동화 파이프라인을 의미합니다.

MLOps의 핵심 목표

  1. 재현성(Reproducibility) – 같은 데이터, 같은 코드로 언제든 재학습 가능
  2. 자동화(Automation) – 학습/배포/평가를 자동으로 수행
  3. 지속적 운영(Continuous Integration & Delivery) – 모델의 업데이트가 서비스 중단 없이 이루어짐
  4. 모니터링(Monitoring) – 예측 품질, 데이터 변화를 실시간 감시

2. MLOps 전체 구조

[데이터 파이프라인]
      ↓
[모델 학습/튜닝]
      ↓
[모델 검증/평가]
      ↓
[모델 배포 (API, Batch)]
      ↓
[모델 모니터링]
      ↓
[자동 재학습 (Feedback Loop)]

이 모든 단계를 코드와 자동화 스크립트로 관리하는 것이 MLOps입니다.


3. 모델 배포의 세 가지 방식

반응형

배포 형태 설명 예시

Online Serving (API) 실시간 요청마다 예측 Flask, FastAPI, gRPC
Batch Inference 일정 주기로 예측 결과를 파일로 저장 스케줄링 (Airflow, Cron)
Edge Deployment IoT, 모바일 등 로컬 장치에 모델 탑재 TensorFlow Lite, ONNX

4. 실습: Flask를 이용한 모델 API 배포

간단한 분류 모델을 학습한 뒤,
Flask 서버를 통해 REST API로 배포하는 예제입니다.

# model_deploy.py
from flask import Flask, request, jsonify
import joblib
import numpy as np

app = Flask(__name__)
model = joblib.load("model.pkl")  # 학습된 모델 불러오기

@app.route("/predict", methods=["POST"])
def predict():
    data = request.get_json()
    X = np.array(data["features"]).reshape(1, -1)
    prediction = model.predict(X)[0]
    return jsonify({"prediction": int(prediction)})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

모델을 학습하고 저장하는 부분은 이렇게 작성합니다.

# train_model.py
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import joblib

X, y = load_iris(return_X_y=True)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
joblib.dump(model, "model.pkl")

이후 실행:

$ python train_model.py
$ python model_deploy.py

요청 테스트:

curl -X POST http://localhost:5000/predict -H "Content-Type: application/json" \
-d '{"features": [5.1, 3.5, 1.4, 0.2]}'

응답

{"prediction": 0}

이렇게 모델을 HTTP API 형태로 서비스에 연결할 수 있습니다.


5. Docker로 컨테이너화하기

“환경이 다르면 결과도 다르다 — Docker는 그 문제를 해결한다.”

# Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY . .
RUN pip install flask scikit-learn joblib
EXPOSE 5000
CMD ["python", "model_deploy.py"]

빌드 및 실행:

docker build -t ml-api .
docker run -p 5000:5000 ml-api

이제 모델은 언제, 어디서나 동일한 환경에서 실행 가능합니다.


6. CI/CD와 자동 배포

자동화 도구 예시

단계 도구

코드/모델 버전 관리 Git, DVC
빌드 & 테스트 GitHub Actions, Jenkins
배포 자동화 Docker Hub, ArgoCD, Kubernetes
스케줄링 Airflow, Prefect

MLOps의 핵심은 수동 절차를 코드로 전환하는 것입니다.


7. 모델 모니터링 (Monitoring)

모델이 운영 중에도 지속적으로 잘 작동하는지 감시해야 합니다.

모니터링 항목 의미

Input Drift 데이터 분포가 변했는가?
Prediction Drift 예측값 분포가 달라졌는가?
Concept Drift 입력-출력 관계 자체가 변했는가?
Latency / Error Rate 응답 속도, 실패율

대표 도구: Evidently AI, MLflow, Prometheus, Grafana


8. 모델 버전 관리 (Model Registry)

모델도 소스코드처럼 버전이 필요합니다.

  • MLflow Model Registry
  • Weights & Biases (W&B)
  • DVC (Data Version Control)

각 모델의 버전, 데이터셋, 하이퍼파라미터를 함께 추적하면
“이 모델이 어떤 데이터로 학습되었는가?”를 명확히 알 수 있습니다.


9. 자동 재학습 (Auto Retraining)

“모델은 시간이 지나면 낡는다.”

데이터 분포가 바뀌면 모델의 예측력이 떨어집니다.
이를 해결하기 위해 주기적 재학습 파이프라인을 구성합니다.

Airflow DAG
 ├── fetch_new_data()
 ├── preprocess()
 ├── retrain_model()
 ├── evaluate()
 ├── deploy_new_model()

10. MLOps의 철학

원칙 의미

모든 단계는 코드로 관리하라 (Infrastructure as Code) 환경, 설정, 파이프라인을 스크립트로 정의
작동하는 코드가 최고의 문서다 문서보다 reproducibility 우선
데이터도 버전 관리 대상이다 데이터는 코드보다 자주 변한다
자동화는 신뢰를 만든다 사람이 개입하지 않아야 오류가 줄어든다

11. 요약 정리

단계 주요 기술

데이터 수집 & 전처리 Airflow, Prefect
모델 학습 Scikit-learn, PyTorch, TensorFlow
버전 관리 Git, DVC, MLflow
배포 Flask, FastAPI, Docker, K8s
모니터링 Prometheus, Grafana, Evidently
재학습 자동화 Airflow, Jenkins, AutoML

📘 다음 글 예고

👉 머신러닝 기초학습 9: AutoML과 파이프라인 자동화 — 모델 학습부터 배포까지 완전 자동화하기

다음 글에서는
AutoML, MLflow, Airflow, Kubeflow 등을 활용해
데이터 수집 → 전처리 → 학습 → 평가 → 배포 → 재학습
전 과정을 완전 자동화하는 실무 파이프라인을 다룹니다.



머신러닝,MLOps,모델배포,Flask,FastAPI,Docker,Airflow,MLflow,모델모니터링,자동재학습

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
반응형