MLflow: MLOps의 첫걸음

발행: (2026년 2월 18일 오전 05:25 GMT+9)
9 분 소요
원문: Dev.to

Source: Dev.to

죄송합니다만, 번역하려는 전체 텍스트를 제공해 주시면 해당 내용을 한국어로 번역해 드리겠습니다. 코드 블록이나 URL은 그대로 유지하고, 나머지 내용만 번역해 드리겠습니다.

소개

머신러닝 모델에서 뛰어난 지표를 달성하는 것은 쉬운 일이 아닙니다. 어떤 하이퍼파라미터를 사용했는지 기억나지 않아 결과를 재현하지 못한다고 상상해 보세요.

MLOps 세계로 들어가면 “모델을 학습했고 성공했다”는 단계에서 벗어나 다음을 할 수 있습니다:

  • 실험 추적
  • 실행 비교
  • 아티팩트 저장
  • 자신 있게 프로세스 반복

MLOpsML 프로젝트에 DevOps 원칙을 적용하는 실천입니다. 이는 개발 및 학습 단계에서 재현성부터 배포와 모니터링에 이르기까지 ML 프로젝트의 수명주기를 관리하는 것을 포함합니다.

전통적인 소프트웨어 개발에서는 코드 버전 관리(예: Git)만으로 충분한 경우가 많습니다. 하지만 ML에서는 결과가 코드 + 데이터 + 하이퍼파라미터에 의존합니다.

전용 도구를 사용하면 실험 과정이 혼란스러워지기 전에 모델에 대한 감사와 협업을 용이하게 할 수 있습니다. 구조화된 히스토리가 없으면 어떤 AI 프로젝트든 재현성과 확장성을 저해합니다.

MLflow란?

MLflow는 MLOps를 적용하여 머신러닝 프로젝트의 라이프사이클을 정리하는 데 도움을 줍니다. 간단한 프로젝트라도 각 훈련마다 수행된 모든 작업의 히스토리를 자동으로 생성합니다.

실제로 MLflow를 사용하면 다음과 같은 질문에 답할 수 있습니다:

  • 어떤 파라미터 조합이 가장 좋은 메트릭을 만들었는가?
  • 언제 훈련을 실행했고 결과는 무엇이었는가?
  • 해당 실행에서 훈련된 모델은 어디에 저장되었는가?

MLflow는 이러한 관리를 표준화하기 위해 등장했습니다. 이 문서에서는 세 가지 핵심 기록 유형에 초점을 맞춥니다:

유형설명
파라미터설정 입력값 (예: learning_rate, n_estimators)
메트릭성능 결과 (예: accuracy, log_loss)
아티팩트바이너리 출력 (예: .pkl 혹은 .onnx 형식으로 저장된 모델)

MLflow는 즉흥적인 실험을 감사 가능하고 표준화된 기록 시스템으로 전환합니다.

MLflow 간단 설정

백엔드 스토어

SQLite (mlflow.db) – 메타데이터(실험, 실행, 파라미터, 메트릭)를 저장합니다.

아티팩트 스토어

파일 스토어 (mlruns/) – 아티팩트(모델, 플롯 등)를 저장합니다.

설치

pip install mlflow

서버 시작

mlflow server \
    --backend-store-uri sqlite:///mlflow.db \
    --default-artifact-root ./mlruns \
    --host 0.0.0.0 \
    --port 5000

파라미터 설명

파라미터설명
mlflow serverMLflow 서비스를 시작합니다
--backend-store-uriSQLite는 가볍고 첫 번째 반복에 이상적입니다
--default-artifact-root아티팩트가 저장될 디렉터리
--host--port서버가 제공될 주소( UI에서도 사용됨 )

SQLite + 파일 스토어를 사용할 때, MLflow 디렉터리에는 두 가지 주요 구성 요소가 나타납니다:

  • mlflow.db – 메타데이터(실험, 실행, 파라미터, 메트릭)를 포함한 SQLite 데이터베이스.
  • mlruns/ – 아티팩트와 실행 내용(모델, 플롯 등)이 들어 있는 폴더.

Python과 통합

mlflow 라이브러리는 코드에 거의 영향을 주지 않고 서버에 연결할 수 있게 해줍니다. URI를 설정하고 mlflow.start_run()을 사용하면 됩니다.

import mlflow
import mlflow.sklearn
from sklearn.metrics import accuracy_score, recall_score

# Conecta ao tracking server
mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("Customer_Churn_Experiment")

with mlflow.start_run():
    # ----- Treinamento do modelo -----
    # model = ... (seu código de treinamento aqui)

    # Log de parâmetros
    mlflow.log_param("max_depth", 10)
    mlflow.log_param("n_estimators", 100)

    # Avaliação
    y_pred = model.predict(X_test)
    acc = accuracy_score(y_test, y_pred)
    rec = recall_score(y_test, y_pred)

    # Log de métricas
    mlflow.log_metric("accuracy", acc)
    mlflow.log_metric("recall", rec)

    # Log do artefato (modelo)
    mlflow.sklearn.log_model(model, "random_forest_model")

첫 실행 시 어떤 일이 일어나나요?

  • Customer_Churn_Experiment 실험이 자동으로 생성됩니다.
  • 런(run)이 기록됩니다.
  • 파라미터, 메트릭, 아티팩트가 트래킹 서버로 전송됩니다.

결과 시각화

MLflow UI에서 다음을 볼 수 있습니다:

  • 추적된 Params 및 Metrics
  • 각 실행의 아티팩트 목록

제가 기록한 파라미터와 메트릭 예시:

파라미터
n_estimators100
max_depth10
메트릭
accuracy0.85
recall0.78

이를 통해 터미널에서 print에 의존하지 않고 서로 다른 실행을 비교할 수 있습니다.


사용 사례: 하이퍼파라미터 비교

max_depthn_estimators를 변경하여 두 번째 인터랙션을 수행했습니다. 개선될 것으로 기대했지만 UI를 확인했을 때 accuracy 메트릭이 떨어졌습니다.

교훈

MLflow가 보여준 내용
추적성하이퍼파라미터 변경이 과적합을 초래했다는 실증적 증거
기술적 비교UI가 두 실행을 시각적으로 비교할 수 있게 함
재현성이전 버전의 아티팩트가 기록되어 배포 준비가 됨

일반적인 이점

  • 전환점: 모델 수명 주기에서 추적성을 관리하는 방식을 변화시킵니다.
  • 검사 용이성: 명령줄에서 직접 SQLite를 조회할 수 있습니다.
  • 고급 MLOps의 기반: 추적은 첫 번째 단계일 뿐이며, 이어서 Model RegistryModel Serving이 따라옵니다.

실험 추적을 마스터하는 것은 향후 **Continuous Training (CT)**을 구현하기 위한 기반이 됩니다.

저장소

이 프로젝트의 전체 코드는 제 GitHub에서 확인할 수 있습니다:
mlops‑tel (SEU_USUARIO를 자신의 사용자 이름으로 교체하십시오).

co-churn-predict

그리고 당신은: 일상에서 MLflow를 이미 사용하고 있나요? 당신의 관점에서 모델의 완전한 재현성을 보장하기 위한 가장 큰 도전 과제는 무엇이라고 생각하나요?

댓글에서 토론해요!

0 조회
Back to Blog

관련 글

더 보기 »

채용 중인 기업 — 2026년 2월

Dev‑First 기업의 오픈 포지션: Product engineers, Developer advocates, 혹은 Community builders? 새해를 맞아 dev tools 분야에서 새로운 기회를 시작하세요.