본문 바로가기

AI/MLflow

[MLflow] MLflow Tracking

728x90
반응형

 

이전 포스트에서 이야기한 MLflow의 기능 중 MLflow Tracking에 대해 알아보자.

MLflow Tracking은 ML 학습할 때 생기는 각종 Parameters, metric 등을 logging하고 Web UI로 확인할 수 있다.

logging 할 수 있는 것들에는 어떤 것이 있는지 알아보자.

 

mlflow.create_experiment("실험 이름","description") - 실험 생성 또는 가져오기

mlflow.log_artifacts("모델 파일 경로") - 모델 아티팩트(모델 파일, 데이터셋, 로그 파일 등의 실험 결과물)를 관리하는 기능

mlflow.log_metrics("지표",값) - 지표값을 기록하는 기능, 사전으로 여러개 입력 가능 {지표:값,지표:값}

mlfow.params("파라미터",값) - 하이퍼파라미터 값을 기록하는 예시 코드, 사전으로 여러개 입력 가능 {"파라미터":값, "파라미터":값}

mlflow.log_artifact("데이터셋경로") - 데이터셋 파일을 아티팩트로 기록

mlflow.set_tag("태그명","값") - 실행에 태그 설정

 

mlflow.start_run() - mlflow를 시작하는 코드, 해당 실행의 context는 with와 함께 사용되면 블럭이 끝나면 자동으로 종료, context안에 tracking하는 코드를 작성할 수 있다.

# from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
import mlflow
from mlflow import keras as ml_keras
import tensorflow as tf
import pandas as pd
import numpy as np
from mlflow.tensorflow import MLflowCallback

def tf_model(train_x, train_y, val_x, val_y, run,epoch=100, batch_size=8):
    inp_layer = tf.keras.Input(shape=(train_x.shape[1],))
    d1 = tf.keras.layers.Dense(16, activation='relu')(inp_layer)
    d2 = tf.keras.layers.Dense(8, activation='relu')(d1)
    out = tf.keras.layers.Dense(3, activation='softmax')(d2)

    model = tf.keras.Model(inputs=inp_layer, outputs=out,
                           name="Iris_Classifier_Model")
    model.compile(optimizer='adam',
                  loss='categorical_crossentropy', metrics=['acc'])
    history = model.fit(train_x, train_y, epochs=epoch, batch_size=batch_size,callbacks=[MLflowCallback(run)])
    history = pd.DataFrame(history.history)
    metrics = {
        'score': {
            'model_score': np.float64(round(model.evaluate(val_x, val_y)[1], 2))
        },
        'params': {'epochs': epoch, 'batch_size': batch_size}
    }
    return model, history,metrics
if __name__ == "__main__":
    # data
    # X, y = datasets.load_iris(return_X_y=True, as_frame=True)
    # dataset = pd.concat([X, pd.get_dummies(y).astype('int')], axis=1)
    # dataset.to_csv("./dataset.csv", index=False)
    dataset = pd.read_csv("/content/dataset.csv")
    X = dataset.iloc[:, 0:-3]
    y = dataset.iloc[:, -3:]

    train_x, val_x, train_y, val_y = train_test_split(
        X, y, test_size=0.2, random_state=42)
    scaler = StandardScaler()

    sxtrain = scaler.fit_transform(train_x)
    sxval = scaler.transform(val_x)
    # 모델을 아티팩트로 기록
    # mlflow.create_experiment("Iris Classifier")
    mlflow.set_experiment("Iris Classifier")
    with mlflow.start_run() as run:
        model, history,metrics = tf_model(
            sxtrain, train_y, sxval,  val_y,epoch=100,run=run)

        # 지표 기록
        mlflow.log_metrics(metrics['score'])
            
        # 파라미터 기록
        mlflow.log_params(metrics['params'])
        # mlflow.artifacts("./model")
        ml_keras.log_model(model, "Iris_Classifier_DNN",input_example=sxval)
        # tag
        tags = {
            "Iris_DNN": "0.0.1",
            "Type": "Classifier",
            "Algorithm": "Keras, Dense"
        }
        mlflow.set_tags(tags)
    mlflow.end_run()

 

aftifacts를 확인할 수 있는데, 이곳에는 prediction을 만들 수 있는 방법에 대한 설명과 MLmodel에 대한 내용 등이 있다.

MLmodel과 conda.yaml을 활용해 MLflow Projects를 생성할 수 있다.

728x90
반응형

'AI > MLflow' 카테고리의 다른 글

[MLflow] Autologging  (0) 2024.02.28
[MLflow] MLflow Model Registry  (0) 2024.02.28
[MLflow] MLflow Models  (0) 2024.02.28
[MLflow] MLflow Project  (0) 2024.02.27
[MLflow] 개요  (0) 2024.02.27