Created by. 솔루션사업팀
<aside> ⚠️ MLflow
머신러닝 모델의 실험을 추적/기록하고, 모델을 공유/배포 할 수 있도록 지원하는 라이브러리입니다.
머신러닝 모델 성능에는 데이터, 하이퍼파라미터, 모델 구조 등 다양한 요인이 존재합니다.
특히, 하이퍼파라미터와 같이 사용자가 직접 지정하는 변수는 값을 조정하며 여러 번 반복 실험해야 최적값을 찾을 수 있습니다.
이러한 경우에 MLflow를 사용하게 되면, 실험에 사용하였던 하이퍼파라미터 및 그에 따른 모델 성능을 기록할 수 있어 실험이 용이합니다.
</aside>
<aside> 🔑 주요 기능
1. Tracking
머신러닝 코드 실행, logging을 위한 API, UI
MLflow Tracking을 사용해 결과를 Local, Server에 기록해 여러 실행과 비교할 수 있음
팀에선 다른 사용자의 결과와 비교하며 협업할 수 있음
주요 함수
log_metric (or log_metrics)
- 모델의 평가지표를 logging
- 평가지표에는 accuracy, f1-score, precision, recall 등이 사용됨
log_param (or log_params)
- 모델에서 사용되는 파라미터 값을 저장
- log_param은 하나하나 저장할 때 사용하며, json 형태로 한 번에 저장하고 싶다면 log params 사용
log_model
- 모델 파일(.pth)을 저장
2. Projects
3. Model + Registry
<aside> ❔ 사용 방법
pip install mlflow
1. 전역 URI 설정
""" mlflow URI """
mlflow.set_tracking_uri("<http://mlflow:5000>")
tracking_uri = mlflow.get_tracking_uri()
2. experiment 생성 및 세팅
""" make experiment """
def make_experiments(exp_name):
experiment_id = mlflow.create_experiment(exp_name)
experiment = mlflow.get_experiment(experiment_id)
print("Name: {}".format(experiment.name))
print("Experiment_id: {}".format(experiment.experiment_id))
print("Artifact Location: {}".format(experiment.artifact_location))
print("Tags: {}".format(experiment.tags))
print("Lifecycle_stage: {}".format(experiment.lifecycle_stage))
return experiment_id
""" set experiment by name """
def mlflow_setting(experiment_name):
try:
exp_id = mlflow.get_experiment_by_name(experiment_name)
if exp_id==None:
exp_id=make_experiments(experiment_name)
mlflow.set_experiment(experiment_name)
except Exception as e:
print(e)
3. 하이퍼파라미터 세팅
""" logging to mlflow """
for k, v in dict(args._get_kwargs()).items():
mlflow.**log_param**(k, v)
4. 모델 학습과 함께 mlflow 실행
""" mlflow setting """
mlflow_setting('model_{}-ep'.format(opt.exp_name))
with mlflow.start_run() as run:
train(args) # 메인함수
cd mlruns
원격으로 사용 시, 해당 IP로 접속하여 확인 (기본 포트번호 : 5000)
mlflow ui --host 0.0.0.0
</aside>