MLOps·머신러닝 운영/MLflow를 활용한 머신러닝 실험 관리

MLflowClient — 실험(Experiment)과 실행(Run) 관리 자동화하기

Data Jun 2025. 10. 25. 10:44

보통 MLflow UI에서 실험(Experiment)을 만들고 삭제하고 Run을 확인하죠.
하지만 규모가 커지면 UI로는 관리가 비효율적입니다.

이럴 때 MlflowClient를 사용하면,


👉 코드 한 줄로 실험을 검색, 정렬, 삭제, 복원까지 자동화할 수 있습니다.

 

 

1. 기본 세팅

from mlflow.tracking import MlflowClient
from mlflow.entities import ViewType

# Initialize MLflowClient
client = MlflowClient()

MlflowClient() 객체를 초기화하면
Tracking 서버(혹은 로컬 mlruns/ 디렉토리)에 직접 접근할 수 있게 됩니다.

 

2. 실험 검색 (Search Experiments)

# Search for experiments
search_results = client.search_experiments(filter_string="name LIKE '%_Experiment%'")
print("Found experiments:", [(exp.experiment_id, exp.name) for exp in search_results])

코드 설명

  • search_experiments() : MLflow에 등록된 실험 목록을 검색합니다.
  • filter_string : SQL과 유사한 필터 문법으로 이름이나 속성을 검색할 수 있습니다.
    예를 들어 "name LIKE '%Experiment%'" 는 이름에 Experiment가 포함된 실험만 필터링합니다.

활용 예시

  • 프로젝트별 실험 이름 패턴을 기준으로 특정 그룹만 찾기
  • owner = 'junhyeong' 같은 메타데이터 기반 검색 가능

 

3. 전체 실험 조회 (List All Experiments)

# List all experiments
experiments = client.search_experiments(
    view_type=ViewType.ALL,
    order_by=["experiment_id DESC"]
)

for exp in experiments:
    print(f"Experiment: {exp.name} (ID: {exp.experiment_id})")

코드 설명

  • view_type=ViewType.ALL
    → 활성(Active) + 비활성(Deleted) 실험 모두 표시
  • order_by=["experiment_id DESC"]
    → 최신 실험 ID 기준으로 내림차순 정렬

MLflow UI에서 “삭제된 실험 보기” 기능을 코드로 구현한 셈이에요.

 

 

4. 각 실험 내 실행(Run) 검색

for exp in experiments:
    # Search for runs
    filtered_runs = client.search_runs(experiment_ids=[exp.experiment_id])

    for run in filtered_runs:
        print(
            f"Run ID: {run.info.run_id}, "
            f"Run Name: {run.info.run_name}, "
            f"MSE: {run.data.metrics['mse'] if 'mse' in run.data.metrics else 'N/A'}"
        )

코드 설명

  • search_runs(experiment_ids=[]) : 특정 실험 내의 모든 실행을 검색합니다.
  • run.info : 실행 기본 정보 (ID, 이름, 상태 등)
  • run.data.metrics : 실행 중 기록된 메트릭 값

💡 여기서는 mse(Mean Squared Error) 메트릭을 조회하고, 없으면 "N/A" 로 표시합니다.

 

5. 실험 삭제 및 복원 (Soft Delete / Restore)

# Delete an experiment (soft delete)
# client.delete_experiment(experiment_id="9")

# Restore an experiment
# client.restore_experiment(experiment_id="9")

코드 설명

  • delete_experiment() : 실험을 소프트 삭제(Soft Delete) 합니다.
    → 완전 삭제가 아니라, deleted 상태로 표시만 됩니다.
  • restore_experiment() : 다시 활성화(복원)

 

6. ViewType별 조회 옵션

옵션 설명
ViewType.ACTIVE_ONLY 활성화된 실험만 조회
ViewType.DELETED_ONLY 삭제된 실험만 조회
ViewType.ALL 둘 다 조

 

 

7. 전체 코드 구조 요약

from mlflow.tracking import MlflowClient
from mlflow.entities import ViewType

client = MlflowClient()

# 1. 이름 패턴 기반 실험 검색
search_results = client.search_experiments(filter_string="name LIKE '%_Experiment%'")
print("Found experiments:", [(exp.experiment_id, exp.name) for exp in search_results])

# 2. 전체 실험 조회 (삭제 포함)
experiments = client.search_experiments(view_type=ViewType.ALL, order_by=["experiment_id DESC"])

# 3. 각 실험의 실행(Run) 탐색
for exp in experiments:
    print(f"Experiment: {exp.name} (ID: {exp.experiment_id})")
    filtered_runs = client.search_runs(experiment_ids=[exp.experiment_id])

    for run in filtered_runs:
        print(f"Run ID: {run.info.run_id}, Run Name: {run.info.run_name}, "
              f"MSE: {run.data.metrics.get('mse', 'N/A')}")

 

 

8. 실무에서의 활용 포인트

✔️ 대규모 프로젝트 관리
수십 개의 실험을 자동으로 검색하고 오래된 실험은 백업하거나 삭제 가능

✔️ 품질 관리 자동화
메트릭(mse, accuracy)을 기준으로 가장 좋은 Run만 필터링

✔️ MLOps 파이프라인 통합
Airflow, Jenkins 등에서 MLflowClient를 활용해 실험 주기적 정리 가능

 

 

 

정리하면

 

MLflowClient는 단순히 모델을 등록하는 도구가 아닙니다.
실험을 “관리”하고 “자동화”하기 위한 MLflow의 백엔드 API입니다.

  • 실험/런 검색 자동화
  • 삭제 및 복원 기능
  • 메트릭 기반 정렬 및 필터링
  • 대규모 실험 환경의 유지보수 자동화