AI/MLOps

[MLflow] #2. Tracking 기능 사용해보기

Linuxias 2023. 3. 30. 16:16
반응형

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는 메트릭의 전체 기록을 기록하고 시각화 기능 지원.
  • 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

 

MLflow Tracking — MLflow 2.2.2 documentation

The MLflow Tracking component is an API and UI for logging parameters, code versions, metrics, and output files when running your machine learning code and for later visualizing the results. MLflow Tracking lets you log and query experiments using Python,

mlflow.org

 

참고

- https://github.com/mlflow/mlflow

- https://mlflow.org/docs/latest/index.html#

반응형