Romain Avouac, Lino Galiana
Contenu en construction : https://linogaliana.github.io/ensae-reproductibilite-website/
Programme large
Applications guidées
Origine : communauté des développeurs logiciels
Constats :
Conséquence : un ensemble de règles informelles, conventionnellement acceptées comme produisant des logiciels fiables, évolutifs et maintenables
L’activité du datascientist tend à se rapprocher de celle du développeur :
projets intenses en code
projets collaboratifs et de grande envergure
complexification des données et des infrastructures
déploiement d’applications pour valoriser les analyses
Voir le code comme un outil de communication
Travail collaboratif avec Git et GitHub
Maximiser la portabilité
Déployer et valoriser un projet de data science
Python
Que versionne-t-on ?
.html
, .pdf
, modèles…)Note
Pour définir des règles qui évitent de committer tel ou tel fichier, on utilise un fichier nommé .gitignore
.
Si on mélange du code et des éléments annexes (output, données…) dans un même dossier, il faut consacrer du temps à ce fichier.
Le site gitignore.io
peut vous fournir des modèles.
N’hésitez pas à y ajouter des règles conservatrices (par exemple *.csv
), comme cela est expliqué dans la documentation utilitR
.
Format des commits
Git est un logiciel
Utilisation en ligne de commande
Ressources sur le site :
D’une vision utilitariste du code à une vision du code comme outil de communication
Favoriser la lisibilité et la maintenabilité
Faciliter la réutilisation
Adopter les standards communautaires
Utiliser des fonctions
Auto-documenter son code
Astuce
Règle d’or
Il faut utiliser une fonction dès qu’on utilise une même portion de code plus de deux fois (don’t repeat yourself (DRY))
Règles pour écrire des fonctions pertinentes
Documenter le pourquoi plutôt que le comment
Privilégier l’auto-documentation via des nommages pertinents
Comment bien documenter un script ?
Favoriser la lisibilité et la maintenabilité
Enjeux spécifiques à la data science
Notebooks : pour l’exploration et la communication
Pour l’industrialisation : adopter une structure modulaire
Adopter les standards communautaires
Documenter son projet
Principe de séparation des données, du code et de la configuration
Adopter une structure de package
Favoriser l’auto-documentation via des nommages pertinents
Inclure un fichier README.md
à la racine du projet
On a construit un projet lisible, structuré et versionné
Peut-on partager notre projet ?
Un code ne vit jamais dans une bulle isolée, il contient en général de nombreuses adhérences
Un code est portable s’il peut être exécuté dans un environnement différent que celui du développement
Besoin de nouveaux outils
Python
sur son posteConflits de version : différents projets peuvent recquérir des versions différentes d’un même package
Version de Python fixe, celle de l’installation système
Reproductibilité limitée : difficile de dire quel projet nécessite quel package
Portabilité limitée : difficile de fixer dans un fichier les dépendances spécifiques à un projet
Python
pour une version donnée ;venv
conda
conda
est à la fois
pip
)conda
est généralement installé dans le cadre de distributions
Miniconda
Anaconda
conda
est un outil en ligne de commandes (CLI)Les librairies système ne sont pas gérées
Difficile de gérer des projets multi-langages
Lourdeur de la phase d’installation à chaque changement d’environnement
Peu adaptés à un environnement de production
Idée : au lieu de distribuer la recette pour recréer la bonne machine, peut-on distribuer directement la bonne machine ?
On ne peut pas distribuer des machines physiques
Les machines virtuelles sont coûteuses et complexes à redistribuer
Les conteneurs offrent un bon compromis
Source : docker.com
Plusieurs implémentations des conteneurs
Docker
est largement prédominant
Instructions selon le système d’exploitation
Environnement “bac à sable” : Play with Docker
Docker
est un outil en ligne de commandes (CLI)
Source : k21academy.com
La massification et la diversification des données apportent de nombreux changements
La majorité des projets de data science ne sont pas déployés
Besoin d’industrialisation qui nécessite de nouveaux outils
Idée : unifier le développement (dev) et l’administration système (ops)
But : raccourcir le temps de développement en déployant en continu tout en maintenant la qualité
Le DevOps n’intègre pas les spécificités liées à la data science
DataOps : déploiement et maintenance de pipelines de données
MLOps : déploiement et maintenance de modèles de Machine Learning
Les bonnes pratiques favorisent la collaboration et facilitent les déploiements
On a construit un projet de data science reproductible et conforme aux standards des bonnes pratiques
Pour valoriser le projet, il faut le déployer dans un environnement en lien avec les utilisateurs
API : interface entre l’utilisateur (client) et le modèle entraîné
API REST : permet de requêter le modèle avec une syntaxe simple (HTTP) et de manière scalable
Dépend essentiellement de l’infrastructure à disposition
Un orchestrateur de conteneurs répond à plusieurs besoins :
Intégration continue (CI) : à chaque modification du code source, l’application est automatiquement tested, built and released
Déploiement continu (CD) : les nouvelles releases sont automatiquement déployées
GitOps : le processus est décrit sous formes de manifestes, stockés sur un dépôt Git
Les données d’entrée ne sont pas fixes, il faut les intégrer dans un pipeline complet de données
La représentation est faite sous forme de graphes acycliques dirigés (DAG)
Bonnes pratiques pour la mise en production des projets de data science