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.
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
| 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 |
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
pip install -r requirements.txtgit 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# 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.pydvc 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
prefect server start # Dans un terminal séparé
python flows/pipeline_flow.py # Lancer le flowmake all # Pipeline complet
make test # Tests uniquement
make drift # Rapport de drift uniquement
make clean # Nettoyer les artefactsdvc 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 localLe workflow .github/workflows/ci.yml :
- Installe les dépendances
- Lance les tests de qualité données
- Reproduit le pipeline DVC
- Vérifie les métriques du modèle
- Génère un rapport de drift
Se déclenche à chaque push ou pull_request sur main.
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.