Skip to content

Repository files navigation

🌸 IRIS ML CI/CD Pipeline — DVC + Prefect + Evidently (Local Storage)

Pipeline Data CI/CD complet pour un projet ML sur le dataset IRIS. Inspiré de l'approche DVC + Prefect + Evidently, adapté avec stockage 100% local.

Architecture

iris-ml-cicd/
├── config/
│   └── params.yaml              # Hyperparamètres & config
├── data/
│   ├── raw/                     # Données brutes (versionnées DVC)
│   └── processed/               # Train/test splits
├── src/
│   ├── load_data.py             # Étape 1 : Charger Iris
│   ├── preprocess.py            # Étape 2 : Feature engineering + split
│   ├── train.py                 # Étape 3 : Entraîner le modèle
│   ├── evaluate.py              # Étape 4 : Évaluer + métriques
│   └── detect_drift.py          # Étape 5 : Détection de drift (Evidently)
├── flows/
│   └── pipeline_flow.py         # Orchestration Prefect
├── models/                      # Modèle sérialisé (.joblib)
├── reports/                     # Rapports Evidently (HTML + JSON)
├── tests/
│   ├── test_data.py             # Tests de qualité données
│   └── test_model.py            # Tests de qualité modèle
├── dvc.yaml                     # Pipeline DVC
├── dvc.lock                     # (auto-généré)
├── params.yaml -> config/params.yaml
├── Makefile                     # Raccourcis commandes
├── requirements.txt
├── .github/workflows/ci.yml     # GitHub Actions CI/CD
└── README.md

Stack

Outil Rôle
DVC Versioning data & pipeline reproductible
Prefect Orchestration & scheduling
Evidently Détection de data drift
scikit-learn Entraînement ML
GitHub Actions CI/CD automatique

Setup

1. Environnement Python

python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate   # Windows
pip install -r requirements.txt

2. Initialiser Git + DVC

git init 
#Problème de permissions Windows / Git ownership.
git config --global --add safe.directory "E:/DataScience/Pipeline CICD IRIS Local/IRIS"
dvc init

# Configurer le stockage local DVC (pas d'Amazon !)
mkdir -p /tmp/dvc-local-storage
dvc remote add -d localstorage /tmp/dvc-local-storage

3. Exécution manuelle pas à pas

# Charger les données
python src/load_data.py

# Prétraiter et splitter
python src/preprocess.py

# Entraîner
python src/train.py

# Évaluer
python src/evaluate.py

# Détecter le drift
python src/detect_drift.py

4. Exécution via DVC Pipeline

dvc repro          # Exécute tout le pipeline
dvc metrics show   # Affiche les métriques
dvc plots show     # Visualise les plots

Quand tu vois :Updating lock file 'dvc.lock' ou git add dvc.lock
✔ Ton pipeline a été recalculé
✔ Les versions ont changé
✔ Il faut commit le lock file
✔ Puis push les artefacts



⚙ Option auto staging
dvc config core.autostage true
Alors DVC fera automatiquement :
git add dvc.lock

🔥 Workflow propre après chaque repro
dvc repro
git add dvc.lock
git commit -m "Update pipeline"
dvc push

5. Exécution via Prefect

prefect server start    # Dans un terminal séparé
python flows/pipeline_flow.py  # Lancer le flow

6. Exécution via Make

make all       # Pipeline complet
make test      # Tests uniquement
make drift     # Rapport de drift uniquement
make clean     # Nettoyer les artefacts

7. Versionner les données avec DVC

dvc add data/raw/iris.csv
git add data/raw/iris.csv.dvc data/raw/.gitignore
git commit -m "Add raw iris data"
dvc push    # Pousse vers le stockage local

CI/CD (GitHub Actions)

Le workflow .github/workflows/ci.yml :

  1. Installe les dépendances
  2. Lance les tests de qualité données
  3. Reproduit le pipeline DVC
  4. Vérifie les métriques du modèle
  5. Génère un rapport de drift

Se déclenche à chaque push ou pull_request sur main.

Simuler un Data Drift

Pour tester la détection de drift, modifiez src/detect_drift.py en injectant du bruit dans les données de référence vs production. Le rapport HTML sera dans reports/data_drift_report.html.

About

Pipeline ML IRIS - CI/CD DVC + Prefect + Evidently (Demo MCP La Poste)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages