MLflow 플랫폼은 크게 MLflow Tracking, MLflow Projects, MLflow Models, MLflow Model Registry의 컴포넌트로 구성된다.
이 글에서는 그 중 MLflow Tracking 기능에 대해서 정리한다. MLflow Tracking의 기본적인 기능은 아래와 같다.
- 기계 학습 코드를 실행할 때 파라미터, 코드 버전, 메트릭 및 결과 파일을 기록
- 나중에 결과를 시각화하기 위한 API 및 UI를 제공한다
MLflow Tracking의 컨셉
MLflow Tracking은 `runs(실행)` 의 개념을 사용한다. 각 실행은 아래와 같은 정보를 기록한다.
- Code Version
- 실행에 사용된 Git commit hash 값. (MLflow Project에 의해 실행 시 기록)
- Start & End Time
- 실행 시작과 종료 시간
- Source
- 실행을 시작할 파일의 이름 또는 MLflow 프로젝트에서 실행할 경우 실행에 대한 프로젝트 이름 및 진입점
- Parameters
- 코드의 입력으로 선택한 Key-value 입력 파라미터
- Key, Value 모두 문자열값
- Metrics
- 키 값(숫자) 메트릭으로 각 메트릭(loss, accuracy와 같은 값)은 실행 과정에서 업데이트 될 수 있음
(예: 모델의 손실 함수가 수렴되는 방식을 추적하기 위해) - MLflow는 메트릭의 전체 기록을 기록하고 시각화 기능 지원.
- 키 값(숫자) 메트릭으로 각 메트릭(loss, accuracy와 같은 값)은 실행 과정에서 업데이트 될 수 있음
- Artifacts
- 데이터, 모델들을 포함한 파일 형태
- 이미지(예: PNG), 모델(예: 피클링된 스크킷 학습 모델) 및 데이터 파일(예: Parquet 파일)을 아티팩트로 기록 가능
- Tags and Notes
- 추가적인 정보를 기입할 수 있는 용도
- 각 실험에 대한 추가적인 정보나 태그를 추가하는 방식으로 사용
내맘대로 Quick Start
코드를 이용하여 빠르게 기본적인 기능부터 빠르게 살펴보자. 예제코드는 아래와 같다. 예제 코드는 mlflow 프로젝트에서 제공하는 sklearn_elasticnet_wine(https://github.com/mlflow/mlflow/tree/master/examples/sklearn_elasticnet_wine) 을 이용하였다.
if __name__ == "__main__":
mlflow.set_tracking_uri("http://127.0.0.1:5000")
data = pd.read_csv(csv_file, sep=";")
...
alpha = float(sys.argv[1]) if len(sys.argv) > 1 else 0.5
l1_ratio = float(sys.argv[2]) if len(sys.argv) > 2 else 0.5
with mlflow.start_run():
lr = ElasticNet(alpha=alpha, l1_ratio=l1_ratio, random_state=42)
lr.fit(train_x, train_y)
predicted_qualities = lr.predict(test_x)
(rmse, mae, r2) = eval_metrics(test_y, predicted_qualities)
mlflow.log_param("alpha", alpha)
mlflow.log_param("l1_ratio", l1_ratio)
mlflow.log_metric("rmse", rmse)
mlflow.log_metric("r2", r2)
mlflow.log_metric("mae", mae)
tracking_url_type_store = urlparse(mlflow.get_tracking_uri()).scheme
# Model registry does not work with file store
if tracking_url_type_store != "file":
mlflow.sklearn.log_model(lr, "model", registered_model_name="ElasticnetWineModel")
else:
mlflow.sklearn.log_model(lr, "model")
Tracking을 저장할 주소 지정
우리는 지금 Tracking 정보를 로컬 환경에서 관리하도록 한다. 그러기 위해서 mlflow ui 를 실행했을 때, 사용되는 URI를 입력한다.
mlflow.set_tracking_uri("http://127.0.0.1:5000")
Tracking 시작
mlflow의 API 중 start_run()을 이용하여 mlflow tracking을 시작한다. start_run()은 메트릭과 매개 변수가 기록될 실행으로 설정하여 새 MLflow 실행을 시작한다.
해당 함수의 반환 값은 블록이 있는 스코프에서 컨텍스트 관리자로 사용할 수 있으며, 그렇지 않다면 end_run()을 호출하여 현재 실행을 종료해야 한다.
MLflow는 MLflow 시스템 태그에 정의된 대로 실행 시 다양한 기본 태그를 설정합니다.
with mlflow.start_run():
Parameter & Metric Tracking 하기
mlflow.log_param("alpha", alpha)
mlflow.log_param("l1_ratio", l1_ratio)
mlflow.log_metric("rmse", rmse)
mlflow.log_metric("r2", r2)
mlflow.log_metric("mae", mae)
이렇게 Tracking한 결과는 mlflow ui를 통해 확인이 가능하다. 아래 UI에서 실험에 사용한 Paramter와 Metric 정보를 확인할 수 있다.
Tracking UI 구성 정리
Tracking한 결과의 전체적인 화면은 아래와 같다. Run ID, Date, Git Commit, User, Status 외에도 Description, Parameters, Metrics, Tags, Artifacts 등의 정보를 확인할 수 있다.
- Run ID : 실행한 실험의 고유 ID
- Git Commit : Tracking에 사용한 Git Commit정보
- Description : 실험에 대한 실험자가 작성하는 정보
- Parameters : 실험에 사용한 모델 파라미터 정보
- Metrics : 실험 시 얻은 Accuracy, Loss 등의 정보
- Tags : 태그 정보
- Artifacts : 실험에 사용한 파일, 코드 등의 모음
이 외에도 실험마다 변화하는 Parameters와 Metrics 같은 정보로 Plot 형태로 보여주기도 한다. 다양한 기능들이 있으므로 하나씩 직접 살펴보는걸 추천한다.
Tracking 환경 구조 / 구성
이렇게 로컬 환경 외에도 MLflow Tracking은 외부의 다양한 저장소 또는 클라우드 서비스(AWS, Azure 등)를 사용하여 구성할 수 있다.
해당 정보는 아래 페이지를 참고하길 바라며, 추후 시간이 된다면 각 구조에 대해 정리 및 실습방법을 작성하려 한다.
https://mlflow.org/docs/latest/tracking.html#how-runs-and-artifacts-are-recorded
참고
'AI > MLOps' 카테고리의 다른 글
[MLflow] MLflow Project와 Model의 차이 (0) | 2023.05.21 |
---|---|
[MLflow] #5. MLflow Model Registry (0) | 2023.04.07 |
[MLflow] #4. MLflow Projects 정리하기 (0) | 2023.04.05 |
[MLflow] #3. MLflow Model 정리하기 (0) | 2023.04.01 |
[MLflow] #1. MLflow 개요 정리 (0) | 2023.03.30 |