MLOps/MLflow

MLFlow

manfromearth1 2025. 5. 29. 22:17

MLFlow


때는 바야흐로 군대에 있을 시기인 2023년 5월, 필자는 군 e러닝 강좌 기말과제로 딥러닝을 통해 부동산 가격 예측을 하는 프로젝트를 진행했다. 이때가 아마 딥러닝을 나름의 실전(?)으로 처음 경험한 시기였고, 당시엔 당장 이번 년도 초반까지만 해도 Colab 외에는 마땅히 쓸 줄 아는 개발 환경도 없었다.

하지만 프로젝트가 점차 복잡해지고, 다양한 하이퍼파라미터 실험과 모델 버전 관리를 하다 보니 자연스레 느낀 점이 있었다. 바로 “내가 지금 뭘 했고, 그 결과가 어땠는지 기억조차 안 난다” 는 것이다. Colab 셀 수십 개를 오가며 코드를 수정하고 결과를 확인하다 보면, 어떤 실험이 효과가 있었고 어떤 모델이 성능이 더 좋았는지 일일이 메모해두지 않으면 금방 잊혀진다.

이때 등장한 것이 바로 MLflow였다. MLflow는 실험 추적, 모델 저장 및 배포 등 머신러닝 프로젝트 전반을 체계적으로 관리할 수 있게 해주는 오픈소스 플랫폼이다. 단순히 로그를 남기는 수준을 넘어서, 실험의 각 버전을 기록하고, 모델의 성능을 시각화하며, 나아가 REST API 형태로 배포까지 가능하게 해준다. 특히 로컬 환경이나 클라우드 어디에서든 손쉽게 구성할 수 있어, Colab을 넘어선 실전 MLOps의 첫걸음으로서 최적이었다. 따라서 이번 시간에는 MLflow가 하는 기능, 그리고 사용하는 방법에 대해서 논의해보고자 한다.

MLflow의 기능


일단 내 ML 프로젝트의 진행 방식을 돌아보자. 공감이 되었으면 좋겠다.

1. 데이터를 열심히 잘 모은다.

2. 모델링을 하고 성능을 어딘가에 체크한다.

3. 하다가 열받아서, 모델링하다가 힘드니까 성능 체크 패러미터 기록 안하고 무지성으로 테스트해본다.

4. 그와중에 잘 나왔던 거 패러미터 뭐였지? 하면서 원숭이로 복귀

5. 하다가 또 열받으니까 git 혼자 다시 파서 해보기

6. 어 그러다가 1 또는 2에서 잘못됐었네?? ㅋㅋ 반복

이런 행동들을 막아주는 첫 걸음 중 하나가 자동으로 로깅이 될 수 있도록 해주는 서비스를 이용하는 것이고, 그러한 서비스들 중에서 MLflow라는 것이 있는 것이다. MLflow의 기능 및 특징을 아래의 표로 확인해보자.

기능 설명
1. Tracking (실험 추적) - 하이퍼파라미터, 메트릭, 아티팩트(모델, 이미지 등) 자동 기록- 실험별 비교 UI 제공- 로컬 및 원격 서버 사용 가능
2. Projects (재현 가능한 프로젝트) - Conda 또는 Docker 기반의 환경 정의 지원- YAML 파일(MLproject)을 통해 파이프라인 표준화- 코드 공유 및 재현성 확보
3. Models (모델 저장 및 배포) - 다양한 포맷(TensorFlow, PyTorch, Scikit-learn 등) 지원- 모델을 .pkl 또는 .mlmodel 포맷으로 저장- REST API, CLI, Python SDK로 로드/서빙 가능
4. Registry (모델 레지스트리) - 모델 버전 관리 및 단계별 전환 (Staging, Production 등)- 승인 프로세스 및 모델 설명 추가 가능- 협업 시 신뢰성 확보
5. UI (웹 인터페이스) - http://localhost:5000 에서 실험 결과 시각화- 메트릭 그래프, 파라미터 비교, 아티팩트 다운로드 지원
6. 다중 프레임워크 호환 - PyTorch, TensorFlow, XGBoost, LightGBM, sklearn 등 지원- 커스텀 모델도 pyfunc 형식으로 통합 가능
7. 로컬 및 클라우드 호환 - 로컬 머신, AWS S3, Azure Blob, GCP 등 연동 가능- Databricks와도 자연스럽게 통합
8. 경량 MLOps 시작점 - Kubeflow, SageMaker, Airflow 등 무겁지 않고 가볍게 시작 가능- 작은 프로젝트도 관리 구조화에 용이

MLflow UI. 동일 모델에 관해 하이퍼패러미터를 달리해주면서 실험한 결과다. 물론 Handwritten digit 인식이라 사실상의 accuracy는 거의 비슷하다...

 

한번 모델이 학습된 후 저장된 파일들을 확인해보면서 어떤 구성 요소가 있고, 어떻게 이용하는 것인지 천천히 확인해보자.

 

MLflow가 학습 모델에 관해 제공하는 파일들!


Trained Model
├── artifacts
│   └── model
│       ├── MLmodel
│       ├── conda.yaml
│       ├── data
│       │   ├── model.pth
│       │   └── pickle_module_info.txt
│       ├── metadata
│       │   ├── MLmodel
│       │   ├── conda.yaml
│       │   ├── python_env.yaml
│       │   └── requirements.txt
│       ├── python_env.yaml
│       └── requirements.txt
├── meta.yaml
├── metrics
│   ├── test_acc
│   └── train_loss
├── params
│   ├── batch_size
│   ├── learning_rate
│   └── num_epochs
└── tags
    ├── mlflow.log-model.history
    ├── mlflow.runName
    ├── mlflow.source.git.commit
    ├── mlflow.source.name
    ├── mlflow.source.type
    └── mlflow.user

  1. artifacts/model

🔹 data/

  • model.pth:
    → 핵심 모델 가중치 파일. PyTorch의 torch.save(model.state_dict())와 유사한 내용이 들어있으며, 실제 추론 등에 사용된다.
  • pickle_module_info.txt:
    → torch.save()는 내부적으로 pickle을 사용하기 때문에, 어떤 pickle 모듈 버전으로 직렬화했는지 기록된다. 모델 재사용 시 호환성 확인용으로 사용된다.

🔹 metadata/
MLflow 내부의 메타 정보 파일들이 저장되어 있다.

  • MLmodel:
    → 모델 형식과 flavor(예: pytorch, pyfunc) 정보가 담긴 핵심 설정 파일
    모델 로딩 시 mlflow.pyfunc.load_model() 등이 이걸 기반으로 작동한다.
  • conda.yaml / python_env.yaml:
    → 해당 모델을 실행하기 위한 Python 환경 및 라이브러리 리스트.
    conda.yaml: Conda 환경용
    python_env.yaml: Python 가상환경이나 pip 기반 재현용
  • requirements.txt:
    → Python 환경에서 필요한 패키지 명세 (pip install -r requirements.txt로 재현 가능)
  1. metrics/
    모델 학습 후 기록된 성능 지표들이 들어가 있다.
  2. params/
    실험 재현성을 위해, params/에는 사용된 하이퍼패러미터가 기록되어 있다.
  3. tags/
    메타데이터로 활용되는 태그 정보들이다.
    • mlflow.runName: 실험 이름
    • mlflow.source.git.commit: 관련 커밋 해시
    • mlflow.user: 실험 수행자
    • mlflow.source.name: 실행한 Python 파일명
      → 실험 출처 추적과 협업에 유용하다.
  4. meta.yaml
  • 전체 실험 및 아티팩트 관련 메타데이터가 YAML 포맷으로 정리되어 있고, 각 컴포넌트가 어떻게 연결돼 있는지 로딩 시 참조한다.

실습(Github)


https://github.com/wognsths/mlflow-torchserve

 

GitHub - wognsths/mlflow-torchserve: Tracking machine learning flow with mlflow, and serving with torchserve

Tracking machine learning flow with mlflow, and serving with torchserve - wognsths/mlflow-torchserve

github.com

사실 너무 쉬워서, 딱히 실습을 할 것은 없다. README.md 확인하면서 해보자. Torchserve로 웹에 올리는 것도 해놓았으니 확인해봐도 좋다!