Les Machine Learning Operations (MLOps) sont des workflow de modèles de (surprise) machine learning utilisés par des équipes DevOps. Le but du MLOps est de transposer la discipline inhérente au DevOPs aux processus de machine learning pour les rendre plus efficaces et plus fiables. Le machine learning est encore un processus expérimental et un outil comme Docker peut grandement aider à fiabiliser ces processus.
Dans cet article, nous allons voir comment Docker peut être utilisé par des ingénieurs en Machine Learning afin de déployer un modèle normalisé et performant.
Vous souhaitez devenir complètement opérationnel sur le déploiement d’applications conteneurisées ?Notee formation Docker en inter et intraentreprise vous permettra de déployer des environnements applicatifs et à les automatiser.
L’équipe Ambient IT
Quels sont les avantages de Docker pour le machine learning ?
Les cycles de machine learning sont des processus longs et laborieux dans lesquels le moindre changement peut grandement affecter les résultats et la performance du modèle. L’utilisation de Docker dans un cycle de vie peut améliorer de nombreux aspects.
Reproductibilité
Utiliser Docker pour créer vos environnements de machine learning vous permet de réduire la confusion entre vos différentes équipes de développement et de production. En normalisant le plus de paramètres possible, vous vous assurez que votre modèle sera plus efficace.
En machine learning, reproduire les mêmes résultats est extrêmement important. Docker vous permet donc de partager vos processus exacts avec toutes vos équipes afin de vous assurer que vos collègues puissent bien reproduire votre analyse. De nombreux paramètres clés peuvent ainsi être partagés comme le système d’exploitation ou la version des bibliothèques. Les mêmes résultats pourront donc être générés par 2 équipes différentes sur 2 machines différentes.
Cela permet aussi d’améliorer des environnements existants en totale collaboration. Par exemple, un développeur 1 a créé un environnement et un modèle pour détecter les paiements frauduleux. Une fois la première version construite, un développeur 2 a voulu reprendre le processus et ajouter des données. Si le code est dockerisé par 1, le second peut facilement l’utiliser et exécuter le modèle sans l’intervention de 1 et construire un meilleur modèle en affinant les hyperparamètres ou en changeant l’algorithme.
Portabilité
Pour des processus de machine learning efficaces, il est important de pouvoir passer d’un travail sur une station locale à des clusters externes fournissant des ressources supplémentaires comme du CPU, de la RAM ou des GPU. Il est aussi important de pouvoir expérimenter sur de nouveaux outils et cadres créés par la communauté.
En conteneurisant le code, vous vous assurez de pouvoir le transposer sur n’importe quelle machine sans avoir à passer des jours, voir des semaines à refaire manuellement votre environnement. Cela permet à toutes les équipes d’être opérationnelles bien plus rapidement, et ainsi réduire les coûts de production et se concentrer sur des tâches à plus forte valeur ajoutée.
Déploiement et intégration
Docker permet de simplifier grandement le déploiement de modèles d’apprentissage automatique. Vous pouvez envelopper votre modèle dans une API puis dans un conteneur, et ainsi le déployer et le partager comme une application conteneurisée.
Docker permet, non seulement d’automatiser le déploiement, mais aussi de simplifier la mise à l’échelle des applications de machine learning en fournissant un modèle de déploiement cohérent. Les conteneurs peuvent être facilement répliqués et distribués dans les instances d’un service cloud, ce qui permet une utilisation efficace des ressources et une mise à l’échelle des applications de machine learning.
Docker pour déployer votre modèle de Machine Learning
Maintenant que vous savez pourquoi, nous allons aborder le comment. Le principe du model serving avec Docker est d’héberger les modèles d’apprentissage sur un fournisseur cloud et de les rendre disponibles via une API. Il existe 2 sortes de serving :
- Batch : Indique que les inputs de votre modèle sont de grandes quantités de données, la plupart du temps issues d’une opération programmée. Les prédictions peuvent être publiées sous forme de tableau.
- En ligne : implique que le modèle est déployé avec un point de terminaison. Les applications peuvent donc présenter des requêtes au modèle et obtenir des réponses avec un minimum de latence.
Lors de la mise en place de modèles de machine learning, il faut prendre en compte un certain nombre de paramètres :
- Gestion du trafic : en fonction du service de destination, les demandes empruntent différents chemins d’accès. Pour traiter l’afflux , il peut être utile de déployer un gestionnaire d’équilibrage de la charge.
- Surveillance : il est important de surveiller les performances des différents modèles déployés afin de réagir rapidement en cas de détérioration de celles-ci et pour comprendre quand il est nécessaire de réentrainer un modèle.
- Prétraitement des données : pour un service en temps réel des données optimisé, il faut qu’elles soient dans un format approprié. L’utilisation d’un service dédié à cette tâche est donc essentiel dans le bon fonctionnement de vos workflows.
Bonnes pratiques du machine learning avec Docker
Pour la construction des images
- Utiliser des images officielles : il est conseillé d’utiliser les images fournies par Docker, surtout pour les utilisateurs débutants, car elles sont livrées avec une documentation officielle et elles encouragent de meilleures pratiques.
- Utiliser une image de base solide : construire des conteneurs sur une image présentant des défauts de construction peut mener à de nombreux problèmes de performance et de vulnérabilité. Vous devez privilégier des dépôts et des constructeurs identifiés.
- .dockerignore : créer un fichier .dockerignore dans lequel sont stockés les fichiers et conteneurs inutiles permet d’optimiser le temps de réponse de vos applications.
- Conteneurs éphémères : les conteneurs éphémères doivent être générés par l’image spécifiée dans votre fichier Docker.
- Éviter les applications inutiles : n’installer que les applications dont on se sert réellement permet de garder les images simples et d’en réduire la taille.
Pour les conteneurs
- Un conteneur par processus : il est souvent tentant de voir les conteneurs comme des machines virtuelles capables d’exécuter plusieurs aspects distincts en même temps. Si cela n’est pas factuellement faux, de telles pratiques nullifient la plupart des avantages liés aux conteneurs. Garder un conteneur distinct pour chaque service vous permet non seulement de faire croitre vos serveurs en cas de besoin, mais la journalisation devient aussi beaucoup plus simple qu’en cas de couplage de conteneurs.
- Marquer les conteneurs : le marquage Docker est un outil très pratique dans la gestion de vos conteneurs. Vous pouvez utiliser des balises stables pour conserver l’image de base de votre conteneur et des balises uniques pour les déploiements.
Monitoring et métriques
Même après le déploiement de votre modèle, son cycle de vie n’est pas terminé. Pour utiliser votre modèle au maximum de ses capacités, vous devez le surveiller aussi longtemps que vous l’utilisez.
Il est capital de surveiller vos modèles pour empêcher un phénomène connu sous le nom de dérive des modèles. Cette dégradation de la capacité de prédiction d’un modèle peut arriver via plusieurs facteurs comme l’arrivée d’information inédite, des changements dans l’environnement et dans les connexions ou d’une modification des données en amont.
Il existe de nombreux outils de monitoring de machine learning comme Neptune, TensorBoard ou MLflow. Quel que soit votre choix, il est capital de s’en servir.