Par Maxime Jumelle
CTO & Co-Founder
Publié le 6 oct. 2021
Catégorie MLOps
Tu as probablement déjà entendu parler de Kubernetes : c'est un outil extrêmement populaire dans le Cloud et qui est devenu, en quelques années, la référence en terme de déploiement d'applications dans le Cloud. Mais pourquoi (et surtout comment) Kubernetes est devenu la solution incontournable ? Et surtout, pour un Data Scientist, quel est le rapport avec Kubernetes et le Machine Learning ?
Kubernetes est un projet qui a été à l'origine développé chez Google. Initialement, cela fait plus de 15 ans que Google utilise en interne son propre orchestrateur de conteneurs, qui à l'époque s'appelait Borg. Les besoins de Google en terme de gestion de conteneurs était clair : délivrer quotidiennement des centaines de milliers de conteneurs au sein de leur infrastructure globale. Borg, écrit en Go, était donc leur propre solution.
Au final des années, les besoins d'orchestration de conteneurs se sont ressenties au sein d'autres entreprises. Bien qu'il y avait Docker Swarm, l'orchestrateur de conteneurs développé par les créateurs de Docker, ce dernier ne remplissait pas globalement sa mission. Il fallut attendre 2014 pour que Google développe son propre orchestrateur en se basant sur sa forte expérience de gestion des conteneurs acquise avec Borg. Rendu open-source et légué à la CNCF, Kubernetes est aujourd'hui la référence incontournable et détrône les autres solutions telles que AWS ECS ou Docker Swarm.
À lire aussi : découvrez notre formation MLOps
Pour bien comprendre la très forte popularité de Kubernetes, il nous faut bien comprendre son fonctionnement et son écosystème.
Tout d'abord, l'écosystème est un point central lorsque l'on parle d'un projet open-source. Outre ses nombreuses mises à jours et améliorations, le système de configuration de Kubernetes est très flexible et permet à tout moment de mettre à jour des applications en continu sans perturber leur fonctionnement. Ensuite, Kubernetes est présent dans la plupart des fournisseurs Cloud, aussi bien chez Google que AWS, Azure ou encore Digital Ocean. Enfin, de nombreuses applications de références et des templates sont disponibles pour déployer très rapidement des solutions puissantes.
Avant toute chose, il faut bien évidemment présente le cluster Kubernetes dans son ensemble. Il s'agit de l'environnement constitué de serveurs physiques sur lesquels se base Kubernetes. Par l'intermédiaire de commandes systèmes, nous pouvons agir sur les différents objets du cluster par des opérations de lecture (get), de création (create), de mise à jour (patch) ou de suppression (delete). Ces 4 opérations, qui rappellent fortement les opérations CRUD, sont essentielles sous K8s (pour Kubernetes). Et c'est justement kubectl
qui va nous permettre d'interagir avec l'ensemble du cluster en communiquant avec l'API de K8s appelée API Objects.
Par exemple, kubectl get
signifie que l'on souhaite voir/lister des informations sur une ou plusieurs ressources, alors que kubectl patch
permettra de mettre à jour lesdites ressources.
Une des difficultés de K8s est qu'il y a beaucoup d'objets qui peuvent être difficiles à appréhender. Tout d'abord, commençons par les trois objets élémentaires.
Un Node (noeud) est un serveur/une machine virtuelle du cluster K8s qui exécute des conteneurs. Très souvent, ce n'est pas à nous de gérer les serveurs dans les Clouds publics. En revanche, nous devons plusieurs paramètres, dont la taille du cluster (nombres de noeuds), les ressources allouées à chaque noeud et les interfaces réseaux.
Un Pod est un objet central sous K8s. Il s'agit d'une isolation logique d'un ou de plusieurs conteneurs au sein d'un seul noeud. Un pod peut contenir un ou plusieurs conteneurs. Par exemple, supposons qu'une entreprise propose un environnement isolé contenant une application et une base de données pour chaque client, alors un pod serait attribué à chaque client et chaque pod contiendrait deux conteneurs : l'application et la base de données.
Ce sont notamment les pods qui vont être crées lorsqu'il y aura des montées en charge ou lorsque de nouvelles applications seront développées et déployées avec K8s.
Un Volume est un système de gestion de fichier qui peut être partagé entre les pods. C'est notamment utile lorsque des conteneurs, exécutés sur des pods différents (et potentiellement des noeuds différents), souhaitent partager des données sous forme de fichiers. Attention tout de même, la notion de volume sous K8s n'est pas persistante : le volume et les données seront détruits si le pod associé est supprimé. Pour cela, on utilise plutôt des PersistentVolume, bien qu'il ne soit tout de même pas conseillé d'y stocker des données de types relationnelles ou sensibles.
Pour récapituler :
Mais alors, à quoi sert Kubernetes en Machine Learning ?
En général, entraîner des modèles de Machine Learning nécessite de la puissance de calcul. Qu'il s'agisse d'un algorithme d'Ensemble Learning comme XGBoost ou d'un réseau de neurones TensorFlow, l'entraînement prend du temps pour plusieurs raisons.
Autrement dit, avec toutes ces étapes, entraîner un modèle de Machine Learning type XGBoost pourrait prendre plusieurs heures sur son ordinateur. Or, avec Kubernetes, nous avons à la fois la possibilité d'obtenir des serveurs beaucoup plus puissants, mais aussi la capacité à paralléliser cette étape en profitant de tous les noeuds d'un cluster.
JupyterHub est un projet développé par l'équipe Jupyter, qui permet de créer des serveurs Jupyter Notebook à la demande, chaque serveur ayant ses propres ressources (nombre de processeurs, mémoire, carte graphique) et son environnement. Il est donc possible, par exemple, d'avoir accès à de la puissance de calcul avec un environnement Spark déjà installé, ce qui permet par exemple, pour un Data Scientist, de manipuler des données volumineuses directement depuis le cluster.Kubernetes est particulièrement efficace ici, car il va proposer de la puissance de calcul à des utilisateurs, des environnements spécifiques et une capacité à monter en charge : si plusieurs Data Scientists ont besoin de serveurs Jupyter avec beaucoup de ressources, Kubernetes sera capable d'ajouter de nouveaux serveurs pour répondre à la demande.
Une fois le modèle entraîné, se pose la question de son exposition, ou plutôt des questions.
En temps normal, ces problèmes sont difficiles à solutionner, car il nécessite tout une équipe qui dispose à la fois des compétences techniques et du temps pour pouvoir mettre en place des solutions et surveiller les systèmes.
Kubernetes est dès le départ conçu pour s'abstraire de toutes ces tâches techniques, nécessaires mais à faible valeur ajoutée, pour se concentrer sur la partie applicative, qui représente une forte valeur ajoutée pour l'entreprise. Ainsi,
Un modèle de Machine Learning peut être encapsulé sous forme d'une API (avec Flask ou FastAPI par exemple), ce qui permet de le considérer comme une application à part entière. Ainsi, il est possible d'utiliser des Services et des Deployments sur une API qui exécute un modèle de Machine Learning, permettant ainsi de répondre aux questions citées plus haut.
Pour un Data Scientist, le déploiement est beaucoup plus rapide, car il doit uniquement construire l'API et la configuration de celle-ci sans avoir besoin de gérer l'infrastructure sous-jacente qui l'exécute.
À lire aussi : découvrez notre formation MLOps
En ayant la capacité d'une part d'entraîner des modèles, et d'autre part de les exposer, il n'y a qu'un pas pour intégrer et automatiser ces deux parties sous forme de pipeline.
Ce que nous avons abordé jusqu'ici s'intègre en réalité dans la mouvance MLOps, qui cherche à appliquer les bonnes pratiques du DevOps au Machine Learning. Autrement dit, on cherche à garantir une efficacité opérationnelle maximale de nos pipelines ML tout en automatisant les processus d'entraînement et d'exposition.
Récemment, une nouvelle plateforme a fait son apparition : Kubeflow. Le grande force de cette plateforme, c'est de permettre au Data Scientists et Machine Learning Engineers de créer des projets MLOps basés sur Kubernetes.
Kubeflow s'exécute et opère sur un cluster Kubernetes. Il vient avec de nombreux composants que l'on peut choisir d'installer ou non, et donc chacun a un rôle précis.
Comme nous venons de la voir, Kubernetes est un allié de poids pour les Data Scientists et les Machine Learning pour élaborer des pipelines ML vers un niveau de production. De plus en plus d'entreprises disposent de clusters Kubernetes qu'elles utilisent déjà en tant que plateforme de conteneurs pour exposer des services : il est donc très intéressant, pour les équipes Data, de se greffer à ces clusters existants pour décharger la partie infrastructure et se concentrer sur les pipelines ML.
De nouveaux outils voient également le jour, car la maturité autour du MLOps et des plateformes comme Kubernetes commencent à évoluer, permettant ainsi d'imbriquer ensemble des compétences diversifiées.
Vous souhaitez vous former au MLOps ?
Articles similaires
18 janv. 2022
MLflow est une plateforme open source qui permet de **gérer le cycle de vie des modèles de Machine Learning. En particulier, grâce à MLflow, les modèles qui ont été entraînés à une date spécifique ainsi que les hyper-paramètres associés pourront être stockés, monitorés et réutilisés de manière efficace.
Maxime Jumelle
CTO & Co-Founder
Lire l'article
11 févr. 2021
C'est l'un des profils les plus demandés par les entreprises depuis quelques années. Le Machine Learning Engineer s'est imposé comme le profil idéal pour industrialiser et mettre en production des projets Data Science. En plus de ses compétences déjà solides en Machine Learning, il utilise les outils et services du Cloud pour déployer des modèles et des API sur des infrastructures complexes.
Maxime Jumelle
CTO & Co-Founder
Lire l'article
9 déc. 2020
L'AutoML est une pratique courante dans les projets Data Scientist qui consiste à automatiser le création des modèles de Machine Learning. Cela va permettre de gagner du temps puisque cette pratique va tester à la fois plusieurs méthodes de transformations des données, mais aussi plusieurs modèles de Machine Learning pour ensuite les comparer et conserver le plus performant.
Maxime Jumelle
CTO & Co-Founder
Lire l'article
60 rue François 1er
75008 Paris
Blent est une plateforme 100% en ligne pour se former aux métiers Tech & Data.
Organisme de formation n°11755985075.
Data Engineering
IA Générative
MLOps
Cloud & DevOps
À propos
Gestion des cookies
© 2024 Blent.ai | Tous droits réservés