Stratégies de partitionnement de nœuds GPU dans Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) prend en charge les pools de nœuds compatibles GPU NVIDIA pour exécuter des charges de travail nécessitant beaucoup de ressources de calcul, notamment l’apprentissage IA/ML, l’inférence en temps réel et l’analytique des données à grande échelle. Traditionnellement, les GPU sont alloués dans un modèle un-à-un, où un seul pod Kubernetes consomme un appareil GPU entier au sein d’une machine virtuelle Azure. Bien que ce modèle offre une simplicité et une isolation forte, il peut entraîner une sous-utilisation dans les scénarios où les charges de travail ne consomment pas entièrement les ressources GPU disponibles dans le cluster.

Pour améliorer l’utilisation et prendre en charge les charges de travail simultanées, les clients peuvent intégrer différentes stratégies de partitionnement GPU sur leur ou leurs pools de nœuds. Ces approches permettent à plusieurs charges de travail de partager un gpu physique unique en le divisant en unités logiques plus petites ou en développant l’accès au niveau du pilote GPU ou logiciel.

Dans cet article, vous allez découvrir les trois stratégies de partitionnement de nœud principal pour les GPU NVIDIA dans AKS : GPU multi-instance (MIG),le découpage temporel et le service multiprocesseur (MPS).

Vue d’ensemble des stratégies de partitionnement de nœuds GPU dans AKS

Les trois principales stratégies disponibles dans les environnements AKS sont LE GPU multi-instance (MIG), le découpage temporel et le service multiprocesseur (MPS). Chaque approche diffère en termes de gestion de plateforme AKS, de type d’isolation et de cas d’usage de déploiement.

Strategy Géré ou autorisé sur AKS Type de partage GPU Recommandé pour
GPU à instances multiples (MIG) Géré (ou géré par l’utilisateur via l’opérateur GPU) Partitionnement matériel Charges de travail de production
Découpage temporel (via l’opérateur GPU NVIDIA) Géré par l’utilisateur, AKS autorisé Planification logicielle Expérimentation avec des charges GPU variables
Service multiprocesseur (MPS, opérateur GPU NVIDIA) Géré par l’utilisateur, AKS autorisé Multiplexage de processus au niveau CUDA Charges de travail à faible latence et à débit élevé

GPU multi-instance managé (MIG) sur AKS

Le GPU multi-instance (MIG) est une fonctionnalité de partitionnement basée sur le matériel disponible sur certaines architectures GPU NVIDIA, telles que A100, H100 et H200. MIG permet à un gpu physique unique d’être divisé en plusieurs instances isolées, chacune avec des cœurs de calcul dédiés, de la mémoire et du cache. Cela garantit une isolation forte des charges de travail et des caractéristiques de performances prévisibles, ce qui rend MIG adapté aux environnements de production.

Dans AKS, MIG est une fonctionnalité gérée. Lorsqu’un pool de nœuds compatible MIG est approvisionné, Azure configure le matériel GPU, installe et gère la pile de pilotes requise et intègre des instances MIG avec Kubernetes via le plug-in d’appareil NVIDIA. Chaque tranche MIG est exposée au planificateur Kubernetes en tant que ressource allocatable discrète, ce qui permet aux pods de demander la capacité GPU de manière granulaire et déterministe.

Cette approche offre plusieurs avantages pour les déploiements d’entreprise. Il fournit une isolation de niveau production via le partitionnement au niveau du matériel et réduit la surcharge opérationnelle en déléguant la gestion du cycle de vie, y compris les mises à jour et la configuration des pilotes, à AKS. En outre, les instances MIG se comportent en tant qu’appareils GPU indépendants du point de vue du planificateur, ce qui permet un placement prévisible et une allocation de ressources.

Toutefois, MIG introduit également certaines contraintes : les configurations de partitionnement sont statiques au niveau du pool de nœuds, ce qui signifie que les modifications nécessitent une reprovisionnement de nœud. La flexibilité est limitée aux profils MIG prédéfinis pris en charge par le matériel GPU sous-jacent.

Découpage temporel avec l’opérateur GPU NVIDIA (géré par l’utilisateur)

Le découpage temporel est un mécanisme de partage GPU basé sur le logiciel qui permet à plusieurs pods Kubernetes de partager un seul GPU en interlacant l’exécution au fil du temps. Cette approche est implémentée via l’opérateur GPU NVIDIA, qui gère les pilotes GPU, le plug-in d’appareil Kubernetes et la configuration du runtime de conteneur.

Le découpage temporel peut être configuré sur des pools de nœuds AKS, mais pas gérés par la plateforme. Les opérateurs de cluster sont responsables du déploiement et de la configuration de l’opérateur GPU NVIDIA, généralement par le biais de Helm, et de l’activation du découpage temporel via les paramètres du plug-in d’appareil. Une fois configurés, plusieurs pods peuvent demander l’accès à la même ressource GPU et leurs charges de travail sont planifiées de manière partagée dans le temps.

Le découpage temporel offre une flexibilité et une compatibilité étendue, car il ne dépend pas des fonctionnalités matérielles GPU spécifiques et peut être utilisé avec la plupart des GPU NVIDIA pris en charge par CUDA. Il est utile pour le développement, les tests ou les charges de travail présentant des profils d’utilisation du GPU irréguliers ou variables.

Malgré sa flexibilité, le découpage temporel ne fournit pas d’isolation au niveau du matériel. Toutes les charges de travail partagent la même mémoire GPU et les mêmes ressources de calcul, ce qui peut entraîner des conflits et des performances imprévisibles. Étant donné que la configuration et la gestion du cycle de vie sont pilotées par l’utilisateur, les opérateurs doivent également gérer les mises à jour, la compatibilité et le réglage des pilotes. Par conséquent, le découpage temporel n’est généralement pas recommandé pour les charges de travail de production qui nécessitent des contrats de niveau de service stricts (SLA).

Service multiprocesseur (MPS) avec opérateur GPU NVIDIA (géré par l’utilisateur)

NVIDIA Multi-Process Service (MPS) est une fonctionnalité de niveau pilote qui permet à plusieurs applications CUDA de s’exécuter simultanément sur un seul GPU. Contrairement au découpage temporel, qui alterne l’exécution entre les charges de travail, MPS permet aux noyaux de différents processus de s’exécuter simultanément, d’améliorer l’utilisation globale du GPU et de réduire la latence pour les charges de travail compatibles.

Dans AKS, MPS peut être configuré via le déploiement géré par l’utilisateur de l’opérateur GPU NVIDIA. Les opérateurs doivent configurer l’environnement de pilote GPU pour activer MPS et gérer le cycle de vie du démon de contrôle MPS. Les charges de travail qui se connectent au même serveur MPS peuvent partager le GPU et tirer parti de l’exécution simultanée du noyau.

MPS est utile pour les scénarios à débit élevé et à faible latence, tels que les travaux par lots ou les charges de travail parallèles étroitement couplées. Il fournit un contrôle précis sur le partage GPU et peut améliorer considérablement l’utilisation lorsque les charges de travail sont conçues pour tirer parti de l’exécution simultanée.

Toutefois, MPS introduit une complexité opérationnelle supplémentaire. La configuration est manuelle et la résolution des problèmes peut être plus impliquée par rapport à d’autres approches. Comme pour le découpage temporel, MPS ne fournit pas d’isolation forte, car tous les processus partagent la mémoire GPU et les ressources de calcul. Par conséquent, MPS n’est généralement pas recommandé pour les charges de travail de production qui nécessitent des contrats de niveau de service stricts (SLA).

Comment choisir une stratégie de partitionnement GPU

Le choix de la stratégie de partitionnement GPU appropriée dans AKS dépend des exigences de charge de travail, des préférences opérationnelles et des attentes en matière de performances. MIG est l’approche recommandée pour les environnements de production qui nécessitent une isolation forte et des performances prévisibles. En tant que fonctionnalité de pool de nœuds AKS, MIG simplifie les opérations et réduit la surcharge administrative.

Le découpage temporel est utile pour les environnements ou charges de travail hors production avec une demande GPU fluctuante, où l’optimisation de l’utilisation est plus importante que la cohérence. Il fournit une solution indépendante du matériel, mais nécessite une gestion minutieuse et ne garantit pas l’isolation des performances.

MPS est idéal pour les charges de travail spécialisées qui bénéficient de l’exécution simultanée du GPU et de la faible latence. Il offre l’efficacité d’utilisation potentielle la plus élevée, mais offre une complexité accrue et une isolation minimale, ce qui le rend le plus approprié pour les utilisateurs avancés avec des applications prenant en charge CUDA.

En pratique, les organisations peuvent adopter différentes stratégies selon les environnements, en recourant à MIG pour les clusters de production tout en tirant parti du partage temporel ou de MPS dans des scénarios de développement ou d’expérimentation. Une évaluation minutieuse des caractéristiques de charge de travail GPU et des contraintes opérationnelles est essentielle pour sélectionner l’approche de partitionnement à long terme la plus efficace.