Aidez à améliorer cette page
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien Modifier cette page qui se trouve dans le volet droit de chaque page.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utiliser des GPU multi-instances (MIG) avec des GPU NVIDIA sur Amazon EKS
Multi-Instance Le GPU
Le MIG convient parfaitement à l'inférence multi-tenant et aux charges de travail nécessitant une qualité de service prévisible. Il est disponible sur les GPU NVIDIA Ampere (A100), Hopper (H100 et H200) et Blackwell. AWS Activé, il s'agit des types d' P-family g7einstance Blackwell-based g7 et des types d'instances. Pour obtenir la liste complète, consultez MIG-capable types d'instances.
Le MIG convient parfaitement lorsque :
-
Vous devez isoler la mémoire afin qu'une charge de travail ne puisse pas consommer la mémoire GPU requise par une autre charge de travail.
-
Vous exécutez une inférence multilocataire dans le cadre de laquelle les locataires partagent du matériel GPU mais exigent une qualité de service par locataire.
-
Vous exécutez déjà des formations sur des instances A100, H100, H200 ou Blackwell et vous souhaitez réutiliser ces GPU pour réduire les charges de travail d'inférence lorsque la formation est inactive.
Envisagez une approche différente lorsque :
-
Vos nœuds utilisent un type d'instance GPU qui ne prend pas en charge le MIG, tel que les
g6efamillesg5g6, ou. Utilisez plutôt le découpage en tranches temporelles. -
Vous n'avez pas besoin d'isolation de la mémoire et souhaitez la configuration la plus simple. Utilisez plutôt le découpage en tranches temporelles.
-
Vous devez changer fréquemment les partitions du GPU sans interruption. La modification du mode MIG ou de la disposition des partitions nécessite une réinitialisation du GPU, que l'opérateur GPU effectue en redémarrant le nœud.
-
Vous exécutez un entraînement multi-GPU qui dépend de la communication collective ou pair à pair entre les GPU. Le MIG ne prend pas en charge le NCCL ou le P2P inter-GPU.
Considérations
Prenez en compte les points suivants avant d'utiliser MIG en production.
Considérations d’ordre général
-
La modification de la configuration MIG nécessite une réinitialisation du GPU. L'activation ou la désactivation du mode MIG, ou la modification de la disposition des partitions, nécessitent une réinitialisation du GPU. Il ne peut donc pas être modifié sur place. Par exemple, le MIG Manager de l'opérateur GPU NVIDIA applique une modification de configuration en arrêtant les modules GPU du nœud et en redémarrant le nœud lorsqu'un redémarrage est nécessaire pour changer de mode MIG.
-
Le calcul n'est pas strictement proportionnel à la taille de l'instance. Une
1ginstance ne fournit pas une part proportionnelle du débit de l'ensemble du GPU pour chaque charge de travail, car la bande passante mémoire et le comportement du cache diffèrent selon les profils. Comparez votre charge de travail au profil que vous comptez utiliser avant de dimensionner les partitions. -
Time-slicing n'a aucun effet sur les instances MIG. Une instance MIG est déjà isolée matériellement et ne peut plus être partagée par tranches temporelles. La demande de stratégie de
TimeSlicingpartage sur un périphérique MIG ne modifie pas le comportement du matériel. Pour partager une seule instance MIG sur plusieurs conteneurs, utilisez plutôt NVIDIA Multi-Process Service (MPS). -
Communication inter-GPU limitée. Lorsque MIG est activé, les instances MIG sur différents GPU ne peuvent pas utiliser la communication GPU-to-GPU peer-to-peer (P2P) et NCCL ne fonctionne pas avec MIG. Multi-GPU les charges de travail qui dépendent de la communication collective ou du P2P entre les GPU, comme l'entraînement multiGPU en parallèle aux tenseurs, nécessitent plutôt des GPU complets. Pour plus de détails, consultez les considérations relatives à
l'application dans le guide de l'utilisateur NVIDIA MIG sur le site Web de NVIDIA.
Considérations relatives aux plug-ins pour appareils NVIDIA
-
Les demandes de ressources du pod doivent correspondre à la stratégie. Avec la stratégie unique, Pods demande
nvidia.com/gpu. Avec la stratégie mixte, les pods demandent la ressource spécifique au profil, telle que.nvidia.com/mig-1g.10gbUn pod qui demande un profil que le nœud n'annonce pas reste dansPendingcet état. Confirmez les ressources annoncées aveckubectl describe node <node-name>. -
Plug-in d'appareil autonome sur AL2023. Si vous installez le plug-in de périphérique NVIDIA séparément, par exemple dans le cadre de la configuration du cluster, excluez-le de vos nœuds MIG afin qu'il n'entre pas en conflit avec le plug-in de périphérique géré par l'opérateur GPU. Ajoutez une règle d'affinité de nœud au plug-in de l'appareil autonome qui exclut les nœuds
nvidia.com/mig.configportant l'étiquette. -
Aucune assistance en mode automatique EKS. Le mode EKS Auto gère le plug-in du périphérique NVIDIA et n'expose pas sa configuration (voirDéploiement d’une charge de travail accélérée). Vous ne pouvez pas activer MIG sur les nœuds EKS Auto Mode. Configurez MIG sur des nœuds Karpenter autogérés ou sur un groupe de nœuds géré, dans lequel vous contrôlez les paramètres de l'AMI et du plug-in de l'appareil.
Considérations relatives au pilote NVIDIA DRA
-
Le MIG statique nécessite des instances pré-créées. Avec le MIG statique, le pilote DRA alloue les instances MIG existantes mais n'active pas le mode MIG et ne partitionne pas les GPU. Vous devez d'abord activer le mode MIG et créer les instances, par exemple avec le MIG Manager dans le NVIDIA GPU Operator ou.
nvidia-smiPour de plus amples informations, veuillez consulter Utiliser MIG avec le pilote NVIDIA DRA. -
Dynamic MIG est une fonctionnalité alpha. Avec le MIG dynamique, le pilote crée et détruit des partitions MIG à la demande en réponse aux demandes de charge de travail. Elle nécessite le
DynamicMIGFeature Gate, qui est désactivé par défaut. Pour de plus amples informations, veuillez consulter Utiliser MIG avec le pilote NVIDIA DRA. -
Désactivez le plug-in intégré à l'appareil sur Bottlerocket. Le pilote DRA ne peut pas fonctionner en même temps que le plug-in de périphérique NVIDIA sur le même nœud. Sur Bottlerocket, désactivez le plug-in intégré à l'appareil, qui nécessite la version 1.63.0 ou ultérieure de Bottlerocket. Pour de plus amples informations, veuillez consulter Installez le pilote NVIDIA DRA.
-
Support informatique. Le pilote NVIDIA DRA est pris en charge avec le provisionnement de capacité statique dans Karpenter, les groupes de nœuds gérés par EKS ou les nœuds autogérés, et n'est pas pris en charge avec le mode automatique EKS. Pour plus d'informations, consultez la NodePool documentation statique de Karpenter
sur le site Web de Karpenter.
MIG-capable types d'instances
Activé AWS, les types d'instance suivants fournissent des MIG-capable GPU.
| Type d’instance | Processeurs graphiques | Mémoire GPU |
|---|---|---|
|
|
8 cartes NVIDIA A100 40 Go |
320 GO |
|
|
8 cartes NVIDIA A100 de 80 Go |
640 GO |
|
|
8 cartes NVIDIA H100 de 80 Go |
640 GO |
|
|
8 cartes NVIDIA H200 |
128 GO |
|
|
8 cartes NVIDIA H200 |
128 GO |
|
|
8 processeurs NVIDIA Blackwell B200 |
1432 GO |
|
|
8 processeurs NVIDIA Blackwell Ultra B300 |
214 GO |
|
|
8 cartes NVIDIA RTX PRO 4500 Édition serveur Blackwell |
256 Go |
|
|
8 cartes NVIDIA RTX PRO 6000 Édition serveur Blackwell |
768 GO |
Le MIG n'est pas disponible sur les g6e familles g5g6,, ou. Pour p6e-gb200 UltraServers, qui utilisent le GPU MIG-capable NVIDIA GB200, voirÀ utiliser P6e-GB200 UltraServers avec Amazon EKS.
Note
Le type d'g7instance nécessite la version 595 ou ultérieure du pilote NVIDIA. Les AMI EKS-optimized accélérées incluent actuellement la version 580 du pilote NVIDIA. Pour utiliser MIG, g7 vous devez créer une AMI personnalisée avec la version 595 du pilote. Pour de plus amples informations, veuillez consulter Création d'une AMI EKS-optimized Amazon Linux personnalisée.
Les instances MIG sont décrites par des profils qui utilisent le modèle de dénomination<slices>g.<memory>gb, où <slices> est le nombre de tranches de calcul et <memory> la mémoire de l'instance en gigaoctets. Par exemple, le 3g.40gb profil fournit trois des sept tranches de calcul et 40 Go de mémoire. Les profils pris en charge par chaque GPU sont fixés par le matériel. Pour la liste complète, consultez le guide de l'utilisateur du Multi-Instance GPU NVIDIA
Profils MIG par type d'instance
Les profils MIG disponibles sur un nœud dépendent du GPU utilisé pour le type d'instance. Les sections suivantes répertorient les profils pour chaque type d'instance MIG-capable Amazon EC2. Pour chaque profil, le nombre maximum d'instances est le nombre maximum d'instances de ce profil que vous pouvez créer sur un seul GPU, et la mémoire par instance est la mémoire GPU allouée à chacun d'eux.
| Profil | Calculez les tranches | Mémoire par instance | Nombre maximum d'instances |
|---|---|---|---|
|
|
1 sur 7 |
5 Go |
7 |
|
|
1 sur 7 |
10 Go |
4 |
|
|
2 sur 7 |
10 Go |
3 |
|
|
3 sur 7 |
20 Go |
2 |
|
|
4 sur 7 |
20 Go |
1 |
|
|
7 sur 7 |
40 GO |
1 |
| Profil | Calculez les tranches | Mémoire par instance | Nombre maximum d'instances |
|---|---|---|---|
|
|
1 sur 7 |
10 Go |
7 |
|
|
1 sur 7 |
20 Go |
4 |
|
|
2 sur 7 |
20 Go |
3 |
|
|
3 sur 7 |
40 GO |
2 |
|
|
4 sur 7 |
40 GO |
1 |
|
|
7 sur 7 |
80 GO |
1 |
| Profil | Calculez les tranches | Mémoire par instance | Nombre maximum d'instances |
|---|---|---|---|
|
|
1 sur 7 |
10 Go |
7 |
|
|
1 sur 7 |
20 Go |
4 |
|
|
2 sur 7 |
20 Go |
3 |
|
|
3 sur 7 |
40 GO |
2 |
|
|
4 sur 7 |
40 GO |
1 |
|
|
7 sur 7 |
80 GO |
1 |
| Profil | Calculez les tranches | Mémoire par instance | Nombre maximum d'instances |
|---|---|---|---|
|
|
1 sur 7 |
18 GO |
7 |
|
|
1 sur 7 |
35 Go |
4 |
|
|
2 sur 7 |
35 Go |
3 |
|
|
3 sur 7 |
71 GO |
2 |
|
|
4 sur 7 |
71 GO |
1 |
|
|
7 sur 7 |
141 GO |
1 |
| Profil | Calculez les tranches | Mémoire par instance | Nombre maximum d'instances |
|---|---|---|---|
|
|
1 sur 7 |
23 GO |
7 |
|
|
1 sur 7 |
45 GO |
4 |
|
|
2 sur 7 |
45 GO |
3 |
|
|
3 sur 7 |
90 GO |
2 |
|
|
4 sur 7 |
90 GO |
1 |
|
|
7 sur 7 |
180 GO |
1 |
p6-b300,48xlarge — NVIDIA Blackwell Ultra B300
Il p6-b300.48xlarge utilise le HGX B300, qui permet de partitionner chaque GPU en 7 instances de 32 Go, 4 de 67 Go, 2 de 135 Go ou 1 de 270 Go. Ces tailles sont préliminaires et peuvent changer. Pour plus de détails sur les profils, consultez les profils MIG pris en charge par NVIDIA
| Profil | Calculez les tranches | Mémoire par instance | Nombre maximum d'instances |
|---|---|---|---|
|
|
1 sur 2 |
16 Go |
2 |
|
|
2 sur 2 |
32 GO |
1 |
Le RTX PRO 4500 Blackwell prend également en charge les variantes de profil avec fonction graphique (+gfx) et avec moteur multimédia (,). +me.all -me Pour la liste complète, consultez les profils MIG pris en charge par NVIDIA
| Profil | Calculez les tranches | Mémoire par instance | Nombre maximum d'instances |
|---|---|---|---|
|
|
1 sur 4 |
24 GO |
4 |
|
|
2 sur 4 |
48 GO |
2 |
|
|
4 sur 4 |
96 GO |
1 |
Le RTX PRO 6000 Blackwell Server Edition prend également en charge les variantes de profil graphiques (+gfx) et de moteur multimédia (,). +me.all -me Pour la liste complète, consultez les profils MIG pris en charge par NVIDIA
Stratégies MIG
Le pilote NVIDIA DRA et le plug-in de périphérique NVIDIA exposent les instances MIG à Kubernetes de différentes manières. Le plug-in de périphérique utilise un paramètre de stratégie MIG à l'échelle du nœud, tandis que le pilote DRA n'a aucun paramètre équivalent car il sélectionne les instances en fonction de leurs attributs. Comprendre cette différence est essentiel pour choisir entre les deux modèles.
pilote NVIDIA DRA
Le pilote NVIDIA DRA n'utilise pas le concept de stratégie unique ou mixte, et il n'existe aucun paramètre équivalent à configurer. Au lieu de publier les instances MIG en tant que ressources comptées, le pilote publie chaque instance en tant que périphérique dans le mig.nvidia.com DeviceClass avec des attributs tels que le sienprofile. Les pods sélectionnent une instance en faisant correspondre ces attributs aux sélecteurs CEL (Common Expression Language) placés dans un ResourceClaim ouResourceClaimTemplate, comme indiqué dansUtiliser MIG avec le pilote NVIDIA DRA.
Comme la sélection s'effectue par instance, les nœuds à profil mixte fonctionnent sans changement de mode de stratégie. Un seul GPU peut être partitionné en plusieurs profils différents, et chaque demande sélectionne le profil dont elle a besoin. Le choix qui compte pour le pilote DRA n'est pas une stratégie unique ou mixte, mais un MIG statique par rapport à une stratégie MIG dynamique, qui permet de déterminer si vous pré-créez les instances MIG ou si le pilote les crée à la demande. Pour de plus amples informations, veuillez consulter Utiliser MIG avec le pilote NVIDIA DRA.
Plug-in pour appareil NVIDIA
Le plug-in de périphérique NVIDIA annonce les instances MIG à Kubernetes en utilisant l'une des deux stratégies suivantes. Étant donné que le plug-in de périphérique expose les instances MIG en tant que ressources étendues au niveau des nœuds, qui ne comportent qu'un nombre entier et aucun attribut par instance, la stratégie détermine la façon dont ces ressources sont nommées.
-
Stratégie unique : chaque processeur graphique d'un nœud utilise le même profil MIG. Le plug-in de l'appareil annonce chaque instance en tant que
nvidia.com/gpuressource, et les Pods demandentnvidia.com/gpu: 1comme ils le feraient pour un GPU dédié. Les manifestes existants ne changent pas. Bottlerocket et AL2023 soutiennent tous deux la stratégie unique. -
Stratégie mixte : les GPU d'un même nœud peuvent utiliser différents profils MIG. Le plug-in de l'appareil présente chaque profil comme une ressource distincte, telle que
nvidia.com/mig-1g.10gbounvidia.com/mig-3g.40gb, et les Pods demandent le profil spécifique dont ils ont besoin. Vous ne pouvez pas utiliser une stratégie mixte avec le plug-in d'appareil NVIDIA intégré à Bottlerocket. Pour plus d'informations, consultez le GitHub numéro #4483 de Bottlerocket sur.GitHub
Utiliser MIG avec le pilote NVIDIA DRA
Lors de l'allocation d'instances MIG à l'aide du pilote NVIDIA DRA, les Pods demandent une instance MIG via un ResourceClaim ou ResourceClaimTemplate plutôt que la ressource étendue du plug-in de nvidia.com/mig-<profile> l'appareil.
Étant donné que le pilote DRA décrit les instances en fonction de leurs attributs plutôt que comme des ressources comptées, il n'utilise pas la stratégie unique ou mixte requise par le plug-in du périphérique (voirStratégies MIG). Le pilote expose chaque instance MIG en tant que périphérique mig.nvidia.com DeviceClass avec un gpu.nvidia.com/type attribut demig, et annonce des attributs par instance tels que le profile (par exemple1g.5gb) et le parentUUID du GPU physique. Vous associez ces attributs à des sélecteurs CEL (Common Expression Language) pour demander un profil spécifique ou pour conserver plusieurs instances sur le même GPU.
Le pilote DRA alloue les instances MIG selon l'un des deux modes suivants :
-
MIG statique : vous activez le mode MIG et créez les instances MIG sur le nœud avant le démarrage du pilote, par exemple avec le MIG Manager dans l'opérateur GPU NVIDIA, comme décrit dans. Utiliser MIG sur les nœuds AL2023 avec le plug-in de périphérique NVIDIA Le pilote découvre les instances existantes et les alloue aux Pods mais ne modifie pas la configuration MIG du nœud. Les instances ajoutées après le démarrage du pilote ne sont découvertes qu'après le redémarrage du plug-in Kubelet du GPU. Le MIG statique est la valeur par défaut et ne nécessite aucune porte de fonctionnalité.
-
MIG dynamique : le pilote crée et détruit des partitions MIG à la demande en réponse à des demandes de charge de travail. Vous ne partitionnez donc pas les GPU à l'avance. Dynamic MIG est une fonctionnalité alpha désactivée par défaut. Vous demandez un profil avec les mêmes
ResourceClaimTemplatesélecteurs que ceux présentés dans les sections suivantes, et le pilote partitionne un GPU pour répondre à la demande.
Considérations
-
Le MIG dynamique remplace la découverte statique sur un nœud. Le pilote gère toutes les partitions et détruit toutes les partitions MIG qu'il n'a pas créées au démarrage du plug-in GPU Kubelet. N'activez pas le MIG dynamique sur les nœuds contenant des partitions pré-créées que vous souhaitez conserver, et ne l'exécutez pas
mig-partedounvidia-smi migpendant que le plug-in est en cours d'exécution, car les modifications manuelles peuvent entrer en conflit avec l'état de la partition du pilote et entraîner l'échec de la préparation ou du nettoyage du pod. -
Dynamic MIG est en état alpha et nécessite l'activation d'un Feature Gate lors de l'installation du pilote NVIDIA DRA. Consultez Installez le pilote NVIDIA DRA les instructions.
-
Les architectures Hopper (H100 et H200) et versions ultérieures activent le mode MIG à la demande. Les générations précédentes ne peuvent pas activer le mode MIG à la demande, y compris les GPU Ampere (A100).
-
Le MIG dynamique dépend de la fonctionnalité des périphériques partitionnables Kubernetes (activée GitHub), qui est activée par défaut dans KEP-4815
les versions 1.36 et ultérieures de Kubernetes. Dans les versions précédentes, cette fonctionnalité n'est pas activée par défaut, de sorte que le planificateur ne peut pas allouer de périphériques MIG créés dynamiquement.
Conditions préalables
-
Cluster Amazon EKS exécutant Kubernetes version 1.34 ou ultérieure avec une capacité statique provisionnée par Karpenter, des groupes de nœuds gérés par EKS ou des groupes de nœuds autogérés.
-
MIG-capable P-family nœuds sur lesquels le mode MIG est activé et GPU partitionnés en instances MIG. Pour les fichiers MIG statiques, consultez le MIG Manager dans l'opérateur GPU NVIDIA
sur le site Web de NVIDIA. -
Le pilote NVIDIA DRA est installé comme décrit dansInstallez le pilote NVIDIA DRA, éventuellement avec Dynamic MIG activé si vous n'utilisez pas le partitionnement MIG statique.
Procédure
Les exemples suivants peuvent être utilisés avec un MIG statique ou dynamique et le pilote NVIDIA DRA.
-
Créez un
ResourceClaimTemplatequi demande une instance MIG à partir demig.nvidia.comDeviceClass, et un pod qui y fait référence. Cet exemple demande n'importe quelle instance MIG disponible sans restreindre le profil.cat <<EOF | kubectl apply -f - apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: mig-profile-any spec: spec: devices: requests: - name: mig exactly: deviceClassName: mig.nvidia.com count: 1 --- apiVersion: v1 kind: Pod metadata: name: mig-dra-pod spec: tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - name: cuda image: nvidia/cuda:12.6.0-base-ubuntu22.04 command: ["nvidia-smi", "-L"] resources: claims: - name: mig resourceClaims: - name: mig resourceClaimTemplateName: mig-profile-any restartPolicy: OnFailure EOF -
Vérifiez qu'une seule instance MIG a été allouée au Pod.
kubectl logs mig-dra-podL'exemple qui suit illustre un résultat. Le Pod voit une instance MIG provenant du GPU partitionné.
GPU 0: NVIDIA A100-SXM4-40GB (UUID: GPU-edd63844-8488-f76a-f6e0-1027a7319a88) MIG 2g.10gb Device 0: (UUID: MIG-a5ad493e-e7e8-5675-9381-1d0f5311a456)
Demander un profil MIG spécifique
Pour demander un profil spécifique au lieu de n'importe quelle instance disponible, ajoutez un sélecteur CEL correspondant à l'profileattribut. Ce qui suit ResourceClaimTemplate demande une 1g.5gb instance et le Pod y fait référence.
cat <<EOF | kubectl apply -f - apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: mig-profile-1g.5gb spec: spec: devices: requests: - name: mig exactly: deviceClassName: mig.nvidia.com selectors: - cel: expression: "device.attributes['gpu.nvidia.com'].profile == '1g.5gb'" --- apiVersion: v1 kind: Pod metadata: name: mig-profile-pod spec: tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - name: cuda image: nvidia/cuda:12.6.0-base-ubuntu22.04 command: ["nvidia-smi", "-L"] resources: claims: - name: mig resourceClaims: - name: mig resourceClaimTemplateName: mig-profile-1g.5gb restartPolicy: OnFailure EOF
Demander plusieurs instances MIG à partir du même GPU
Pour vous assurer que plusieurs instances MIG d'une seule réclamation proviennent du même GPU physique, ajoutez un constraints bloc avecmatchAttribute: "gpu.nvidia.com/parentUUID". Ce qui suit ResourceClaimTemplate demande une 1g.5gb instance et une 2g.10gb instance à partir du même GPU, et le Pod fait référence à la réclamation. Comme le conteneur fait référence à la revendication sans nommer de demande spécifique, il reçoit les deux instances MIG.
cat <<EOF | kubectl apply -f - apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: multi-mig spec: spec: devices: requests: - name: mig-small exactly: deviceClassName: mig.nvidia.com selectors: - cel: expression: "device.attributes['gpu.nvidia.com'].profile == '1g.5gb'" - name: mig-medium exactly: deviceClassName: mig.nvidia.com selectors: - cel: expression: "device.attributes['gpu.nvidia.com'].profile == '2g.10gb'" constraints: - requests: [] matchAttribute: "gpu.nvidia.com/parentUUID" --- apiVersion: v1 kind: Pod metadata: name: multi-mig-pod spec: tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - name: cuda image: nvidia/cuda:12.6.0-base-ubuntu22.04 command: ["nvidia-smi", "-L"] resources: claims: - name: mig resourceClaims: - name: mig resourceClaimTemplateName: multi-mig restartPolicy: OnFailure EOF
Utilisez MIG sur les nœuds Bottlerocket avec le plug-in de périphérique NVIDIA
Sur Bottlerocket, l'AMI EKS-optimized accélérée inclut le plug-in de périphérique NVIDIA. Vous activez MIG avec la stratégie unique via les settings.kubelet-device-plugins.nvidia paramètres. Bottlerocket prend en charge le MIG dans la version 1.34.0 et les versions ultérieures.
Conditions préalables
-
Un cluster Amazon EKS. La procédure suivante approvisionne les MIG-capable P-family nœuds avec l'AMI NVIDIA EKS-optimized Bottlerocket, version 1.34.0 ou ultérieure.
-
Karpenter a été installé et configuré dans votre cluster, car la procédure suivante utilise un Karpenter
EC2NodeClasspour fournir les paramètres MIG dans les données utilisateur du nœud Bottlerocket. Pour plus d'informations, consultez la section Getting Started with Karpentersur le site Web de Karpenter. -
kubectlconfiguré pour communiquer avec votre cluster, consultez Installer ou mettre à jour kubectl pour plus d'informations.
Procédure
Ajoutez le paramètre de partitionnement MIG aux données utilisateur de Bottlerocket pour vos nœuds GPU. La manière dont vous fournissez les données utilisateur dépend de la manière dont vous approvisionnez les nœuds. L'exemple suivant montre un Karpenter EC2NodeClass pour les p4d.24xlarge nœuds.
cat <<EOF | kubectl apply -f - apiVersion: karpenter.k8s.aws/v1 kind: EC2NodeClass metadata: name: gpu-bottlerocket-mig spec: amiFamily: Bottlerocket amiSelectorTerms: - alias: bottlerocket@latest role: eksctl-KarpenterNodeRole-<cluster-name> subnetSelectorTerms: - tags: karpenter.sh/discovery: <cluster-name> securityGroupSelectorTerms: - tags: karpenter.sh/discovery: <cluster-name> userData: | [settings.kubelet-device-plugins.nvidia] device-partitioning-strategy = "mig" [settings.kubelet-device-plugins.nvidia.mig.profile] "a100.40gb" = "2g.10gb" EOF
Lorsque les nœuds configurés avec ces paramètres rejoignent le cluster, le mode MIG est activé sur les GPU, chaque GPU est partitionné en 2g.10gb instances et le plug-in de l'appareil annonce les instances résultantes comme ressource. nvidia.com/gpu Étant donné que a p4d.24xlarge possède huit GPU A100 et que chacun prend en charge trois 2g.10gb instances, le nœud fait de la publicité. nvidia.com/gpu: 24
Note
Le mig.profile réglage est défini par le modèle de processeur graphique, tel que a100.40gb ouh100.80gb. Sans mig.profile réglage, le GPU active le mode MIG et utilise son profil le plus large. Comme Bottlerocket utilise une stratégie unique, chaque GPU du nœud utilise le même profil. Pour utiliser différents profils sur le même nœud (stratégie mixte), utilisez le chemin AL2023 avec l'opérateur GPU NVIDIA.
Utiliser MIG sur les nœuds AL2023 avec le plug-in de périphérique NVIDIA
Sur AL2023, les étapes suivantes utilisent l'opérateur GPU NVIDIA pour installer le plug-in de périphérique NVIDIA et le MIG Manager. Le MIG Manager active le mode MIG et partitionne les GPU en fonction d'une configuration que vous fournissez. Le plug-in de périphérique NVIDIA annonce ensuite les instances résultantes à Kubernetes. L'opérateur GPU prend en charge les stratégies simples et mixtes.
Étant donné que l'AMI NVIDIA EKS-optimized AL2023 inclut déjà le pilote et la boîte à outils NVIDIA, désactivez la gestion des pilotes dans l'opérateur GPU pour éviter tout conflit avec le pilote préinstallé. Vous pouvez également installer et gérer vous-même le plug-in de périphérique NVIDIA et MIG Manager sans utiliser l'opérateur GPU.
Conditions préalables
-
Un cluster Amazon EKS. La procédure suivante fournit aux MIG-capable P-family nœuds (tels que
p4d.24xlarge) l'AMI NVIDIA EKS-optimized AL2023. -
Karpenter a été installé et configuré dans votre cluster, car la procédure permet de créer un Karpenter
EC2NodeClasset deNodePoolprovisionner les nœuds GPU. Pour plus d'informations, consultez la section Getting Started with Karpentersur le site Web de Karpenter. -
Helm installé dans votre environnement de ligne de commande, consultez les instructions de configuration de Helm pour plus d’informations.Déployez des applications avec Helm sur Amazon EKS
-
kubectlconfiguré pour communiquer avec votre cluster, consultez Installer ou mettre à jour kubectl pour plus d'informations.
Procédure
-
Créez un
EC2NodeClassetNodePoolpour les nœuds P-family GPU AL2023. Sur AL2023, le partitionnement MIG est appliqué par l'opérateur GPU lors des étapes ultérieures. Il s'agit donc d'une classe de nœuds GPU AL2023 standard. L'exemple suivant provisionnep4d.24xlargeles nœuds avec l'AMI NVIDIA EKS-optimized AL2023.cat <<EOF | kubectl apply -f - apiVersion: karpenter.k8s.aws/v1 kind: EC2NodeClass metadata: name: gpu-mig-al2023 spec: amiFamily: AL2023 amiSelectorTerms: - alias: al2023@latest role: eksctl-KarpenterNodeRole-<cluster-name> subnetSelectorTerms: - tags: karpenter.sh/discovery: <cluster-name> securityGroupSelectorTerms: - tags: karpenter.sh/discovery: <cluster-name> tags: karpenter.sh/discovery: <cluster-name> --- apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: gpu-mig-al2023 spec: template: spec: nodeClassRef: group: karpenter.k8s.aws kind: EC2NodeClass name: gpu-mig-al2023 taints: - key: nvidia.com/gpu effect: NoSchedule requirements: - key: karpenter.sh/capacity-type operator: In values: ["spot", "on-demand"] - key: node.kubernetes.io/instance-type operator: In values: ["p4d.24xlarge"] - key: kubernetes.io/arch operator: In values: ["amd64"] limits: cpu: 1000 memory: 5000Gi EOF -
Ajoutez le référentiel NVIDIA Helm.
helm repo add nvidia https://nvidia.github.io/gpu-operator helm repo update -
Créez un
gpu-operator-values.yamlfichier qui désactive la gestion des pilotes, sélectionne la stratégie mixte et définit les profils MIG à appliquer. L'exemple suivant définit unep4d-half-balancedconfiguration qui partitionne quatre des huit GPU d'unp4d.24xlargenœud et laisse le reste entier.cat <<EOF > gpu-operator-values.yaml driver: enabled: false toolkit: enabled: false devicePlugin: enabled: true nfd: enabled: true gfd: enabled: true mig: strategy: mixed migManager: enabled: true env: - name: WITH_REBOOT value: "true" config: create: true name: custom-mig-parted-configs default: all-disabled data: config.yaml: |- version: v1 mig-configs: all-disabled: - devices: all mig-enabled: false p4d-half-balanced: - devices: [0, 1, 2, 3] mig-enabled: true mig-devices: "1g.5gb": 2 "2g.10gb": 1 "3g.20gb": 1 - devices: [4, 5, 6, 7] mig-enabled: false EOF -
Installez l'opérateur GPU avec le fichier de valeurs.
helm install gpu-operator nvidia/gpu-operator \ --namespace gpu-operator \ --create-namespace \ --values gpu-operator-values.yaml -
Étiquetez vos MIG-capable nœuds avec la configuration de profil à appliquer. Le composant MIG Manager surveille cette étiquette et partitionne les GPU en conséquence, en redémarrant le nœud pour appliquer la modification.
kubectl label nodes -l node.kubernetes.io/instance-type=p4d.24xlarge \ nvidia.com/mig.config=p4d-half-balanced --overwrite -
Une fois que l'opérateur GPU a partitionné les GPU, les Pods demandent un profil MIG spécifique par son nom de ressource plutôt que.
nvidia.com/gpuL'exemple suivant exécute un Pod qui demande une1g.5gbinstance.cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: mig-inference spec: tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - name: cuda image: nvidia/cuda:12.6.0-base-ubuntu22.04 command: ["nvidia-smi", "-L"] resources: limits: nvidia.com/mig-1g.5gb: 1 EOF
Pour obtenir des exemples complets de configuration à stratégies mixtes pour les P-family instances, y compris des groupes de nœuds gérés avec des réservations de capacité et des charges de travail par profil, consultez la section MIG du guide des meilleures pratiques Amazon EKS.
Vérifiez que MIG est actif
Une fois vos MIG-enabled nœuds terminésReady, vérifiez que le mode MIG est actif sur les GPU et que le nœud annonce les ressources MIG attendues.
-
Vérifiez que le nœud annonce les ressources MIG. Avec la stratégie unique, le nœud signale les instances sous la forme
nvidia.com/gpu. Avec la stratégie mixte, le nœud signale les ressources spécifiques au profil, telles que.nvidia.com/mig-1g.10gbkubectl describe node <node-name> | grep nvidia.com -
Exécutez
nvidia-smidepuis un pod sur un MIG-enabled nœud pour confirmer que le mode MIG est actif.nvidia-smigénère des rapportsMIG M.: Enabledpour les GPU sur lesquels le mode MIG est activé et répertorie les instances MIG configurées sur chacun d'eux. Voici un exemple de sortie d'un GPU A100 de 40 Go avec MIG activé et partitionné en instances3g.20gb2g.10gb, et.1g.5gb+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 580.159.03 Driver Version: 580.159.03 CUDA Version: 13.0 | +-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA A100-SXM4-40GB On | 00000000:10:1C.0 Off | On | | N/A 35C P0 65W / 400W | 213MiB / 40960MiB | N/A Default | | | | Enabled | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | MIG devices: | +------------------+----------------------------------+-----------+-----------------------+ | GPU GI CI MIG | Shared Memory-Usage | Vol| Shared | | ID ID Dev | Shared BAR1-Usage | SM Unc| CE ENC DEC OFA JPG | | | | ECC| | |==================+==================================+===========+=======================| | 0 1 0 0 | 107MiB / 20096MiB | 42 0 | 3 0 2 0 0 | | | 0MiB / 12211MiB | | | +------------------+----------------------------------+-----------+-----------------------+ | 0 5 0 1 | 71MiB / 9984MiB | 28 0 | 2 0 1 0 0 | | | 0MiB / 6105MiB | | | +------------------+----------------------------------+-----------+-----------------------+ | 0 13 0 2 | 36MiB / 4864MiB | 14 0 | 1 0 0 0 0 | | | 0MiB / 3052MiB | | | +------------------+----------------------------------+-----------+-----------------------+Avec la stratégie mixte, un pod ne voit que l'instance MIG qu'il a demandée, et non la configuration graphique complète du nœud. Le
mig-inferencePod de l'étape précédente a demandé unenvidia.com/mig-1g.5gbinstance, doncnvidia-smi -Là l'intérieur de ce Pod figure un seul périphérique MIG.kubectl logs mig-inferenceL'exemple qui suit illustre un résultat.
GPU 0: NVIDIA A100-SXM4-40GB (UUID: GPU-5b7ce860-1951-004c-4881-6ac6997df770) MIG 1g.5gb Device 0: (UUID: MIG-9b065868-21b6-5b8d-8ab9-e99089ed472c)Pour voir la disposition complète des partitions de chaque GPU sur un nœud, exécutez
nvidia-smi -Lsur l'hôte plutôt que dans un pod de charge de travail. La commande suivante démarre un pod de débogage privilégié sur le nœud et exécute celui denvidia-smil'hôte.node-nameRemplacez-le par le nom de votre MIG-enabled nœud.kubectl debug node/<node-name> -it --profile=sysadmin --image=nvidia/cuda:12.6.0-base-ubuntu22.04 -- chroot /host nvidia-smi -LVoici un exemple de sortie pour la
p4d-half-balancedconfiguration. Les quatre premiers GPU sont partitionnés en instances MIG et les quatre autres sont des GPU complets. ChaqueMIGligne est une instance isolée matériellement avec son propre UUID, sa propre mémoire et ses propres tranches de calcul.GPU 0: NVIDIA A100-SXM4-40GB (UUID: GPU-5b7ce860-1951-004c-4881-6ac6997df770) MIG 3g.20gb Device 0: (UUID: MIG-7dc16162-7ba2-5894-abde-d753dc8ecf56) MIG 2g.10gb Device 1: (UUID: MIG-56cfe1f0-0662-50e4-a5f7-111107e4d5e6) MIG 1g.5gb Device 2: (UUID: MIG-1409727e-2ffa-5fd4-9586-204c9e2b36d5) MIG 1g.5gb Device 3: (UUID: MIG-9b065868-21b6-5b8d-8ab9-e99089ed472c) GPU 1: NVIDIA A100-SXM4-40GB (UUID: GPU-73692a43-dd2d-f1a1-b0df-2f4734e2a87d) MIG 3g.20gb Device 0: (UUID: MIG-745fd93a-9582-57a6-8b3b-9782d289ca1b) MIG 2g.10gb Device 1: (UUID: MIG-8440294e-c4a0-5687-add5-2cc506babb2f) MIG 1g.5gb Device 2: (UUID: MIG-559810c0-f2bb-5ca2-b529-47228d99437f) MIG 1g.5gb Device 3: (UUID: MIG-a91cf3f9-6459-59e9-97a8-dc69b9958eef) GPU 2: NVIDIA A100-SXM4-40GB (UUID: GPU-4e56019e-84de-eef5-5ac3-85e468e93639) MIG 3g.20gb Device 0: (UUID: MIG-c130392b-fd7c-59f8-9f4b-ecab27a2984b) MIG 2g.10gb Device 1: (UUID: MIG-7d61cf16-ad08-57be-b2c2-ac6e515b28c3) MIG 1g.5gb Device 2: (UUID: MIG-f5388dec-d841-506c-bb7a-6ac136ceee53) MIG 1g.5gb Device 3: (UUID: MIG-02d54020-c6cb-5997-894b-e95af0f49388) GPU 3: NVIDIA A100-SXM4-40GB (UUID: GPU-4fd894a0-b471-9e77-eb67-0ad15002ed5b) MIG 3g.20gb Device 0: (UUID: MIG-10399b59-2625-5106-b3f8-76ae19da46e1) MIG 2g.10gb Device 1: (UUID: MIG-ef81ee7d-fc48-56ed-8479-8ffa76eb4154) MIG 1g.5gb Device 2: (UUID: MIG-ed9bf59d-6bf2-5e07-80fb-dd0d7ca41f9d) MIG 1g.5gb Device 3: (UUID: MIG-a15d6f7d-661b-514e-8838-06fe4ffe7f75) GPU 4: NVIDIA A100-SXM4-40GB (UUID: GPU-05b6b91b-da6e-3078-1f4f-a7bbf1ff7ed2) GPU 5: NVIDIA A100-SXM4-40GB (UUID: GPU-078a8df1-f387-0315-6b0b-af12e082f6d5) GPU 6: NVIDIA A100-SXM4-40GB (UUID: GPU-6cdeffe7-45f1-7e8e-bcc1-4634399ad877) GPU 7: NVIDIA A100-SXM4-40GB (UUID: GPU-5f68814a-4e4a-5dec-79b4-8d70a61c7714)