Scaling LLMs: Guide Pratique

Exploitation des APIs pour l’intégration de LLM

L’intégration des LLM dans une base de code peut être réalisée par diverses méthodes, mais l’utilisation d’une API compatible avec OpenAI est fortement recommandée pour les déploiements en production. Cette approche offre la flexibilité nécessaire pour s’adapter au paysage des modèles en évolution rapide. Les modèles considérés comme étant à la pointe il y a quelques mois peuvent rapidement devenir obsolètes.

Depuis l’essor de l’IA qui a débuté avec ChatGPT en 2022, l’interface API d’OpenAI est devenue la norme de facto pour connecter les applications aux LLM. Cette norme permet aux développeurs de créer des applications en utilisant les ressources disponibles, par exemple en commençant avec Mistral 7B dans Llama.cpp sur un ordinateur portable et en passant de manière transparente aux serveurs API de Mistral AI pour le déploiement en production. Cela élimine le risque d’être enfermé dans un seul modèle, moteur d’inférence ou fournisseur d’API.

Les services d’inférence basés sur le cloud offrent un moyen de mise à l’échelle des déploiements d’IA qui est favorable aux dépenses d’investissement (capex). Ces services éliminent le besoin de gestion du matériel et de configuration des modèles, en fournissant à la place une API pour l’intégration des applications.

En plus des offres d’API des principaux constructeurs de modèles, un nombre croissant de startups d’infrastructure d’IA offrent l’inférence en tant que service pour les modèles à poids ouverts. Ces fournisseurs varient dans leurs approches. Certains, comme SambaNova, Cerebras et Groq, tirent parti d’un matériel spécialisé ou de techniques comme le décodage spéculatif pour accélérer l’inférence, mais offrent une plus petite sélection de modèles. D’autres, comme Fireworks AI, prennent en charge le déploiement de modèles personnalisés affinés à l’aide d’adaptateurs Low Rank Adaptation (LoRA). La diversité de l’écosystème de l’IA nécessite une recherche approfondie avant de s’engager envers un fournisseur spécifique.

Considérations relatives au déploiement de LLM sur site

Dans les situations où les approches basées sur le cloud ne sont pas possibles en raison de contraintes de confidentialité, réglementaires ou d’infrastructure préexistantes (par exemple, une entreprise a déjà investi dans des serveurs GPU), le déploiement sur site devient nécessaire. Cela peut présenter plusieurs défis. Voici quelques questions courantes qui se posent :

  • Sélection du modèle : Le modèle approprié dépend du cas d’utilisation spécifique. Un modèle conçu pour un chatbot de service à la clientèle aura des exigences différentes de celles d’un modèle utilisé pour la génération augmentée par la récupération ou comme assistant de code. Il est recommandé de passer du temps avec les fournisseurs d’API pour identifier un modèle qui répond aux besoins.
  • Exigences matérielles : La détermination du matériel nécessaire est essentielle, car les GPU sont coûteux et peuvent être difficiles à acquérir. Le modèle lui-même peut fournir des indications sur le matériel nécessaire pour l’exécuter. Les modèles plus grands nécessitent plus de matériel. Une estimation approximative de la mémoire GPU minimale peut être calculée en multipliant le nombre de paramètres (en milliards) par 2 Go pour les modèles entraînés à une précision de 16 bits. Pour les modèles 8 bits, 1 Go par milliard de paramètres est nécessaire. Les techniques de compression de modèle comme la quantification peuvent réduire cela à 512 Mo par milliard de paramètres. C’est une limite inférieure. Une mémoire supplémentaire est nécessaire pour servir le modèle à plusieurs utilisateurs simultanément en raison du cache clé-valeur, qui agit comme la mémoire à court terme du modèle. La matrice de support de Nvidia offre des conseils sur les GPU nécessaires pour exécuter divers modèles.
  • Redondance : En plus de dimensionner le matériel au modèle, la redondance doit être prise en compte. Un seul nœud GPU est vulnérable aux pannes, il est donc important de déployer deux systèmes ou plus pour le basculement et l’équilibrage de charge.
  • Méthodes de déploiement : Les LLM peuvent être déployés et servis en production en utilisant diverses méthodes : bare metal avec des équilibreurs de charge, des machines virtuelles ou des conteneurs dans Docker ou Kubernetes. Kubernetes simplifie les déploiements à grande échelle en automatisant la création de conteneurs, la mise en réseau et l’équilibrage de charge.

Kubernetes pour le déploiement de LLM

Kubernetes élimine une grande partie de la complexité associée aux déploiements à grande échelle en automatisant la création de conteneurs, la mise en réseau et l’équilibrage de charge. De nombreuses entreprises ont déjà adopté et comprennent Kubernetes. Nvidia, Hugging Face et d’autres privilégient les environnements conteneurisés avec Nvidia Inference Microservices (NIM) et Hugging Face Generative AI Services (HUGS), préconfigurés pour les charges de travail et les déploiements courants.

Kubernetes offre une abstraction puissante qui permet aux équipes de se concentrer sur le déploiement des applications plutôt que sur la gestion de l’infrastructure sous-jacente. En utilisant des définitions déclaratives pour les applications et les ressources, Kubernetes automatise le processus de déploiement, de mise à l’échelle et de gestion des conteneurs. Cela simplifie considérablement le déploiement de LLM à grande échelle, car les équipes peuvent définir les exigences de ressources (CPU, GPU, mémoire) pour chaque conteneur et laisser Kubernetes gérer la planification et l’exécution.

De plus, Kubernetes offre des fonctionnalités de surveillance et de journalisation intégrées qui permettent aux équipes de surveiller l’état de leurs déploiements de LLM et de résoudre rapidement les problèmes. Les journaux peuvent être collectés et analysés pour identifier les goulots d’étranglement de performance ou les erreurs, ce qui permet aux équipes d’optimiser leurs déploiements pour une efficacité maximale.

L’écosystème Kubernetes est vaste et comprend de nombreux outils et services qui peuvent être utilisés pour améliorer les déploiements de LLM. Par exemple, les équipes peuvent utiliser des outils comme Prometheus et Grafana pour surveiller les performances des GPU et des applications, ou utiliser des outils comme Istio pour gérer le trafic réseau et la sécurité.

En outre, Kubernetes prend en charge le déploiement de modèles personnalisés à l’aide de conteneurs personnalisés. Cela permet aux équipes de déployer leurs propres modèles entraînés ou d’utiliser des modèles pré-entraînés à partir de référentiels comme Hugging Face Model Hub. Kubernetes s’intègre également à divers outils de gestion de modèles, ce qui permet aux équipes de gérer facilement les versions de leurs modèles et de les déployer en production.

Moteurs d’inférence

Divers moteurs d’inférence sont disponibles pour l’exécution de modèles, notamment Ollama et Llama.cpp, qui sont compatibles avec une large gamme de matériel. Pour la mise à l’échelle des modèles, des bibliothèques comme vLLM, TensorRT LLM, SGLang et PyTorch sont souvent utilisées. Ce guide se concentre sur le déploiement de modèles à l’aide de vLLM, car il prend en charge une large sélection de modèles populaires et offre une large prise en charge et compatibilité sur Nvidia, AMD et d’autres matériels.

vLLM est un moteur d’inférence de LLM (Large Language Model) rapide et facile à utiliser. Il est conçu pour servir les LLM avec un débit élevé et une faible latence. vLLM utilise Paged Attention pour gérer efficacement la mémoire et accélérer l’inférence.

TensorRT LLM est une bibliothèque de NVIDIA pour accélérer l’inférence des LLM sur les GPU NVIDIA. Elle offre des optimisations avancées pour les LLM, notamment la quantification, la compression et la fusion de noyaux.

SGLang est un framework pour la programmation structurée des LLM. Il permet aux développeurs de créer des applications LLM complexes en définissant des étapes structurées pour l’interaction avec les LLM.

PyTorch est un framework d’apprentissage automatique populaire qui peut être utilisé pour déployer des LLM. Il offre une grande flexibilité et un large éventail de fonctionnalités pour la personnalisation et l’optimisation des LLM.

Le choix du moteur d’inférence dépend des exigences spécifiques du cas d’utilisation. vLLM est un bon choix pour les déploiements qui nécessitent un débit élevé et une faible latence. TensorRT LLM est un bon choix pour les déploiements qui nécessitent des performances maximales sur les GPU NVIDIA. SGLang est un bon choix pour les applications LLM complexes qui nécessitent une programmation structurée. PyTorch est un bon choix pour les déploiements qui nécessitent une grande flexibilité et un large éventail de fonctionnalités.

Préparation de l’environnement Kubernetes

La configuration d’un environnement Kubernetes pour travailler avec des GPU nécessite des pilotes et des dépendances supplémentaires par rapport à une configuration Kubernetes typique. Le processus de configuration sera différent pour le matériel AMD et Nvidia.

Ce guide utilise K3S dans une configuration à nœud unique. Les étapes de base sont similaires aux environnements à nœuds multiples, mais les dépendances doivent être satisfaites sur chaque nœud de travail GPU, et la configuration du stockage peut nécessiter des ajustements.

L’objectif est de fournir une base solide pour le déploiement de charges de travail d’inférence d’une manière conviviale pour la production. Les conditions préalables suivantes sont requises :

  • Un serveur ou une station de travail avec au moins une carte GPU AMD ou Nvidia prise en charge
  • Une nouvelle installation d’Ubuntu 24.04 LTS

La préparation de l’environnement Kubernetes implique plusieurs étapes importantes. Tout d’abord, il est nécessaire d’installer un runtime de conteneur, tel que Docker ou containerd. Ces runtimes permettent de créer et de gérer des conteneurs, qui sont des environnements d’exécution isolés pour les applications.

Ensuite, il est nécessaire d’installer Kubernetes lui-même. Il existe plusieurs distributions de Kubernetes disponibles, telles que Minikube, Kind et K3s. Minikube est une distribution légère conçue pour les environnements de développement locaux, tandis que Kind est une distribution plus avancée conçue pour les environnements de test. K3s est une distribution légère conçue pour les environnements de production à faible ressource.

Une fois Kubernetes installé, il est nécessaire de configurer le réseau. Kubernetes utilise un réseau overlay pour connecter les conteneurs entre eux. Il existe plusieurs plugins réseau disponibles, tels que Calico, Flannel et Cilium. Calico est un plugin réseau performant et flexible, tandis que Flannel est un plugin réseau simple et facile à configurer. Cilium est un plugin réseau avancé qui offre des fonctionnalités de sécurité supplémentaires.

Enfin, il est nécessaire de configurer le stockage. Kubernetes utilise des volumes pour stocker les données persistantes. Il existe plusieurs types de volumes disponibles, tels que les volumes locaux, les volumes NFS et les volumes cloud. Les volumes locaux sont stockés sur le même nœud que le conteneur, tandis que les volumes NFS sont stockés sur un serveur NFS distant. Les volumes cloud sont stockés sur un service de stockage cloud, tel que Amazon S3 ou Google Cloud Storage.

Dépendances Nvidia

La configuration d’un environnement K3S accéléré par Nvidia nécessite l’installation des pilotes CUDA Fabric Manager et des pilotes de serveur sans tête. Installez les utilitaires de serveur Nvidia pour déboguer les problèmes de pilote.

Pour installer les pilotes CUDA, il est nécessaire de télécharger le package d’installation à partir du site Web de Nvidia et de l’exécuter. L’installation des pilotes CUDA peut prendre un certain temps, car elle implique la compilation de modules du noyau.

Une fois les pilotes CUDA installés, il est nécessaire d’installer le Fabric Manager. Le Fabric Manager est un outil qui permet de gérer les GPU Nvidia. Il peut être utilisé pour surveiller l’utilisation des GPU, configurer les paramètres des GPU et diagnostiquer les problèmes des GPU.

Enfin, il est nécessaire d’installer les pilotes de serveur sans tête. Les pilotes de serveur sans tête sont des pilotes qui permettent d’utiliser les GPU Nvidia sans avoir besoin d’un écran. Ils sont nécessaires pour exécuter des applications graphiques sur un serveur.

Une fois toutes les dépendances Nvidia installées, il est possible de déployer des charges de travail d’inférence LLM sur l’environnement K3S accéléré par Nvidia.