Du notebook à la production,
le projet MLOps - DPE

Que vous soyez data analyst, data scientists ou développeurs, le projet MLOps-DPE vous permet de vous lancer en MLOps par la pratique. Au fil des chapitres, vous transformerez un simple notebook Jupyter de modélisation en véritable pipeline de production grâce à Docker, Airflow, MLflow, FastAPI et des techniques de CI/CD tout en améliorant la qualité de votre code python.

Si vous vous débrouillez déjà avec scikit-learn et que vous souhaitez monter en puissance sur les technos cloud et MLOps, alors le projet MLOps-DPE est fait pour vous.

Pourquoi le MLOps ?

En tant que data scientist vous travaillez sur des notebooks Jupyter pour réaliser l’exploration des données, leur nettoyage et transformation, mais aussi l’entraînement des modèles et leur optimisation. Vos données sont statiques, le plus souvent un fichier csv. Vous êtes le seul à vraiment comprendre votre code et le modifier.

Le Jupyter notebook c’est pratique, mais ça reste un chouïa artisanal.

En production, les données arrivent en continu, les modèles sont régulièrement ré-entraînés et l’infrastructure est optimisée tant au point de vue des coûts que de la rapidité d’exécution. Il y règne un sentiment d’efficacité, de pérennité et de contrôle.

Entre ces deux approches du machine learning, il y a un gouffre, voir un abîme.

Illustration pont reliant le notebook at MLOps par dessus un gouffre avec des monstres les monstres sont : la difficulté a apprendre

Dans ce projet, vous allez apprendre à franchir ce gouffre grâce au MLOps. Le MLOps est l’ensemble des pratiques, méthodes et outils pour déployer et maintenir des modèles prédictifs de manière fiable et efficace. C’est un domaine très large en constante évolution avec une multitude d’outils, de plateformes et de pratiques.

MLOps = ML + Ops = Machine Learning + Mise en production

MLOps = ML + Ops = Machine Learning + Mise en production.

Le MLOps permet d’automatiser, de contrôler et d’optimiser toutes les étapes de mise en production de collections de modèles prédictifs.

Le MLOps couvre la gestion des datasets, les modèles, leurs entraînements et leur sélection, mais aussi le code sous-jacent et les infrastructures nécessaires tout au long du cycle du modèle et des données. Ce n’est pas rien!


A qui s'adresse ce projet ?

Le projet MLOps-DPE s’adresse aux data analyst, data scientists et développeurs intéressés par la mise en production de modèles prédictifs. Que vous soyez débutant ou confirmé, informaticiens ou data “quelque chose”, ce projet pratique vous donnera des bases pour améliorer votre code et mettre vos modèles en production de façon fiable et contrôlée.

En pratique

Dans tout ce qui touche à l’informatique, on n’apprend vraiment qu’en pratiquant. Le Learning by Doing est la version 21è siècle du dicton c’est en forgeant qu’on devient forgeron. Cette approche, ancrée dans le concret, est au cœur des projets SkatAI.

Ce cours est conçu pour qu'à chaque étape, vous puissiez expérimenter et pratiquer les techniques abordées.

Ressources

  • Github
    Le code est disponible sur le github https://github.com/SkatAI/cours-mlops-ademe. A chaque chapitre, correspond une branche

  • Communauté Discord
    Le discord SkatAI est ouvert si vous souhaitez poser des questions ou si vous bloquez sur quelque chose. Rejoignez-le dès maintenant. Vous y trouverez de l’aide.

Qu'allez vous apprendre ?

Vous apprendrez non seulement à mettre en place les outils / plateformes standard du domaine (Airflow, MLflow, FastAPI) mais aussi les bonnes pratiques de développement en python pour créer un pipeline data fiable.

A la fin du projet vous serez capable

  • de produire un code professionnel : créer un repository structuré avec un code optimisé destiné à faciliter le travail en équipe.
  • de créer des github workflows automatisés pour build et déployer votre code à chaque nouveau commit => CI/CD
  • de travailler directement sur le cloud créer une instance de machine virtuelle sur Azure pour y faire tourner vos outils et votre code
  • de contrôler et reproduire vos expériences en traquant les datasets, les modèles et leurs paramètres avec MLflow
  • d’automatiser les étapes d’un pipeline de mise en production d’un modèle de machine learning avec Airflow
  • de customiser vos conteneurs Docker et combiner de multiples services avec docker-compose
  • de mettre à jour automatiquement les modèles dont la performance décroît grâce à MLflow registry.
  • de créer une API pour servir les prédictions des modèles avec FastAPI
  • de créer une application web avec Streamlit qui utilise votre modèle en production pour obtenir des prédictions.

Les objectifs du projet

Nous procéderons pas à pas pour transformer un notebook Jupyter classique (feature engineering et entraînement du modèle avec scikit-learn) pour arriver à un pipeline 100% automatisé et sur le cloud.

Ce pipeline aura pour tâche

  • d’acquérir les données via l’API ADEME et de les transformer (feature engineering)
  • d’entraîner régulièrement de nouveaux modèles de prédiction en fonction des nouveaux échantillons acquis via l’API
  • de déployer en production le meilleur modèle

Plus précisément, nous nous concentrons sur les concepts et outils open source suivants :

  • Qualité du code avec Black et Pylint
  • Reproductibilité avec MLflow
  • Automatisation avec Airflow
  • CI/CD avec github workflows
  • Stockage des données dans une base PostgreSQL
  • Mise en production avec FastAPI
  • Containerisation avec Docker et docker-compose

Vous travaillez dans le cloud, principalement sur des instances Azure. Le projet n’utilise que 3 services : machine virtuelle, stockage et base de données postgresql. Ces services sont communs aux 3 principales plateformes cloud : Azure, Google Cloud et Amazon AWS.

J'ai choisi Azure plutôt que GCP ou AWS car Azure semble être la plateforme la plus répandue en France pour les étudiants qui bénéficient souvent de crédits d'utilisation via leurs écoles et universités. La prise en main d'Azure est assez rapide.

Les étapes du projet

Les étapes du projet sont les suivantes :

I) Du local au cloud
  1. Qualité du code On passe d’un notebook Jupyter à un code structuré sur github. Le code est propre, bien formaté, de bonne qualité et bien organisé. Un autre développeur peut cloner votre github repo, comprendre votre approche et la reproduire.
    #Black #Pylint #Pydantic #Makefile #Build

  2. Du local au cloud: Windows, Mac ou Linux. A ce stade nous quittons votre machine et partons dans le cloud en créant une instance virtuelle linux. Que vous travailliez sur Windows ou sur Mac, vous ne serez plus tributaire de la puissance de votre laptop. Vous apprenez à exécuter votre code sur une instance virtuelle + connexion sur github
    #Azure #SSH #SCP #Github

  3. Build et déploiement automatisé. Nous revenons en local avec un chapitre dédié au CI/CD avec github workflows. Plutôt que de déployer manuellement votre code sur l’instance a chaque modification, nous allons créer une séquence de validation et de déploiement de votre code. Vous poussez votre code sur github, il est automatiquement validé et déployé sur l’instance. Gain en temps et surtout en fiabilité.
    #GithubWorkflows #Deploy

II) API et base de données PostgresQL
  1. Collecter les données via l’API et les stocker. Jusqu’à maintenant nous avons travaillé sur un dataset statique de plusieurs milliers d’échantillons. Cependant l’ADEME met à disposition via son API un dataset beaucoup plus volumineux. Mais l’utilisation de cette API est limitée en volume et en fréquence. Le script d’interrogation est simple et permet d’accumuler les échantillons. Il faut stocker ces échantillons. Nous allons créer une base de données PostgreSQL simple sur le cloud pour leur stockage.
    #API #Postgres #Secrets
III) Automatisation avec Airflow
  1. Automatiser la collecte de données : A ce stade, nous savons récupérer les données et les stocker. Mais exécuter des scripts régulièrement est fastidieux. Heureusement, il y a des outils d’automatisation comme Airflow. Airflow est une plateforme open source d’automatisation des scripts. A la fin de ce chapitre, vous verrez les données de l’ADEME peupler votre Bdd.
    #Cron #Airflow #DAG #Naming

  2. Transformer les données : Les modèles de ML classiques de type Random Forest ne fonctionnent que sur des données numériques. Dans cette étape, nous transformons les données brutes pour les numériser. C’est la phase de feature engineering. Un nouveau DAG Airflow stocke les données transformées dans une nouvelle table PostgreSQL.
    #Airflow #Pydantic

IV) Suivi des expériences avec MLflow
  1. Contrôle des expériences : Traquer les modèles avec MLFlow. L’élaboration d’un modèle requiert beaucoup de vas et viens, de tuning, de paramétrisation et de transformation des données. Très vite, il devient impossible de reproduire un résultat, une expérience passée. MLFlow est la plateforme standard de traçage des modèles, datasets et de leurs paramètres. A l’issue de ce chapitre votre tableau de bord MLFlow vous permet de retrouver, reproduire et comparer tous vos modèles.
    #MLflow #Cheatsheet

  2. Servir les modèles : ajouter MLflow et servir les modèles. Nous veillerons à limiter les coûts. Tracer les modèles, c’est bien les utiliser pour des prédictions, c’est mieux.
    #MLflowRegistry

V) Assembler les conteneurs
  1. Regrouper les services. Nous avons installé Airflow en utilisant Docker compose et MLflow avec Docker. Il serait bon de ne pas avoir à séparer les 2 ce qui est possible en modifiant le docker-compose. Dans ce chapitre, nous combinons Airflow, MLflow et PostgreSQL dans un unique docker-compose.
    #docker-compose #dockerfile
VI) Pallier le drift de performance
  1. Mettre le meilleur modèle en production. Retournons à nos modèles. Nous avons vu comment servir un modèle avec MLflow. Une solution plus sereine pour créer des endpoints est FastAPI. Dans ce chapitre, nous traitons de la sélection du meilleur modèle et de sa mise en production avec un 3e DAG.
    #MLFlow #DAG
VII) Mettre en production
  1. Servir le modèle de production : via une API en utilisant FastAPI
    #FastAPI, #StartupScript

  2. Interroger le modèle via une application : Créons enfin une application Streamlit où l’utilisateur renseigne des infos sur sa consommation d’énergie et l’appli retourne une prévision d’étiquette GPE
    #Streamlit


Les prérequis

Ce cours touche à beaucoup de notions et d’outils, mais ne nécessite pas un niveau élevé en code ou en data. Les connaissances minimum pour suivre le cours sont les suivantes :

  • python, le code reste simple, nous utilisons pandas et pydantic pour gérer les données et construisons quelques classes sans forcer sur l’orienté objet

  • Git, des notions de base suffisent puisque vous serez le ou la seul(e) à travailler sur le code.

  • ligne de commande (CLI), un accès au terminal de votre ordinateur pour exécuter les lignes de commandes. Pour Windows, le mieux est de travailler sur WSL. Cet article vous explique comment installer et accéder à WSL sous Windows 10. Pour Mac, nous utiliserons iterm2.

  • SQL, les bases de la création de tables sous PostgreSQL et d’écriture de requêtes simples. Vous vous connectez à la base en ligne de commande avec psql.

  • Être familier avec le machine learning classique et les opérations de bases en traitement des données (feature engineering). Le projet n’est pas focalisé sur l’optimisation des modèles de machine learning. Nous travaillons avec un simple random forest classifier de scikit-learn. Libre à vous d’utiliser une autre famille de modèles.

Au point de vue services, il vous faut

  • un compte github
  • un compte Cloud : de préférence Azure. Nous travaillons avec Azure, mais les principes sont les mêmes que sur les autres fournisseurs cloud que sont GCP et AWS.

Du point de vue ordinateur, comme nous travaillons principalement en ligne sur le cloud, l’important est de pouvoir accéder à un terminal. La puissance de votre ordinateur ou son OS (Mac, Windows, …) importe peu.

Au point de vue budget, en créant un nouveau compte sur une des plateformes cloud, vous devriez bénéficier de crédits valides pendant plusieurs semaines. Ce qui devrait être amplement suffisant pour mener à bien ce projet. Surtout si vous veillez à bien fermer les ressources et services lorsque vous ne les utilisez plus. Un point important que je ne manquerai pas de vous rappeler régulièrement.

C'est parti !

  • Rejoignez le discord sur https://discord.gg/Q8xccJMgZM et dites bonjour

  • Clonez la repo github du cours.

    • git clone https://github.com/SkatAI/cours-mlops-ademe

Je vous conseille de ne pas sauter sur la solution dès le début du chapitre, mais plutôt d’essayer de construire le système pas à pas.

Dans un pipeline prédictif de MLOps comme dans tout projet machine learning, data science, data analytics, … le plus important reste et restera toujours la donnée.

Nous allons par conséquent commencer par explorer le jeu de données ADEME DPE tertiaire dans le premier chapitre du projet MLOps-DPE