이번에는 MLflow의 실험(experiments)과 실행(runs)에 대해 알아본다.
사전 준비
다음이 사전에 준비 되어 있어야 한다.
# 파이썬 버전 확인
$ python --version
Python 3.8.7
# mlflow 설치 & 버전 확인
$ pip install mlflow
$ mlflow --version
mlflow, version 1.16.0
# 예제 파일을 위한 mlflow repo clone
$ git clone https://github.com/mlflow/mlflow.git
$ cd mlflow/examples
Experiments & Runs
개념
MLflow에는 크게 실험(Experiment)와 실행(Run)이라는 개념이 있다. 실험은 하나의 주제를 가지는 일종의 '프로젝트'라고 보면 된다. 실행은 이 실험 속에서 진행되는 '시행'이라고 볼 수 있다. 하나의 실험은 여러 개의 실행을 가질 수 있다.
직접 눈으로 보며 이해해보자.examples
에 있는 sklearn_elasticnet_wine
MLflow 프로젝트를 실행해본다.
$ mlflow run sklearn_elasticnet_wine --no-conda
실행 결과로 ./mlruns
경로에 다음과 같은 파일들이 생긴다.
여기서 0
은 실험 ID이고, a853debd39fb4de4a61ce3aa6d247c8a
은 실행 ID다.
한번 더 동일한 프로젝트를 실행해보자. 이번에는 파라미터 값을 추가로 넘겨줘본다.
$ mlflow run sklearn_elasticnet_wine -P alpha=0.5 --no-conda
실행 결과로 mlruns
경로를 확인해보면 다음과 같다.
0
이라는 실행에 69c2f00c31044d339344f91ea03ed1f0
이라는 실행이 추가로 생성되었다.
이렇듯 매 실행은 하나의 실험에 속하여 들어간다. 위의 예시가 매우 직관적이라 실험과 실행의 관계와 활용 방안을 바로 알 수 있을 것이다.
Experiment 생성 및 조회
위에서 별도의 실험을 생성하지 않았기 때문에 ID가 0
인 실험을 자동으로 생성하고 이 실험에서 실행을 생성하였다.
이번에는 직접 실험을 생성해보자.
실험 생성 은 다음 CLI 명령어로 가능하다.
$ mlflow experiments create -n "실험 이름"
그리고 실험 목록은 다음 CLI 명령어로 가능하다.
$ mlflow experiments list
그 외 mlflow experiments
관련된 명령어는 다음의 것들이 있으니 참고하자.
CLI가 아닌 코드에서 experiments 및 run을 다루는 방법
다음처럼
mlflow.tracking.MlflowClient
를 사용하면 된다.from mlflow.tracking import MlflowClient # Create an experiment with a name that is unique and case sensitive. client = MlflowClient() experiment_id = client.create_experiment("Social NLP Experiments") client.set_experiment_tag(experiment_id, "nlp.framework", "Spark NLP") # Fetch experiment metadata information experiment = client.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))
자세한 내용은 공식 docs를 참고하자.
Run 생성 및 조회
위에서 실험을 생성했으므로 이번에는 실행을 생성해보자.
먼저 mlruns
내부를 확인해본다.
위에서 새로 만든 1
, 2
실험에는 아직 아무런 실행이 없다.
다음 명령어로 실행을 생성한다.
$ mlflow run sklearn_elasticnet_wine -P alpha=0.5 --no-conda --experiment-id 2
끝에 --experiment-id
를 붙여주었다.
다음처럼 실험 이름으로 할 수도 있다.
$ mlflow run sklearn_elasticnet_wine -P alpha=0.25 --no-conda --experiment-name "experiments-2"
잘 실행된걸 확인했으므로, 이제 결과가 잘 나왔는지 ./mlruns
경로에서 확인하자.
2
번 실험에 위에서 생성한 실행들이 잘 생성된 것을 볼 수 있다.
다음처럼 환경 변수로 실험 ID를 잡아줄 수도 있다.
$ export MLFLOW_EXPERIMENT_ID = 2
정리
- MLflow 에는 실험(Experiments)과 실행(Runs)이란 개념이 있다.
- 하나의 ML 프로젝트는 하나의 실험으로 구성할 수 있다.
- 하나의 실험은 여러 개의 실행으로 구성된다.
- 각 실험마다 ML 모델의 하이퍼 파라미터 조정 등을 다르게 하여 수행할 수 있다.
- CLI 혹은 코드에서 실험과 실행의 생성, 조회, 삭제 등의 명령을 할 수 있다.
'더 나은 엔지니어가 되기 위해 > 라이브러리 리뷰' 카테고리의 다른 글
MLflow - Model Registry (1) | 2021.05.05 |
---|---|
MLflow - Tracking Server (1) | 2021.05.05 |
MLflow - Automatic logging (0) | 2021.05.01 |
MLflow - Quick Review (0) | 2021.04.24 |
BentoML - Quick Review (0) | 2021.04.19 |