Upgrade to Pro — share decks privately, control downloads, hide ads and more …

La CI/CD à l'heure du Machine Learning

Avatar for Emmanuel-Lin Emmanuel-Lin
December 19, 2023
25

La CI/CD à l'heure du Machine Learning

Présentation réalisée avec Sofia Calcagno au meetup crafting Data Science #11 chez Octo Technology.

Lien de l'évènement : https://www.meetup.com/crafting-datascience/events/297496877/

Avatar for Emmanuel-Lin

Emmanuel-Lin

December 19, 2023
Tweet

Transcript

  1. 1 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved CI/CD la construction d’artefacts à l’heure du ML Meetup crafting data science 06/12/2023
  2. 2 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Notre intention est de montrer différents patterns de ce qui est possible de faire pour prendre du recul sur nos décisions d’architecture. La CI/CD à l’heure du ML
  3. 3 03 02 01 05 04 There is a better

    way OCTO Part of Accenture © 2023 - All rights reserved Introduction Faire un prototype ou un démonstrateur Commencer le développement d’un produit Passer à l’échelle Conclusion
  4. 4 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Introduction 01
  5. 5 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Continuous * Deploy Build Test Code Continuous Integration Continuous Deployment Registre d’artefact
  6. 6 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Automatisation Accélération du delivery Capacité à roll-back Reproductibilité Confiance *Liste non-exhaustive Ce que nous apporte la CI / CD
  7. 7 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Un nouvel artefact à construire et à déployer Pourquoi c’est différent dans un contexte ML ? Code packagé Modèle N O UVEAU
  8. 8 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Un nouvel événement peut justifier un déploiement d’un nouvel artefact Pourquoi c’est différent dans un contexte ML ? Changement dans le code Changement dans les données N O UVEAU
  9. 9 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved 3 manières d’accéder à l’artefact modèle Utiliser une api de prédiction Prendre un modèle existant, et l'exécuter nous-mêmes Entraîner ou fine-tuner
  10. 10 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved La construction et gestion d’artefact dans ces cas-là ? Comme en logiciel sans ML Comme un package C’est le sujet de ce talk !
  11. 11 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved 1. Où réaliser l’entraînement ? 2. Où stocker les versions de modèles ? 3. Quand charger la version du modèle souhaitée ? Tout cela à travers trois exemples Nos focus
  12. 12 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Faire un prototype ou un démonstrateur 02
  13. 13 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Je veux montrer aux équipes marketing que le ML peut les aider. Le cas d’usage : montrer que je peux prédire de l'appétence pour un produit Mes enjeux : Aller vite - Être frugal Mes besoins
  14. 14 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Dans le service d’inférence Où réaliser l’entraînement ? Pipeline de CI/CD
  15. 15 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved In memory, pendant l’inférence Où stocker les versions du modèle ? Le modèle n’est pas persisté
  16. 16 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Lors de la prédiction, in-memory Quand charger la version du modèle souhaitée ? @app.get("/predict") def predict(X): model = Model() X_train, y_train = get_train_data() model.fit(X_train, y_train) return model.predict(X) Code python effectuant l’entraînement avant l’inférence
  17. 17 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Le diagrame de séquence pour avoir une prédiction
  18. 18 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Commencer le développement d’un produit 03
  19. 19 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Je veux construire un produit de façon itérative. Le cas d’usage : Je veux servir mes premiers modèles à mes utilisateurs. Mes enjeux : Commencer à mesurer la valeur de mon produit - Pouvoir pivoter rapidement en fonction des premiers feedbacks utilisateurs. Mes besoins
  20. 20 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Sur l’env de travail du développeur (comme l’écriture du code) Où réaliser l’entraînement ? Pipeline de CI/CD
  21. 21 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Git Où stocker les versions du modèle ? Commandes pour versionner le modèle sur Git
  22. 22 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Lors du déploiement, avec la nouvelle version du logiciel Quand charger la version du modèle souhaitée ? FROM python:3.11-slim COPY . /source COPY model.joblib /model WORKDIR /source RUN pip install -r requirements.txt CMD streamlit run main.py Dockerfile embarquant le modèle et le code dans un même artefact
  23. 23 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Le diagramme de séquence pour avoir une inférence
  24. 24 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Passer à l’échelle 04
  25. 25 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Je veux passer à l’échelle. Le cas d’usage : servir de nombreux utilisateurs, je veux pouvoir tester et mettre à jour rapidement des modèles. Mes enjeux : Pérenniser la production - agir en cas de drift - continuer à déployer à la demande. Mes besoins
  26. 26 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Dans un service de production Où réaliser l’entraînement ? Pipeline de CI/CD
  27. 27 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Blob, S3, etc. Où stocker les versions du modèle ? Code du service d’entraînement, sauvegardant le modèle produit dans un blob storage
  28. 28 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Mais aussi… Où stocker les versions du modèle ? Le même registre d’artefact que pour le logiciel Un registre d’artefact spécialisé en ML … mais tire un flux d’écriture sur le repo autre que la CI … mais il faut avoir plus d’arguments que le registry pour justifier ce choix structurant
  29. 29 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Lors de l’inférence, s’il a évolué Quand charger la version du modèle souhaitée ? @app.get("/predict") def predict(X): model_handler = ModelHandler() model = model_handler.load() return model.predict(X) class ModelHandler: def load(self): if self.check_if_model_changed(): self.model_ = self._load() return self.model_ Pseudo-code d’inférence, qui vérifie si le modèle a changé à chaque prédiction pour éventuellement le mettre à jour Variante : charger le modèle à chaque nouvelle prédiction
  30. 30 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Workflow
  31. 31 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved Conclusion 05
  32. 32 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved En résumé Où réaliser l’entraînement ? 📅 Quand l’utiliser ? Dans le service d’inférence Démonstrateur ou online learning Dans l’environnement de travail du DS Entraînement peu fréquent Dans l’environnement de production Lorsque l’entraînement est déclenché principalement par des changements des données (ou mixte)
  33. 33 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved En résumé Où stocker les versions du modèle ? 📅 Quand l’utiliser ? Git Quand le train se fait dans l’env de dev Stockage de type blob Lorsque le train se fait via un service dédié Le même registre que pour le logiciel Lorsque le train se fait dans la CI Registre spécialisé en ML Lorsque l’organisation a déjà le service dans sa stack ou lorsque d’autres besoins justifient de l’adopter
  34. 34 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved En résumé Quand charger la version du modèle souhaitée ? 📅 Quand l’utiliser ? Lors du déploiement Lorsque le train se fait dans la CI ou en dev Lors de l’inférence Lorsque le train peut être déclenché par un changement dans les données Lorsque les prédictions ne sont pas fréquentes (batch) Lors de l’inférence, lorsque le modèle est mis à jour Lorsque le train peut être déclenché par un changement dans les données Lorsque les prédictions sont fréquentes
  35. 35 There is a better way OCTO Part of Accenture

    © 2023 - All rights reserved ๏ Il n’y a pas une seule bonne façon de faire de la CI/CD pour un logiciel avec ML : choisissez vos patterns selon votre contexte et faites des ADR. ๏ Les outils du logiciel ne sont pas toujours suffisants à déployer du ML - mais ils peuvent l’être, au moins temporairement. ๏ Un logiciel avec ML peut ressembler à ces 3 exemples au cours de sa vie : sa CI/CD doit évoluer avec ses besoins. Takeaway