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