MLflow는 Machine Learning Lifecycle을 관리하는 오픈소스 플랫폼입니다. 머신러닝 워크플로우를 보다 쉽게 관리하고, 추적(tracking), 배포(deployment), 그리고 모델 재사용(reproducibility)을 지원합니다. MLflow는 다음과 같은 주요 컴포넌트로 구성되어 있습니다:
log_param()을 통해 하이퍼파라미터 기록.log_metric()을 통해 성능 지표 기록.log_artifact()을 통해 데이터셋, 모델 파일, 결과 파일 등 아티팩트 저장.MLproject 파일: 프로젝트의 메타데이터 정의.mlflow run <프로젝트 경로>mlflow.<framework>.log_model() 또는 save_model().Staging, Production, Archived 상태 관리.지난 포스트에서는 minio를 활용한 yolo 학습 코드가 나왔었다. 여기에서 mlflow는 학습 실험에 대한 기록 관리를 한다고 했는데 이어서 자세히 알아보자
import os
import subprocess
import boto3
import mlflow
# ========== 설정 부분 ==========
MINIO_ENDPOINT = "http://127.0.0.1:9000"
ACCESS_KEY = "your-access-key"
SECRET_KEY = "your-secret-key"
BUCKET_NAME = "mybucket"
DATA_PREFIX = "my-yolo-dataset/"
LOCAL_DATA_DIR = "./data" # YOLO 학습용 데이터 저장 디렉토리
DARKNET_PATH = "./darknet"
CONFIG_FILE = "cfg/yolov4.cfg"
DATA_FILE = "data/obj.data"
PRETRAINED_WEIGHTS = "yolov4.conv.137"
EXPERIMENT_NAME = "YOLOv4_Experiment"
USE_MLFLOW = True # 필요시 True/False로 MLflow 로깅 on/off
# ============================
...
def main():
# 1. 데이터 다운로드
download_data_from_minio()
# 2. MLflow 설정
if USE_MLFLOW:
mlflow.set_tracking_uri("http://127.0.0.1:5000") # MLflow tracking server URI (변경 가능)
mlflow.set_experiment(EXPERIMENT_NAME)
# 학습 파라미터 예시
learning_rate = 0.001
batch_size = 64
with mlflow.start_run() if USE_MLFLOW else nullcontext(): # mlflow 사용 안할 경우 dummy context
# 파라미터 로깅
if USE_MLFLOW:
mlflow.log_param("learning_rate", learning_rate)
mlflow.log_param("batch_size", batch_size)
mlflow.log_param("config_file", CONFIG_FILE)
mlflow.log_param("data_file", DATA_FILE)
# 3. Darknet 학습 실행
run_darknet_training()
# 4. 학습 결과 파싱 (mAP 등)
map_value = parse_darknet_log()
if map_value is not None and USE_MLFLOW:
mlflow.log_metric("mAP", map_value)
# 5. 최종 모델 가중치 파일 로깅
final_weights = find_final_weights()
if final_weights and USE_MLFLOW:
mlflow.log_artifact(final_weights, artifact_path="model")
# 필요하다면 기타 결과물(예: confusion matrix 이미지, log 파일)도 로깅 가능
if USE_MLFLOW:
mlflow.log_artifact("training.log", artifact_path="logs")
# mlflow 미사용 시 with 구문에서 예외 처리용 context
from contextlib import contextmanager
@contextmanager
def nullcontext():
yield
if __name__ == "__main__":
main()
상기 코드를 실행시키면 다음과 같이 YOLOv4_Experiment 파트가 생성되고 내부에 실행되고 있는 실험이 보인다.

실행되고 있는 실험에 들어가보면 아래와 같이 상세한 정보가 나오고 설정한 실험 파라메터와 metric을 볼 수 있다
