Reproducibilité & Experiment Tracking

La reproductibilité est le talon d’Achille du machine learning. Deux chercheurs qui entraînent le même modèle avec le même code peuvent obtenir des résultats différents — et parfois, ne pas pouvoir reproduire leurs propres résultats six mois plus tard.

Les coupables sont multiples : seed non fixée, opérations GPU non-déterministes (scatter-add atomique), versions de bibliothèques différentes, hyperparamètres non documentés. Le problème est si grave que des conférences comme NeurIPS et ICML exigent désormais une checklist de reproductibilité.

La solution est double. D’abord, fixer l’aléatoire : torch.manual_seed(), numpy.random.seed(), et surtout torch.use_deterministic_algorithms(True) qui force CUDA à utiliser des implémentations déterministes (au prix de ~30% de performance). Ensuite, tracker les experiments : Weights & Biases (2018) est devenu le standard — chaque run est loggé avec ses hyperparamètres, ses métriques, ses artefacts, et son environnement.

Pour les données et les pipelines, DVC (Data Version Control, 2017) versionne les datasets comme Git versionne le code. Hydra (2019) permet de composer des configurations YAML avec override en ligne de commande. Et PyTorch Lightning encapsule le checkpointing, le logging, et la reproductibilité dans un trainer unique — plus besoin de réécrire la boucle d’entraînement pour chaque projet.

OutilAnnéeConcept
Seed + manualtorch.manual_seed(42) — basique mais insuffisant
Sacred2017Configuration + logging + seed management
MLflow2018Experiment tracking + model registry (Databricks)
Weights & Biases2018Dashboard cloud, collaboratif, hyperparameter search
Neptune2019Experiment tracking, metadata management
Comet2019Experiment tracking, model monitoring
DVC (Data Version Control)2017Git-like pour datasets + pipelines
Hydra (OmegaConf)2019Configuration composable (YAML override)
PyTorch Lightning2019Trainer modulaire, checkpointing, logging intégré
Gradio2020Démo ML rapide, partage via URL
Seed-fixing pour CUDA2022torch.use_deterministic_algorithms(True) — reproductibilité GPU

Problème ouvert : Les opérations atomiques GPU (scatter-add, accumulate) sont non-déterministes. Avoir exactement les mêmes poids après entraînement GPU nécessite torch.use_deterministic_algorithms(True) + CUBLAS_WORKSPACE_CONFIG + seed fixe — mais ralentit de ~30%.

← Differential Privacy41Datasets de Référence par Domaine →