Intelligence Artificielle
Déploiement de grands modèles de langage sur Kubernetes : un guide complet
Les grands modèles linguistiques (LLM) sont capables de comprendre et de générer du texte de type humain, ce qui les rend inestimables pour un large éventail d'applications, telles que les chatbots, la génération de contenu et la traduction linguistique.
Cependant, le déploiement de LLM peut s'avérer complexe en raison de leur taille colossale et de leurs besoins en calcul. Kubernetes, système d'orchestration de conteneurs open source, offre une solution puissante pour déployer et gérer des LLM à grande échelle. Dans ce blog technique, nous explorerons le processus de déploiement de LLM sur Kubernetes, en abordant divers aspects tels que la conteneurisation, l'allocation des ressources et l'évolutivité.
Comprendre les grands modèles de langage
Avant de plonger dans le processus de déploiement, comprenons brièvement ce que sont les grands modèles de langage et pourquoi ils suscitent autant d’attention.
Les grands modèles linguistiques (LLM) sont un type de modèle de réseau neuronal formé sur de grandes quantités de données textuelles. Ces modèles apprennent à comprendre et à générer un langage de type humain en analysant les modèles et les relations au sein des données d'entraînement. Voici quelques exemples populaires de LLM : GPT (Transformateur Génératif Pré-entraîné), BERT (Représentations d'encodeurs bidirectionnels à partir de transformateurs), et XLNet.
Les LLM ont atteint des performances remarquables dans diverses tâches de PNL, telles que la génération de texte, la traduction et la réponse aux questions. Cependant, leur taille massive et leurs exigences informatiques posent des défis importants en matière de déploiement et d’inférence.
Pourquoi Kubernetes pour le déploiement LLM ?
Kubernetes est une plateforme d'orchestration de conteneurs open source qui automatise le déploiement, la mise à l'échelle et la gestion des applications conteneurisées. Il offre plusieurs avantages pour le déploiement de LLM, notamment :
- Évolutivité: Kubernetes vous permet de faire évoluer votre déploiement LLM horizontalement en ajoutant ou en supprimant des ressources de calcul selon vos besoins, garantissant ainsi une utilisation et des performances optimales des ressources.
- Gestion des ressources: Kubernetes permet une allocation et une isolation efficaces des ressources, garantissant que votre déploiement LLM a accès aux ressources de calcul, de mémoire et de GPU requises.
- Haute Disponibilité: Kubernetes fournit des mécanismes intégrés d'auto-réparation, de déploiements et de restaurations automatiques, garantissant que votre déploiement LLM reste hautement disponible et résilient aux pannes.
- Portabilité: Les déploiements LLM conteneurisés peuvent être facilement déplacés entre différents environnements, tels que des centres de données sur site ou des plateformes cloud, sans avoir besoin d'une reconfiguration approfondie.
- Soutien aux écosystèmes et aux communautés: Kubernetes dispose d'une communauté vaste et active, fournissant une multitude d'outils, de bibliothèques et de ressources pour déployer et gérer des applications complexes telles que les LLM.
Préparation du déploiement LLM sur Kubernetes :
Avant de déployer un LLM sur Kubernetes, plusieurs prérequis sont à considérer :
- Cluster Kubernetes:Vous aurez besoin d'un cluster Kubernetes configuré et opérationnel, soit sur site, soit sur une plateforme cloud comme Service Amazon Elastic Kubernetes (EKS), Google Kubernetes Engine (GKE), ou Service Azure Kubernetes (AKS).
- Prise en charge du GPU: Les LLM nécessitent beaucoup de calculs et nécessitent souvent une accélération GPU pour une inférence efficace. Assurez-vous que votre cluster Kubernetes a accès aux ressources GPU, via des GPU physiques ou des instances GPU basées sur le cloud.
- Registre des conteneurs: Vous aurez besoin d'un registre de conteneurs pour stocker vos images Docker LLM. Parmi les options courantes, on trouve : Docker Hub, Registre des conteneurs élastiques Amazon (ECR), Registre de conteneurs Google (GCR), ou Registre de conteneurs Azure (ACR).
- Fichiers de modèle LLM: Obtenez les fichiers de modèle LLM pré-entraînés (poids, configuration et tokenizer) à partir de la source respective ou entraînez votre propre modèle.
- La conteneurisation : Conteneurisez votre application LLM à l'aide de Docker ou d'un environnement d'exécution de conteneur similaire. Cela implique la création d'un Dockerfile qui regroupe votre code LLM, vos dépendances et vos fichiers de modèle dans une image Docker.
Déployer un LLM sur Kubernetes
Une fois les prérequis en place, vous pouvez procéder au déploiement de votre LLM sur Kubernetes. Le processus de déploiement implique généralement les étapes suivantes :
Construire l'image Docker
Créez l'image Docker pour votre application LLM à l'aide du Dockerfile fourni et transférez-la vers votre registre de conteneurs.
Création de ressources Kubernetes
Définissez les ressources Kubernetes requises pour votre déploiement LLM, telles que les déploiements, les services, les ConfigMaps et les secrets. Ces ressources sont généralement définies à l'aide de manifestes YAML ou JSON.
Configuration des besoins en ressources
Spécifiez les ressources requises pour votre déploiement LLM, notamment les ressources CPU, mémoire et GPU. Cela garantit que votre déploiement a accès aux ressources de calcul nécessaires pour une inférence efficace.
Déploiement sur Kubernetes
Utilisez l'option kubectl outil de ligne de commande ou un outil de gestion Kubernetes (par exemple, Tableau de bord Kubernetes, Rancher, ou Lens) pour appliquer les manifestes Kubernetes et déployer votre application LLM.
Surveillance et mise à l'échelle
Surveillez les performances et l'utilisation des ressources de votre déploiement LLM à l'aide d'outils de surveillance Kubernetes tels que Prométhée que le béton ey Grafana. Ajustez l’allocation des ressources ou faites évoluer votre déploiement selon vos besoins pour répondre à la demande.
Exemple de déploiement
Prenons l'exemple du déploiement du modèle de langage GPT-3 sur Kubernetes à l'aide d'une image Docker pré-compilée de Hugging Face. Nous supposerons que vous disposez d'un cluster Kubernetes configuré avec prise en charge GPU.
Extrayez l'image Docker :
docker pull huggingface/text-generation-inference:1.1.0
Créez un déploiement Kubernetes :
Créez un fichier nommé gpt3-deployment.yaml avec le contenu suivant :
apiVersion: apps/v1 kind: Deployment metadata: name: gpt3-deployment spec: replicas: 1 selector: matchLabels: app: gpt3 template: metadata: labels: app: gpt3 spec: containers: - name: gpt3 image: huggingface/text-generation-inference:1.1.0 resources: limits: nvidia.com/gpu: 1 env: - name: MODEL_ID value: gpt2 - name: NUM_SHARD value: "1" - name: PORT value: "8080" - name: QUANTIZE value: bitsandbytes-nf4
Ce déploiement spécifie que nous souhaitons exécuter une réplique du conteneur gpt3 à l'aide de l'image Docker huggingface/text-generation-inference:1.1.0. Le déploiement définit également les variables d'environnement requises pour que le conteneur charge le modèle GPT-3 et configure le serveur d'inférence.
Créez un service Kubernetes :
Créez un fichier nommé gpt3-service.yaml avec le contenu suivant :
apiVersion: v1 kind: Service metadata: name: gpt3-service spec: selector: app: gpt3 ports: - port: 80 targetPort: 8080 type: LoadBalancer
Ce service expose le déploiement gpt3 sur le port 80 et crée un service de type LoadBalancer pour rendre le serveur d'inférence accessible depuis l'extérieur du cluster Kubernetes.
Déployer sur Kubernetes :
Appliquez les manifestes Kubernetes Ă l'aide de la commande kubectl :
kubectl apply -f gpt3-deployment.yaml kubectl apply -f gpt3-service.yaml
Surveiller le déploiement :
Surveillez la progression du déploiement à l'aide des commandes suivantes :
kubectl get pods kubectl logs <pod_name>
Une fois le pod exécuté et les logs indiquent que le modèle est chargé et prêt, vous pouvez obtenir l'adresse IP externe du service LoadBalancer :
kubectl get service gpt3-service
Testez le déploiement :
Vous pouvez désormais envoyer des requêtes au serveur d'inférence à l'aide de l'adresse IP externe et du port obtenus à l'étape précédente. Par exemple, en utilisant curl :
curl -X POST \
http://<external_ip>:80/generate \
-H 'Content-Type: application/json' \
-d '{"inputs": "The quick brown fox", "parameters": {"max_new_tokens": 50}}'
Cette commande envoie une requête de génération de texte au serveur d'inférence GPT-3, lui demandant de continuer l'invite « Le renard brun rapide » pour un maximum de 50 jetons supplémentaires.
Sujets avancés que vous devez connaître
Bien que l'exemple ci-dessus illustre un déploiement de base d'un LLM sur Kubernetes, il existe plusieurs sujets et considérations avancés à explorer :













