Terme emprunté aux équipes SRE de Google, il se caractérise par sa nature répétitive, manuelle et souvent non-scalable des tâches. Il se distingue ainsi des deux autres types de tâches qui occupent une équipe que sont le développement de nouvelles fonctionnalités et l'overhead administratif.
Concrètement, le toil englobe l'ensemble des tâches liées à l'exploitation d'un service en production. Ces tâches peuvent être automatisables mais sont souvent exécutées manuellement, n'apportant pas de valeur ajoutée directe au produit. De plus, elles ont tendance à croître de façon linéaire avec le nombre d'utilisateurs du service. Leur exécution peut rapidement devenir incontrôlable et entraîner des conséquences désastreuses, notamment en termes de coûts :
Afin de prévenir les effets néfastes du toil, les équipes SRE de Google ont établi une règle d'or : ne pas consacrer plus de 50% de leur temps à des tâches de ce type.
Aurélien nous propose donc de réaliser un jeu : toil ou pas toil ? Le jeu du toil
Les réponses :
Deux chemins existent alors pour maîtriser le toil : le combattre ou l’éviter.
Mais est-ce que c’est normal d’avoir du toil en phase de run ?
Oui c’est tout à fait normal, car dans des projets MLOps, nous devons gérer 3 dimensions interdépendantes : le code, le modèle et les données. Par exemple, si les données changent ça peut impacter le modèle, si le code change, le modèle et les données peuvent être impactés etc. Par ailleurs, en début de projet, on va passer du temps à cadrer avec nos utilisateurs et on va mettre moins d’énergie dans la conception d’un produit parfaitement carré. Et lorsqu’on est en phase de build, l’environnement reste mouvant et il est nécessaire de continuer à valider des hypothèses sur les fonctionnalités du produit et les performances du modèle. Le contexte continue d’évoluer et on n'aura pas forcément envie de tout automatiser dès le début car ce sera souvent une perte de temps.
En phase de run, le toil tend à s'accroître avec l'ajout de nouvelles fonctionnalités et l'augmentation du nombre d'utilisateurs. Si aucune mesure n'est prise pour le contrôler, le toil peut rapidement devenir un obstacle majeur, paralysant ainsi le projet dans son évolution.
Pour contrer efficacement le toil, la première étape va être de le mesurer, que ce soit manuellement ou à l'aide d’un Kanban et de tickets, nous pouvons identifier les tâches répétitives. Une fois que nous avons pris conscience de ces tâches, il faut définir des actions pour permettre l'automatisation s'avère être l'outil le plus puissant.
Les principales stratégies pour tacler le toil incluent :
Le processus est donc simple : on mesure, on améliore et on mesure de nouveau pour voir si la situation s’est améliorée, et cela à chaque itération.
Dans cette dernière étape, nous explorons une voie alternative pour éviter de se confronter directement au toil. Trois constats soulignent les pratiques à adopter pour prévenir son apparition. Constat 1 : Réutilisation limitée de l'existant Les équipes data ont tendance à sous-utiliser les ressources existantes, privilégiant souvent des solutions rapides, comme du shadow IT, au détriment d'une intégration harmonieuse dans l'écosystème IT existant. Cette approche peut entraîner des compromis en termes d'infrastructure et de code, susceptibles d'avoir un impact négatif lors de l'intégration ultérieure du projet. Constat 2 : La partie déterministe n'est pas automatisée Dans un projet de Machine Learning, la majeure partie des briques est déterministe, offrant ainsi un potentiel d'automatisation considérable. Seules quelques parties du code de machine learning sont véritablement non-déterministes, ce qui implique que de nombreuses tâches répétitives peuvent être automatisées, telles que la gestion de l'infrastructure, la CI/CD et même le feature engineering. Constat 3 : Choix parfois non idéaux Les décisions prises lors de la conception d'un projet ML peuvent parfois être sous-optimales, soit en raison d'une sur-anticipation, soit d'un manque de recul sur l'état de l'art du domaine. Par exemple, le recours à des modèles de Deep Learning ou à des technologies à l’état de l’art peut entraîner une complexité inutile et une maintenance accrue. Plus tôt dans cette journée de la Grosse Conf, Julien Simon nous parlait justement de “choisir le plus petit modèle qui fait le taff” et non le dernier modèle à la mode.
Dans nos choix face au toil, nous pouvons adopter différentes attitudes, allant de la témérité à la prudence, et de la conscience à l'inconscience.
Téméraire | Prudent | |
---|---|---|
Conscient | Effectuer des choix audacieux sous pression tout en restant conscients des conséquences potentielles, telles que le développement de pratiques peu robustes ou la mise en place d'une "Shadow IT". | Faire des choix réfléchis et documentés, en tenant compte des conséquences à long terme et en partageant les apprentissages avec l'organisation. Par exemple, avoir un serveur SMTP qui est en panne et prendre la décision d’envoyer une unique fois manuellement aux utilisateurs un mail, et ajouter dans un kanban un ticket pour corriger cette dette technique au plus vite. |
Inconscient | Opter pour des solutions complexes sans réel recul ni compréhension des implications, ce qui peut entraîner une (sur)complexité inutile. Par exemple, vouloir tester la toute dernière librairie de Machine learning alors que celle-ci est encore expérimentale et que peu de retours existent. | Prendre des décisions basées sur des connaissances limitées, mais avec une volonté d'apprentissage et d'amélioration continue. Par exemple, se rendre compte après-coup qu’être parti sur une approche ETL lors du développement de flux data était moins adéquat qu’une approche ELT, plus robuste et flexible. |
“Il faut beaucoup de courage pour supprimer du code [ou] décommissionner une fonctionnalité qui a coûté un millions d’euros et qui n’est pas utilisée”
En conclusion, pour éviter le toil et naviguer avec succès dans le monde complexe du MLOps, il est essentiel de concevoir avec soin, conscientiser nos choix et de supprimer le superflu et donc de réaliser des choix prudents et conscients.
“Fut un temps où les développeurs étaient payés au nombre de lignes de code qu'ils écrivaient... On devrait maintenant penser à les payer pour en supprimer, car la suppression c'est la simplification.”
Cette simplification énoncée par Aurélien fait écho à la loi d’erooM, mentionnée plus tôt dans le talk de Tristan Nitot. Dans cette démarche, chaque décision compte et contribue à façonner un environnement opérationnel plus efficace et plus pérenne pour les projets de Machine Learning. Les historiser à travers des ADR peut être une pratique efficace pour les conscientiser et les communiquer à votre équipe.
En conclusion, le MLOps est un périple jalonné de défis et d'opportunités, où la gestion du toil et la simplification des produits ML émergent comme des axes essentiels. Aurélien nous invite à être attentif aux points suivants :
“Ce dessin m'a pris cinq minutes, mais j'ai mis soixante ans pour y arriver”.
En définitive, comme l'a si bien exprimé Auguste Renoir à travers cette phrase, la simplicité peut sembler facile, mais elle est le résultat d'années d'efforts et d'apprentissage. Dans notre quête vers des produits ML plus simples et plus efficaces, gardons cette citation en tête, rappelant que le chemin vers la perfection est un voyage continu, façonné par notre engagement et notre expérience.