보통 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입니다.
- 실험/런 검색 자동화
- 삭제 및 복원 기능
- 메트릭 기반 정렬 및 필터링
- 대규모 실험 환경의 유지보수 자동화
'MLOps·머신러닝 운영 > MLflow를 활용한 머신러닝 실험 관리' 카테고리의 다른 글
| MLflow 로컬 폴더 구조 이해: mlruns 디렉토리의 핵심 구성 정리 (0) | 2026.02.19 |
|---|---|
| MLflow CLI — 명령어 정리 (0) | 2025.10.25 |
| MLflowClient 완전 정리 — MLflow를 코드로 제어하는 방법 (0) | 2025.10.25 |
| MLflow Projects — 폴더 구조부터 실행까지 한 번에 이해하기 (0) | 2025.10.25 |
| MLflow Projects — “기록에 신뢰를 더하는 환경 통일 시스템” (0) | 2025.10.25 |