tl;dr
import pandas as pd
import mlflow
def get_metric_history(run_id, metric):
client = mlflow.tracking.MlflowClient()
history = client.get_metric_history(run_id, metric)
history = [dict(key=m.key, value=m.value, timestamp=m.timestamp, step=m.step) for m in history]
history = pd.DataFrame(history).sort_values("step")
history.timestamp = pd.to_datetime(history.timestamp, unit="ms")
return history
train_loss = get_metric_history(run_id, "train_loss")
valid_loss = get_metric_history(run_id, "valid_loss")
history = pd.concat((train_loss, valid_loss))
history.pivot(index="step", columns="key", values="value").plot()
How to Si vous souhaitez interagir avec le serveur via MLFlow, utilisez mlflow.tracking.MlflowClient.
Vous pouvez utiliser MlflowClient.get_metric_history (run_id, key)
pour obtenir tout l'historique des métriques d'une clé lors d'une exécution.
Voici une fonction qui l'utilise pour obtenir l'historique de la métrique sous la forme pandas.DataFrame
.
Il est facile de gérer l'horodatage lorsqu'il est converti en datetime.
def get_metric_history(run_id, metric):
client = mlflow.tracking.MlflowClient()
history = client.get_metric_history(run_id, metric)
history = [dict(key=m.key, value=m.value, timestamp=m.timestamp, step=m.step) for m in history]
history = pd.DataFrame(history).sort_values("step")
history.timestamp = pd.to_datetime(history.timestamp, unit="ms")
return history
train_loss = get_metric_history(run_id, "train_loss")
En remarque, si vous souhaitez comparer plusieurs métriques et tracés, vous pouvez facilement le faire en combinant les Dataframes verticalement comme indiqué ci-dessous et en utilisant le pivot.
train_loss = get_metric_history(run_id, "train_loss")
valid_loss = get_metric_history(run_id, "valid_loss")
history = pd.concat((train_loss, valid_loss))
history.pivot(index="step", columns="key", values="value").plot()
Recommended Posts