이전 포스트에서 이야기한 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를 생성할 수 있다.
'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 |