Un projet pédagogique pour découvrir les fondamentaux du MLOps (Machine Learning Operations) à travers l'utilisation d'Apache Airflow, MLflow et Docker.
- Présentation
- Prérequis
- Architecture
- Installation
- Utilisation
- Structure du projet
- DAGs Airflow
- Notebooks
- Ressources pédagogiques
- Licence
Ce projet est conçu comme support de cours pour apprendre les concepts clés du MLOps :
- Orchestration de workflows ML avec Apache Airflow
- Tracking d'expériences avec MLflow
- Containerisation avec Docker
- Versioning de code avec Git
- Pipelines ETL (Extract, Transform, Load)
- Entraînement et validation de modèles
- Docker (version 20.10+) et Docker Compose (version 2.0+)
- Git (version 2.0+)
- Un navigateur web moderne
Le projet utilise une architecture multi-conteneurs orchestrée par Docker Compose :
| Service | Description | Port |
|---|---|---|
| airflow-webserver | Interface web Airflow | 8080 |
| airflow-scheduler | Orchestrateur de tâches | - |
| airflow-worker | Exécuteur de tâches (Celery) | - |
| airflow-triggerer | Gestion des triggers asynchrones | - |
| postgres | Base de données (métadonnées Airflow) | - |
| redis | Broker de messages (Celery) | - |
| jupyter-notebook | Environnement de notebooks | 8889 |
./dags → /opt/airflow/dags # DAGs Airflow
./logs → /opt/airflow/logs # Logs d'exécution
./plugins → /opt/airflow/plugins # Plugins personnalisés
./config → /opt/airflow/config # Configuration Airflow
./data → /opt/airflow/data # Données d'entrée
./models → /opt/airflow/models # Modèles entraînés
./metrics → /opt/airflow/metrics # Métriques de performance
./notebooks → /home/jovyan/work # Notebooks Jupyter
git clone https://github.com/TeodoreAutuly/mlops-project.git
cd mlops-projectdocker --version
docker compose versiondocker run hello-worldSi vous voyez le message de bienvenue de Docker, l'installation est réussie ! ✅
Cette commande configure la base de données et crée l'utilisateur par défaut (airflow/airflow) :
docker compose up airflow-initAttendez que le message de succès s'affiche avant de passer à l'étape suivante.
docker compose upPour démarrer en arrière-plan :
docker compose up -d- Airflow UI : http://localhost:8080
- Identifiants :
airflow/airflow
- Identifiants :
- Jupyter Notebook : http://localhost:8889
- Token :
my-token
- Token :
- Ouvrez votre navigateur à http://localhost:8080
- Connectez-vous avec :
- Username :
airflow - Password :
airflow
- Username :
- Vous verrez la liste des DAGs disponibles
- Dans l'interface Airflow, localisez le DAG souhaité (ex:
dag_imt_example) - Activez le DAG en cliquant sur le toggle à gauche
- Cliquez sur le bouton "Play" (
▶️ ) pour déclencher une exécution manuelle - Suivez l'exécution dans la vue "Grid" ou "Graph"
- Ouvrez http://localhost:8889
- Entrez le token :
my-token - Les notebooks sont dans le dossier
work/
docker compose downPour supprimer également les volumes (
docker compose down -vmlops-project/
├── docker-compose.yml # Configuration des services Docker
├── LICENSE # Licence MIT
├── README.md # Ce fichier
├── .gitignore # Fichiers ignorés par Git
│
├── dags/ # 📊 DAGs Apache Airflow
│ ├── airflow_dag_exemple.py # Pipeline ETL de base
│ └── airflow_dag_mlflow_example.py # Pipeline avec MLflow
│
├── notebooks/ # 📓 Notebooks Jupyter
│ ├── MLFlowDemoSimple.ipynb # Démo simple MLflow
│ ├── MLFlowDemo.ipynb # Démo avancée MLflow
│ ├── TDCData.ipynb # Manipulation de données
│ ├── cas.ipynb # Étude de cas
│ │
│ ├── cert/ # Certificats SSL
│ │ └── ca.pem
│ │
│ ├── data/ # Données d'exemple
│ │ └── phase1.tab
│ │
│ └── mlruns/ # Expériences MLflow locales
│ └── 0/
│
├── TPS/ # 📚 Supports de cours
│ └── TP_GIT_AIRFLOW_DOCKER.md # Tutoriel Git/Airflow/Docker
│
└── airflow/ # Configuration Airflow (générée)
├── dags/ # Copie des DAGs
└── logs/ # Logs d'exécution
Description : Pipeline d'exemple démontrant les concepts Extract → Transform → Load
Tâches :
extract: Récupère des données de commandes (simulées)transform: Calcule la valeur totale des commandesload: Affiche le résultat
Utilisation :
# Les tâches communiquent via XCom
extract_task >> transform_task >> load_taskDescription : Pipeline complet de Machine Learning avec tracking MLflow
Tâches :
get_data: Génère des données synthétiques (régression linéaire)train_model: Entraîne un modèleLinearRegressionavec autolog MLflowvalidate_model: Évalue le modèle sur le jeu de test
Démonstration simple de l'utilisation de MLflow :
- Configuration du tracking server
- Entraînement d'un modèle de régression linéaire
- Logging automatique avec
mlflow.autolog()
- MLFlowDemo.ipynb : Fonctionnalités avancées de MLflow
- TDCData.ipynb : Manipulation et analyse de données
- cas.ipynb : Étude de cas pratique
Consultez le fichier TPS/TP_GIT_AIRFLOW_DOCKER.md pour un tutoriel détaillé couvrant :
-
Introduction à Git
- Installation et configuration
- Clonage, commit, push
- Résolution de conflits
-
Introduction aux DAGs Airflow
- Concepts de base (DAG, tâches, dépendances)
- Configuration Docker Compose
- Création de volumes personnalisés
-
Docker en pratique
- Installation et test
- Lancement des services
- Debugging
# Vérifier le statut
git status
# Ajouter des fichiers
git add <fichier>
# Créer un commit
git commit -m "Message descriptif"
# Récupérer les dernières modifications
git pull
# Envoyer les modifications
git push# Voir les conteneurs en cours d'exécution
docker ps
# Voir les logs d'un service
docker compose logs -f <service>
# Redémarrer un service
docker compose restart <service>
# Exécuter une commande dans un conteneur
docker compose exec <service> <commande>
# Exemple : ouvrir un shell dans le webserver
docker compose exec airflow-webserver bashCe projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Copyright (c) 2024 Juan David CRUZ GOMEZ
Projet réalisé dans le cadre du cours MLOps - IMT Atlantique (2025)
- 🔄 Orchestration de workflows
- 📊 Suivi d'expériences ML
- 🐳 Containerisation
- 🔧 Infrastructure as Code
- 📈 Reproductibilité des expériences
- 🚀 Déploiement continu