Cet article décrit comment exécuter efficacement des charges de travail qui utilisent des nœuds GPU sur un cluster Azure Kubernetes Service (AKS). Apprenez à choisir le bon SKU, à utiliser des nœuds GPU pour entraîner des modèles d’apprentissage automatique et à utiliser des nœuds GPU pour exécuter des inférences sur AKS.
Scénarios
Les charges de travail GPU peuvent être coûteuses à exécuter. Pour éviter des coûts inutiles, sachez quand déployer des nœuds basés sur des GPU dans vos clusters AKS.
Les GPU sont spécialement conçus pour les graphiques, l’IA et l’apprentissage automatique, ainsi que pour des tâches spécialisées, ce qui les rend idéaux pour les charges de travail intensives en calcul. Les CPU gèrent efficacement la logique complexe et les branchements. Les GPU sont optimisés pour le débit. Ils peuvent gérer efficacement les opérations arithmétiques simples et vectorielles.
Pour déterminer quand utiliser des GPU pour des charges de travail AKS, vous devez comprendre l’optimisation des GPU et l’intensité des calculs, mais vous devez également prendre en compte d’autres facteurs. Pour mieux comprendre l’utilisation des GPU pour les charges de travail AKS, examinez les exemples de charges de travail suivants qui bénéficient de nœuds GPU dans un cluster AKS.
Science des données et analyses
Vous pouvez utiliser des GPU pour accélérer le prétraitement des données, l’ingénierie des fonctionnalités et l’entraînement de modèles dans les flux de travail de science des données. Pour utiliser efficacement les GPU, des frameworks comme RAPIDS et Dask GPU étendent des bibliothèques de traitement de données populaires, telles que pandas et scikit-learn.
Les moteurs de requêtes SQL et les bases de données en colonnes accélérés par des logiciels open source (OSS), comme BlazingSQL et HeavyDB, utilisent des GPU pour effectuer rapidement des requêtes et des analyses sur de grands ensembles de données.
Machine Learning et Deep Learning
Des frameworks populaires d’apprentissage automatique et de deep learning comme TensorFlow et PyTorch bénéficient des GPU car ils peuvent accélérer les tâches d’entraînement et d’inférence.
Les modèles de deep learning ont des réseaux neuronaux complexes. Le traitement parallèle sur GPU accélère les calculs du modèle. Les GPU fournissent des multiplications de matrices et des convolutions très efficaces, qui sont des opérations clés dans le deep learning.
Vous pouvez également utiliser des GPU pour accélérer des tâches telles que la classification d’images, la détection d’objets, le traitement du langage naturel et la reconnaissance vocale.
Vision par ordinateur et traitement d’images
Les tâches de vision par ordinateur interprètent les données visuelles pour en extraire des informations significatives. Ces tâches sont de plus en plus courantes dans les applications alimentées par l’IA, les véhicules autonomes, l’imagerie médicale, les systèmes de surveillance et la réalité augmentée. Les GPU utilisent le traitement parallèle, ils peuvent donc gérer efficacement des données d’images à grande échelle et des calculs complexes pour des tâches telles que la détection d’objets, la classification d’images et l’extraction de caractéristiques.
Traitement vidéo et streaming
Les vidéos sont de plus en plus courantes dans les entreprises, de sorte que les organisations ont besoin de matériel alimenté par GPU plutôt que par CPU. Les charges de travail de traitement vidéo, y compris le transcodage, le codage et le streaming, sont intensives en calcul, en particulier si elles contiennent du contenu haute définition ou du contenu 4K. Les GPU fournissent une plate-forme efficace qui offre des expériences vidéo haute performance et à faible latence dans diverses applications, telles que le streaming d’événements sportifs ou de vidéos d’entreprise.
Les nœuds agents activés par GPU offrent une expérience client enrichie dans les environnements de bureau virtuel car ils déchargent les tâches intensives en graphismes sur le GPU. Les capacités de codage et de décodage vidéo accélérées par GPU aident à améliorer le streaming vidéo en temps réel, le transcodage vidéo et l’analyse vidéo.
Pour accélérer les tâches de vision par ordinateur telles que la détection d’objets, le suivi d’objets et le traitement d’images ou de vidéos, vous pouvez utiliser des frameworks comme OpenCV, OpenCL, NVIDIA CUDA et NVIDIA cuDNN.
Les plateformes de jeux et les services de cloud gaming dépendent des GPU pour offrir des graphismes de haute qualité et des expériences de jeu fluides.
Calcul haute performance
Les applications de calcul haute performance (HPC) nécessitent souvent des simulations complexes, des analyses numériques et des calculs scientifiques. Pour exécuter rapidement ces tâches, vous pouvez utiliser des GPU pour paralléliser la charge de travail sur plusieurs cœurs. Des exemples d’applications HPC qui nécessitent une puissance de traitement parallèle massive incluent les simulations scientifiques, les prévisions météorologiques, la dynamique des fluides computationnelle et la modélisation moléculaire. Les GPU sont idéaux pour les calculs parallèles et accélèrent considérablement les charges de travail HPC. Les efforts scientifiques et de recherche bénéficient des GPU.
Pour accélérer les applications HPC, des frameworks comme NVIDIA CUDA, OpenCL et OpenACC fournissent des API et des bibliothèques activées par GPU.
Analyse génomique et bioinformatique
Les charges de travail des sciences de la santé et de la vie, telles que l’analyse génomique et les applications bioinformatiques, sont de plus en plus courantes. Ces charges de travail impliquent le traitement de données génétiques, telles que les séquences d’ADN et les structures protéiques, et nécessitent des algorithmes complexes pour l’alignement de séquences, l’appel de variantes et l’exploration de données génomiques. Les GPU accélèrent les flux de travail d’analyse génomique afin que les chercheurs puissent traiter les données et découvrir des informations plus rapidement.
Tenez compte des implications en termes de coûts avant de déployer des nœuds GPU dans des clusters AKS. Comprenez l’optimisation des GPU pour des tâches intensives en calcul comme la vision par ordinateur, le traitement vidéo, le HPC et les tâches d’analyse génomique. Tenez compte de ces facteurs lorsque vous comparez les ressources GPU aux ressources CPU dans les clusters AKS.
Modèles d’IA générative
Les grands modèles de langage (LLM), comme OpenAI GPT, Meta Llama, Falcon ou Mistral, peuvent tirer parti des capacités de traitement parallèle des GPU. Utilisez des GPU avec ces modèles pour améliorer les performances.
Les GPU peuvent accélérer les tâches d’entraînement et d’inférence, qui impliquent des calculs complexes et de grandes quantités de données. Les GPU ont des capacités de traitement parallèle qui divisent les grandes tâches de calcul d’un modèle donné en sous-tâches plus petites qui s’exécutent simultanément. Ce processus offre des résultats rapides et améliore les performances.
Les modèles de langage ont souvent des réseaux neuronaux complexes avec plusieurs couches et paramètres, ce qui peut augmenter la demande en calcul. Les GPU accélèrent les opérations clés du traitement du langage, telles que la multiplication des matrices et les convolutions, ce qui accélère les temps d’entraînement et d’inférence.
Les GPU fournissent une capacité de mémoire, une bande passante et une puissance de traitement suffisantes pour gérer des applications basées sur les LLM qui ont des interfaces conversationnelles et la génération de texte. Par exemple, les améliorations des GPU offrent des temps de réponse rapides aux utilisateurs qui interagissent avec des chatbots et des assistants IA.
Toutes les charges de travail ne bénéficient pas des nœuds agents activés par GPU, et dans certains cas, les CPU sont suffisants. Par exemple, les charges de travail qui sont principalement limitées par les entrées et sorties ou qui ne nécessitent pas de calcul intensif peuvent ne pas s’améliorer avec les GPU.
Témoignages client
De nombreux clients Microsoft tirent parti des charges de travail GPU pour innover pour leurs clients. Penchez-vous sur les exemples suivants :
Bonnes pratiques de déploiement des charges de travail GPU
AKS propose différentes options pour déployer des pools de nœuds Linux et Windows activés par GPU et des charges de travail. Pour assurer le bon fonctionnement de votre charge de travail GPU, suivez ces bonnes pratiques.
Déploiement de charges de travail Linux
Créez un pool de nœuds avec une machine virtuelle (VM) activée par GPU prise en charge et installez manuellement le plugin de périphérique NVIDIA pour déployer des pools de nœuds Linux activés par GPU. Cette méthode ne prend pas en charge la mise à jour d’un pool de nœuds existant pour ajouter des GPU.
Consultez les VM activées par GPU prises en charge dans Azure. Nous vous recommandons d’utiliser une taille minimale de Standard_NC6s_v3 pour les pools de nœuds AKS. AKS ne prend pas en charge la série NVv4 basée sur des GPU AMD.
Comprenez les limitations lorsque vous utilisez un pool de nœuds Linux activé par GPU Azure. Les correctifs de sécurité automatiques ne sont pas appliqués et le comportement par défaut du cluster est non géré.
Utilisez les sélecteurs de nœuds Kubernetes, l’affinité de nœud, les taints (rejets) et les tolerations (tolérances) lorsque vous planifiez des charges de travail sur vos pools de nœuds activés par GPU.
Déploiement de charges de travail Windows
Créez un pool de nœuds avec une VM activée par GPU prise en charge pour déployer des pools de nœuds Windows activés par GPU. AKS installe automatiquement les pilotes et les composants NVIDIA nécessaires. Cette méthode ne prend pas en charge la mise à jour d’un pool de nœuds existant pour ajouter des GPU.
Lorsque vous sélectionnez une VM activée par GPU prise en charge, AKS installe automatiquement le pilote NVIDIA CUDA ou GRID approprié. Certaines charges de travail dépendent d’un pilote spécifique, ce qui peut affecter votre déploiement. Pour les tailles de VM de la série NC et ND, AKS installe le pilote CUDA. Pour les tailles de VM de la série NV, AKS installe le pilote GRID.
Consultez les VM activées par GPU prises en charge dans Azure. Nous vous recommandons d’utiliser une taille minimale de Standard_NC6s_v3 pour les pools de nœuds AKS. AKS ne prend pas en charge la série NVv4 basée sur des GPU AMD.
Comprendre les limitations lorsque vous utilisez un pool de nœuds Windows. Les versions Kubernetes 1.28 et inférieures ne prennent pas en charge les GPU Windows.
Utilisez les sélecteurs de nœuds Kubernetes, l’affinité de nœud, les taints (rejets) et les tolerations (tolérances) lorsque vous planifiez des charges de travail sur vos pools de nœuds activés par GPU.
Remarque
Le GPU Windows est une fonctionnalité en avant-première. Vous devez enregistrer l’indicateur de fonctionnalité WindowsGPUPreview
.
Opérateur NVIDIA GPU
L’opérateur NVIDIA GPU est un outil que vous pouvez utiliser pour déployer et gérer efficacement les ressources GPU au sein des clusters Kubernetes. Vous pouvez utiliser l’opérateur pour automatiser l’installation, la configuration et la maintenance des composants logiciels. Cette approche garantit l’utilisation optimale des GPU NVIDIA pour des charges de travail exigeantes, telles que les charges de travail d’IA et d’apprentissage automatique.
L’opérateur NVIDIA GPU gère automatiquement tous les composants logiciels NVIDIA dont vous avez besoin pour déployer des GPU, tels que le plugin de périphérique NVIDIA pour Kubernetes et le runtime de conteneur NVIDIA. L’opérateur installe automatiquement le pilote. Pour plus d’informations, consultez la vue d’ensemble NVIDIA.
Si vous souhaitez un contrôle accru et une flexibilité pour des charges de travail GPU avancées, vous pouvez utiliser l’opérateur NVIDIA GPU avec vos nœuds activés par GPU sur AKS. L’opérateur NVIDIA GPU ne prend pas en charge les GPU Windows.
Envisagez les meilleures pratiques suivantes :
Utilisez l’opérateur NVIDIA GPU pour effectuer des configurations GPU avancées, telles que la sélection de version de pilote et le partage temporel.
Évitez l’installation automatique du pilote avant d’utiliser l’opérateur GPU.
Définissez le nombre minimum à 1 lorsque vous utilisez l’opérateur GPU avec le module de mise à l’échelle automatique de cluster.
Remarque
Microsoft ne prend pas en charge ni ne gère la maintenance et la compatibilité des pilotes NVIDIA dans le cadre du déploiement de l’image de nœud lorsque vous utilisez l’opérateur GPU.
Déploiement de charges de travail GPU pour les LLM
L’opérateur de chaîne d’outils AI Kubernetes (KAITO) est un opérateur Kubernetes qui simplifie la façon dont vous exécutez des LLM open source, comme Falcon et Llama2, sur votre cluster Kubernetes. Vous pouvez déployer KAITO sur votre cluster AKS en tant que module complémentaire géré pour AKS. KAITO utilise Karpenter pour approvisionner et déployer automatiquement des nœuds GPU en fonction d’une spécification dans la définition de ressource personnalisée de l’espace de travail de votre modèle choisi. KAITO crée le serveur d’inférence comme point de terminaison pour votre LLM et réduit le temps d’intégration global afin que vous puissiez effectuer des opérations d’apprentissage automatique plutôt que la configuration et la maintenance de l’infrastructure.
Pour améliorer les opérations d’apprentissage automatique, KAITO offre les capacités suivantes :
Gestion d’image de conteneur : utilisez des images de conteneur pour gérer les LLM. KAITO fournit un serveur HTTP afin que vous puissiez utiliser une bibliothèque de modèles pris en charge pour effectuer des appels d’inférence.
Configuration matérielle GPU : KAITO fournit des configurations prédéfinies qui sont automatiquement appliquées en fonction des besoins du modèle. Vous n’avez pas besoin de régler manuellement les paramètres de déploiement pour adapter le matériel GPU.
Approvisionnement automatique de nœuds GPU : KAITO approvisionne automatiquement des nœuds GPU en fonction des besoins du modèle et recommande des tailles de VM GPU moins coûteuses pour configurer des inférences distribuées.
Intégration avec Microsoft Artifact Registry : si votre licence LLM le permet, KAITO peut héberger des images de modèles dans le public Artifact Registry. Cette méthode simplifie l’accès et le déploiement des modèles pris en charge. Pour les modèles open source avec des licences MIT ou Apache2 que le référentiel KAITO ne prend pas en charge, vous pouvez soumettre une demande pour l’intégration d’un nouveau modèle.
Pour plus d’informations sur KAITO, consultez les ressources suivantes :
- Explorer le projet open source KAITO
- Déployer un modèle AI sur AKS avec KAITO
- Peaufiner vos modèles de langage avec KAITO open source
- Déployer KAITO sur AKS en utilisant Terraform
Mise à l’échelle des charges de travail et des clusters
Pour les scénarios d’IA et d’apprentissage automatique, vous devez différencier les charges de travail d’entraînement et les inférences avec des modèles pré-entraînés. Pour créer et entraîner votre modèle de deep learning, envisagez d’utiliser des ressources de calcul GPU conçues pour le deep learning et la parallélisation des calculs IA. L’entraînement nécessite souvent une montée en charge progressive et la distribution de grandes quantités de données sur les GPU pour obtenir une grande précision grâce au parallélisme des données.
Le partitionnement de modèle est une technique avancée courante que vous pouvez utiliser pour diviser les étapes de l’entraînement de modèle. Vous pouvez affecter des GPU à des tâches distinctes et maximiser leur utilisation. Les GPU peuvent évoluer verticalement et horizontalement pour des charges de travail HPC, telles que les VM des séries NV ou ND sur Azure. Cette capacité aide à maintenir une utilisation élevée des ressources et à réduire l’intervention de l’utilisateur pour les processus d’entraînement d’apprentissage automatique qui sont longs et coûteux.
Vous pouvez également utiliser des modèles d’IA et d’apprentissage automatique open source pré-entraînés uniquement pour les inférences. Commencez avec des modèles populaires comme Llama, Falcon ou Mistral comme une option plus rapide et plus rentable par rapport à la création et à l’entraînement d’un LLM à partir de zéro. Pour plus d’informations, consultez Modèles de langage sur AKS.
Lorsque vous utilisez des modèles pré-entraînés pour les inférences, vous pouvez rencontrer une utilisation dynamique et fluctuante des ressources, en fonction du volume de données que vous traitez. Lorsque vous exécutez des données en temps réel via votre modèle choisi, des pics de trafic se produisent parfois en fonction de la taille et des exigences du modèle. Vous devez maintenir un faible niveau de latence acceptable tout au long du processus d’inférence. Pour utiliser efficacement vos GPU pour des performances élevées et une faible latence, vous pouvez effectuer des inférences distribuées avec les modèles que KAITO prend en charge. Cette approche élargit vos options de calcul pour inclure des SKU avec un faible nombre de GPU, qui ont un ou deux GPU chacun, offre une haute disponibilité dans les régions Azure et réduit les coûts de maintenance.
Gestion des coûts des charges de travail GPU
Les GPU peuvent augmenter les coûts. Surveillez correctement les charges de travail pour comprendre les coûts gpu et identifier les opportunités d’optimisation. Pour augmenter la visibilité des coûts, vous pouvez utiliser le module complémentaire analyse des coûts AKS.
Les scénarios suivants bénéficient de la visibilité des coûts.
Coût de taille de VM activée par GPU
Sélectionnez la bonne taille de VM activée par GPU pour optimiser le coût d’exécution des GPU. Les coûts quotidiens peuvent varier en fonction de la taille de VM que vous choisissez. Les GPU A100 sont coûteux. Vous devriez les éviter à moins que votre charge de travail n’ait des exigences spécifiques. L’analyse des coûts AKS montre le coût quotidien pour chacune de vos VM et détaille les coûts associés à chaque charge de travail exécutée sur la VM activée par GPU. Utilisez ces données pour évaluer si vous avez une taille de VM appropriée ou si vous avez besoin d’une option plus rentable.
Coût d’inactivité
Après avoir créé un pool de nœuds activé par GPU, vous engagez des coûts sur la ressource Azure même si vous n’exécutez pas de charge de travail GPU. Les coûts d’inactivité représentent le coût de la capacité de ressource disponible que les charges de travail n’utilisent pas. Ce coût s’accumule rapidement si vous avez plusieurs nœuds inutilisés. Pour éviter des coûts d’inactivité élevés, créez des pools de nœuds uniquement lorsque vous exécutez votre charge de travail, et utilisez des méthodes telles que la fonction d’arrêt de cluster lorsque vous n’exécutez pas votre charge de travail. L’analyse des coûts AKS montre les coûts d’inactivité pour chacun de vos nœuds.
Surapprovisionnement et sous-utilisation
Le surapprovisionnement se produit lorsque vous allouez plus de ressources que nécessaire pour un pod. Le surapprovisionnement entraîne un gaspillage de ressources et une sous-utilisation. Des ressources excédentaires restent réservées pour le nœud même si vous ne les utilisez pas. Pour réduire le surapprovisionnement, utilisez la mise à l’échelle automatique verticale des pods pour définir des requêtes et des limites précises en fonction des schémas d’utilisation précédents.
La sous-utilisation peut se produire lorsque vos charges de travail n’utilisent pas pleinement les GPU. Envisagez des techniques avancées de partage et de partitionnement des GPU. Plutôt que d’utiliser plusieurs nœuds, vous pourriez utiliser un seul nœud avec partitionnement pour maximiser l’utilisation des GPU. Ces techniques peuvent vous aider à allouer la quantité appropriée d’accélération GPU pour chaque charge de travail, ce qui peut améliorer l’utilisation et réduire les coûts opérationnels de déploiement.
Les déploiements de charges de travail Linux sur AKS prennent en charge les GPU à instances multiples. Utilisez cette fonctionnalité pour partitionner un GPU NVIDIA A100 en jusqu’à sept instances indépendantes. Chaque instance a sa propre mémoire et son multiprocesseur de flux.
NVIDIA prend en charge d’autres techniques de partitionnement, telles que le partage temporel et l’implémentation de service multiprocesseur. Pour appliquer manuellement ces configurations, utilisez l’opérateur NVIDIA GPU.
Pour des scénarios avancés, vous pouvez améliorer l’optimisation des ressources sur vos nœuds. Vous pouvez définir des configurations de planificateur et exécuter un deuxième planificateur. Configurez et maintenez un planificateur secondaire pour utiliser des stratégies de placement de charges de travail différentes de celles du planificateur AKS par défaut. Pour plus d’informations, consultez Configurer plusieurs planificateurs sur Kubernetes.
Contributeurs
Cet article est géré par Microsoft. Il a été écrit à l’origine par les contributeurs suivants.
Auteur principal :
- Ayobami Ayodeji | Responsable de programme senior
Autres contributeurs :
- Steve Buchanan | Responsable de programme principal
- Sachi Desai | Chef de produit
- Ally Ford | Chef de produit 2
- Paolo Salvatori | Ingénieur des services principaux
- Erin Schaffer | Développeur de contenu 2
Pour afficher les profils LinkedIn non publics, connectez-vous à LinkedIn.
Étapes suivantes
- Apportez vos propres modèles d’IA aux applications intelligentes sur AKS avec KAITO
- Déployer un modèle AI sur AKS avec KAITO
- Déployer une application qui utilise OpenAI sur AKS
- Déployer KAITO sur AKS en utilisant Terraform
- Déployer l’extension Azure Machine Learning sur AKS ou des clusters Kubernetes activés par Azure Arc
- En savoir plus sur le catalogue de modèles et les collections sur Azure
- Utiliser des GPU pour les pools de nœuds Windows sur AKS
- Utiliser des GPU sur AKS