Pour ce TP, utilisez la branch suivante :
git checkout 5_starting_artifacts
Pour l'instant, les modèles sont sauvegardés par la fonction train_model.
Ils possèdent le même nom de fichier, ce qui signifie que chaque entraînement produit un modèle, mais que le modèle ainsi produit écrase le précédent 😕.
Ceci est problématique pour des raisons
Un moyen de distinguer un modèle d'un autre à chaque entraînement est d'intégrer un identifiant unique à son nom.
Un moyen simple d'y parvenir est d'utiliser un horodatage.
L'objectif de ce TP est de modifier le nom du modèle généré en intégrant un timestamp au format YYYYMMDD-HHMMSS ('%Y%m%d-%H%M%S').
Exécuter plusieurs entraînements devrait produire plusieurs modèles identifiables comme ceci dans votre model registry :

Pour logger le résultat des expérimentations dans MLflow tracking il faut ajouter un peu de code sur le code d'entraînement.
import mlflow
...
with mlflow.start_run() as run:
mlflow.sklearn.autolog()
model = ...
model.fit(X, y)
Une fois que vous avez intégré ce code, vous pouvez retourner dans l'interface Airflow et déclencher un entraînement.
`Depuis l'interface de Jupyterhub, vous pouvez cliquer sur l'icône MLflow pour lancer MLflow qui va s'ouvrir dans un nouvel onglet.

Dans l'onglet Model training nous allons retrouver l'expérimentation par défaut dans laquelle nous avons loggé notre expérience.
Actualiser la page de MLflow pour voir les runs apparaître

Vous pouvez voir l'ensemble des paramètres et métriques stockées.
Ensuite en cliquant sur le run, vous pouvez aller voir plus de détails.

En fait MLflow est basé sur un système de dossier / fichiers plats qui contiennent tout ce que l'on vient de voir.
En plus de cela, MLflow se sert d'une base de donnée locale pour stocker les métadonnées liées aux runs
Vous pouvez parcourir les métadonnées en explorant le fichier mlflow.db à la racine
sqlite3 mlflow.db
Listez les tables avec commande
.tables
ou faire une requête SQL qui liste toutes vos expérimentations
SELECT * FROM experiments;
ou encore, lister toutes vos métriques
SELECT * FROM metrics;
Modifier le code d'entrainement pour sauvegarder le modèle dans MLflow registry :
mlflow.sklearn.log_model(
sk_model=model,
name="A nice name for your model",
input_example=X_train,
registered_model_name="A nice name for your registered model",
)
Lancez l'entraînement puis retrouver le modèle dans l'onglet Models vous pourrez retrouver le modèle créé :

Explorez les objets disponibles dans cette vue.
Parcourez le dossier /home/jovyan/mlruns/0 pour voir vos artefacts organisés par run
Les instructions du tp suivant sont ici