Ceci est le dernier article de notre série sur les MLOps, dans les derniers articles nous sommes allés de MLOps lvl 0 et 1, si vous voulez rattraper le retard, voici les liens des articles précédents :
Présentation de MLOps lvl 0 : https://www.picsellia.fr/post/mlops-explication-importance
Présentation de MLOps lvl 1 : https://www.picsellia.fr/post/mlops-partie-2
Dans cette troisième partie, nous allons couvrir le niveau 2 des MLOps et présenter quelques outils et techniques pour y parvenir.
Qu'est-ce que le niveau 2 de MLOps ?
Le niveau 2 va un peu plus loin en termes de ce que nous pouvons faire et du type de système que nous sommes désormais capables d'exploiter. Nous entendons par là des systèmes à grande échelle et à haute fréquence. Les scientifiques des données peuvent désormais se concentrer sur l'analyse des données et devenir centrés sur les données, ils peuvent également passer plus de temps à tester de nouvelles techniques, de nouveaux algorithmes et de nouvelles analyses.
Vous avez développé des outils pour empaqueter et conteneuriser leur code, de sorte que lorsqu'ils ont terminé, l'ensemble du pipeline est automatiquement testé et déployé. Cela signifie que nous avons réalisé une intégration et une livraison continues entièrement automatisées.
Les déclencheurs du renouvellement du pipeline sont multiples, car nous surveillons tout de différentes manières à différents stades, chaque métrique surveillée peut déclencher le pipeline. Ou tout peut être programmé, c'est votre choix. Les quelques étapes manuelles qui restent obligatoires sont l'analyse des données et des erreurs, pour s'assurer que les données de formation et les modèles répondent à nos normes élevées.
Parlons maintenant de certains outils qui vous aideront à progresser vers le niveau 2 (ou au moins le niveau 1) de la maturité MLOps.
La route vers les MLOps
Nous allons aborder certaines des étapes les plus importantes qui nous viennent à l'esprit lorsque nous traitons des MLOps.
- La première étape (l'une des plus importantes) est le déploiement, car c'est celle qui devrait finalement résoudre votre cas ou votre projet (du moins au début).
- En ce qui concerne la surveillance, il n'y a pas de MLOps sans moyens appropriés pour surveiller les systèmes sous-jacents.
- Et enfin, toutes les étapes qui caractérisent les différents niveaux de MLOps : la boucle de rétroaction, la formation continue et la livraison continue des modèles.
Les derniers points dépendent des exigences de l'entreprise ou du projet, de l'organisation, des équipes, etc.
Déploiement du modèle en nuage
Le déploiement est l'une des étapes les plus passionnantes du projet, où vous pouvez enfin voir votre modèle en action, étudier ses performances, mais aussi prier pour qu'il ne se casse jamais !
Voici un diagramme de ce que nous considérons comme le strict minimum de configuration et de conditionnement pour déployer un modèle en "production". Tout ce qui est moins complet que cela ne peut pas être considéré comme prêt pour MLOps.
Mais nous allons tout de même voir les différentes façons de déployer les modèles et voir comment ils se comparent les uns aux autres.
Options de déploiement
Voici (en résumé) les options qui s'offrent à nous pour déployer des modèles d'apprentissage automatique aujourd'hui. Si vous pouvez faire des prédictions à l'aide d'un système connecté au Web, quelques options sont à votre disposition.
- La première chose que vous avez peut-être faite est de déployer un serveur Web simple pour traiter les demandes et faire les prédictions.
- La seconde, plus avancée, consiste à utiliser des moteurs complets et puissants tels que Tensorflow Serving, et enfin, dans la dernière partie, nous verrons certains services de fournisseurs de Cloud.
- La dernière option consiste à déployer un modèle sur la périphérie. Je ne la couvrirai pas car la logique d'intégration de ces options dans un pipeline n'est pas différente des premières.
Déploiement d'un serveur Web simple
Flask Deployment vous montre à quel point il est facile de "déployer" un modèle d'apprentissage automatique sur un point de terminaison d'API. Voici un petit exemple fonctionnel d'un modèle déployé sur un serveur Flask.
Le principal problème de cette méthode est qu'elle mélange la logique du modèle et des prédictions avec la logique de l'API, ce qui entraîne des traces de pile plus compliquées et un code moins propre. L'API peut être incohérente. Par exemple, si vous devez modifier un itinéraire, vous ne pouvez pas créer un routage dynamique vers les nouvelles versions du modèle au fur et à mesure que vous l'ajoutez aux serveurs. Enfin, il est inefficace et dangereux de gérer vos ressources informatiques.
Et si votre modèle doit évoluer mais que le serveur web ne le fait pas, comment pouvez-vous décorréler les besoins de performance des deux côtés ? Comment atténuer les coûts d'une telle solution ?
Elle ne peut s'étendre qu'avec la douleur.
Servir Tensorflow - Avantages et inconvénients
Passons à une approche plus robuste du service : le service Tensorflow.
Premièrement, il résout notre problème précédent de logique mixte. Même si c'est plus compliqué qu'un serveur Flask, c'est quand même assez facile, et y consacrer du temps en vaut la peine. Vous pouvez maintenant faire des prédictions par lot, ce qui signifie paralléliser vos prédictions.
Vous disposez d'une API qui ne change pas, puisqu'elle est consacrée à la gestion des modèles et aux prédictions. En outre, elle est assez standardisée et vous pouvez utiliser soit l'API REST, soit l'API gRPC (par exemple, chez Picsellia, nous utilisons gRPC car il améliore les performances et la robustesse des API - mais il s'accompagne d'une courbe d'apprentissage plus importante, alors choisissez ce qui vous convient le mieux).
Il prend nativement en charge différentes versions pour le même modèle, en normalisant la façon dont les routes API sont écrites.
Mais, est-ce que le service TensorFlow peut seulement exécuter TensorFlow ?
Pour l'instant, il n'exécute que les modèles TensorFlow et Keras, mais des améliorations sont en cours et, comme nous le verrons plus tard, il existe des solutions de contournement. Nous vous recommandons cet article rédigé par Analytics India sur la conversion des modèles Pytorch en modèles Tensorflow Serving.
Tensorflow Serving - Run
Pour vous montrer à quel point il est facile d'exécuter le service TensorFlow et de déployer un modèle, nous avons réalisé ces captures d'écran.
La première vous montre la commande minimale pour lancer le moteur de service et l'autre pour que vous puissiez voir à quoi il ressemble une fois correctement lancé. C'est beau, n'est-ce pas ?
Tensorflow Serving - Exemple gRPC
Ici, nous avons écrit un exemple minimal sur la façon de demander le serveur de service Tensorflow, en utilisant le protocole gRPC.
On peut dire que c'est moins intuitif que l'exemple de Flask, mais ce n'est même pas aussi long et je peux vous garantir que cela vous donnera beaucoup plus de confiance dans votre moteur de service.
Autres options
- Graphpipe résout le problème des modèles multi-framework. Vous pouvez déployer des modèles Tensorflow, et les modèles MXnet et Pytorch peuvent être convertis au format ONNX, qui peuvent ensuite être déployés sur le même serveur. Il est également livré avec de nombreux clients pour différents langages de programmation, de sorte qu'il peut être inclus dans presque n'importe quelle pile.
- Kubeflow est une solution lourde, basée sur Kubernetes, qui permet d'orchestrer des expériences, de servir et de prendre en charge des pipelines à l'échelle sur n'importe quelle architecture dans de bonnes conditions. Même si elle est très puissante, il peut être compliqué de prendre en main la solution et de la maintenir correctement.
- Le service Tensorflow simple prend en charge presque tous les cadres existants, y compris Pytorch et MXnet, et semble encore assez facile à mettre en œuvre.
- Enfin, nous avons des solutions de déploiement en nuage comme la plateforme des fournisseurs de nuage (AWS, GCP, Azure...) et des solutions comme la nôtre ; Picsellia. L'avantage de ces solutions est que tout est géré, entretenu et surveillé pour vous, et qu'elles constituent des outils puissants pour vos projets de ML. Mais elles doivent être compatibles avec vos flux de travail et vos politiques existants et elles ont un prix.
Si vous souhaitez en savoir plus sur notre solution MLOps, Picsellia, n'hésitez pas à réserver un appel de présentation rapide et nous vous aiderons à démarrer en un rien de temps !