À l'issue de cette section, vous aurez découvert

Présentation des nouveautés sur la branche de ce TP

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 :

model_folder.png

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.

mlflow_ui.png

Dans l'onglet Model training nous allons retrouver l'expérimentation par défaut dans laquelle nous avons loggé notre expérience.

Explorer le run créé dans MLflow

Actualiser la page de MLflow pour voir les runs apparaître

mlflow_runs.png

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.

metrics_mlflow.png

Explorer le système de dossier de MLflow

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;

Sauvegarder le modèle dans MLflow registry

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éé :

mlflow_models.png

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