Pour ce TP, utilisez la branche suivante :
git checkout 11_start_shadow_production
Modifier le code d'entraînement pour produire un autre type de modèle : exemple un modèle XGBoost
Dans le code qui log le model, modifier le nom de l'artefact pour qu'il soit identifié différement dans mlflow
Dans notre cas, il n'y a pas vraiment de déploiement, mais un redémarrage des services airflow, arrêtez les avec la commande ctrl + c puis redémarrez les.
Au sein de l'interface Airflow : déclencher un entraînement
Modifier le dag d'inférence en ajouter une étape de shadow production
@task
def shadow_production_with_io_task(feature_path: str) -> None:
shadow_predict_with_io(features_path=feature_path,
model_path=...,
)
Et créer la méthode shadow_predict_with_io qui se charge de faire la prédiction avec le shadow model et envoi la métrique de monitoring à grafana.
def shadow_predict_with_io(features_path,
model_path,
):
features = ...(features_path)
# Load model
model = ...
# Predict with shadow model
predictions = model.predict(features)
# Compute metrics
metrics_df = monitor(predictions)
# Send metrics to postgresql
engine = create_engine(db_con_str)
db_conn = engine.connect()
monitoring_df.to_sql(shadow_monitoring_table_name, con=db_conn, if_exists='append', index=False)
db_conn.close()
Au sein de grafana, adapter votre dashboard pour visualiser cette nouvelle métrique et déclencher des prédictions pour visualiser quelque chose.
La shadow production est un bon moyen pour comparer les modèles avant de les mettre vraiment en production.
Pour aller plus loin, explorer les tags MLflow des modèles et l'abstraction qu'il faudrait mettre en place dans notre code pour pouvoir gérer la mise en shadow production / la mise en production de nos modèles sans devoir changer la config du code.