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.
Configuration de partitions GPU sur Amazon SageMaker HyperPod
Rubriques
Conditions préalables
-
HyperPod Cluster Amazon EKS avec instances GPU prises en charge
-
Opérateur GPU NVIDIA installé
-
Autorisations IAM appropriées pour la gestion des clusters
Création d'un cluster avec une configuration MIG
Utilisation AWS CLI
aws sagemaker create-cluster \ --cluster-name my-mig-cluster \ --orchestrator 'Eks={ClusterArn=arn:aws:eks:region:account:cluster/cluster-name}' \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://my-bucket", "OnCreate": "on_create_script.sh" }, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-1g.5gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role", "ThreadsPerCore": 1 }' \ --vpc-config '{ "SecurityGroupIds": ["sg-12345"], "Subnets": ["subnet-12345"] }' \ --node-provisioning-mode Continuous
Utilisation CloudFormation
{ "ClusterName": "my-mig-cluster", "InstanceGroups": [ { "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-2g.10gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" } ], "Orchestrator": { "Eks": { "ClusterArn": "arn:aws:eks:region:account:cluster/cluster-name" } }, "NodeProvisioningMode": "Continuous" }
Ajouter un opérateur GPU à un cluster existant
Installez GPU Operator
{$AWS_REGION}Remplacez-la par la région de votre cluster (par exemple, us-east-1, us-west-2).
helm install gpuo helm_chart/HyperPodHelmChart/charts/gpu-operator \ -f helm_chart/HyperPodHelmChart/charts/gpu-operator/regional-values/values-{$AWS_REGION}.yaml \ -n kube-system
Vérifiez l'installation (attendez 2 à 3 minutes)
Vérifiez que tous les pods d'opérateurs GPU sont en cours d'exécution :
kubectl get pods -n kube-system | grep -E "(gpu-operator|nvidia-)"
Pods attendus :
-
gpu-operator-* - 1 instance (contrôleur de cluster)
-
nvidia-device-plugin-daemonset-* - 1 par nœud GPU (toutes les instances GPU)
-
nvidia-mig-manager-* - 1 par nœud () MIG-capable A100/H100
Supprimer le plug-in de l'ancien appareil
Désactivez le plugin nvidia-device-plugin existant :
helm upgrade dependencies helm_chart/HyperPodHelmChart \ --set nvidia-device-plugin.devicePlugin.enabled=false \ -n kube-system
Vérifier les ressources du GPU
Vérifiez que les nœuds affichent la capacité du processeur graphique. Il devrait afficher : nvidia. com/gpu: 8 (ou votre nombre de GPU réel).
kubectl describe nodes | grep "nvidia.com/gpu"
Mise à jour de la configuration MIG
Préparation des nœuds avant les mises à jour MIG
Avant de mettre à jour les configurations MIG de votre groupe d'instances, vous devez préparer les nœuds pour éviter toute interruption de la charge de travail. Suivez ces étapes pour vider en toute sécurité les charges de travail des nœuds qui seront reconfigurés.
Étape 1 : Identifier les nœuds du groupe d'instances
Tout d'abord, identifiez tous les nœuds qui appartiennent au groupe d'instances que vous souhaitez mettre à jour :
# List all nodes in the instance group kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME# Example: kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=p4d-group
Cette commande renvoie la liste de tous les nœuds du groupe d'instances spécifié. Prenez note du nom de chaque nœud pour les étapes suivantes.
Étape 2 : bouclez et égouttez chaque nœud
Pour chaque nœud identifié à l'étape 1, effectuez les actions suivantes :
Bouclez le nœud
Le bouclage empêche la planification de nouveaux pods sur le nœud :
# Cordon a single node kubectl cordonNODE_NAME# Example: kubectl cordon hyperpod-i-014a41a7001adca60
Videz les modules de charge de travail du nœud
Videz le nœud pour expulser tous les modules de charge de travail tout en préservant les modules système :
# Drain the node (ignore DaemonSets and evict pods) kubectl drainNODE_NAME\ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300 # Example: kubectl drain hyperpod-i-014a41a7001adca60 \ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300
Explication des options de commande :
-
--ignore-daemonsets- Permet de poursuivre l'opération de vidange même en présence de DaemonSet gousses -
--delete-emptydir-data- Supprime les pods à l'aide de volumes EmptyDir (requis pour que le drainage réussisse) -
--force- Force la suppression des pods non gérés par un contrôleur (à utiliser avec prudence) -
--grace-period=300- Donne aux capsules 5 minutes pour se terminer gracieusement
Important
-
L'opération de vidange peut prendre plusieurs minutes en fonction du nombre de dosettes et de leurs délais de résiliation.
-
Les pods système des espaces de noms suivants continueront de fonctionner :
kube-systemcert-managerkubeflow,hyperpod-inference-system,kube-publicmpi-operator,gpu-operator,aws-hyperpod,jupyter-k8s-system,hyperpod-observabilitykueue-system, etkeda -
DaemonSet les pods resteront sur le nœud (ils sont ignorés par conception)
Étape 3 : Vérifiez qu'aucun module de charge de travail n'est en cours d'exécution
Après la vidange, vérifiez qu'il ne reste aucun module de charge de travail sur les nœuds (à l'exception des espaces de noms système) :
# Check for any remaining pods outside system namespaces kubectl get pods --all-namespaces --field-selector spec.nodeName=NODE_NAME\ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda" # Example: kubectl get pods --all-namespaces --field-selector spec.nodeName=hyperpod-i-014a41a7001adca60 \ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda"
Résultat attendu : si le nœud est correctement vidé, cette commande ne doit renvoyer aucun résultat (ou afficher uniquement la ligne d'en-tête). Si des pods fonctionnent toujours, recherchez pourquoi ils n'ont pas été expulsés et supprimez-les manuellement si nécessaire.
Étape 4 : Vérifier l'état de préparation du nœud
Avant de procéder à la mise à jour du MIG, vérifiez que tous les nœuds sont bouclés :
# Check node status - should show "SchedulingDisabled" kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME
Les nœuds doivent apparaître SchedulingDisabled dans la colonne STATUS, indiquant qu'ils sont bouclés et prêts pour la mise à jour MIG.
Mettre à jour le profil MIG sur un cluster existant
Vous pouvez modifier les profils MIG sur les clusters existants :
aws sagemaker update-cluster \ --cluster-name my-mig-cluster \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-3g.20gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" }'
Note
Si des tâches sont déjà en cours d'exécution sur un nœud, le partitionnement MIG échouera. L'utilisateur recevra un message d'erreur lui demandant de vider les nœuds avant de tenter à nouveau le partitionnement MIG.
Vérification de la configuration MIG
Après la création ou la mise à jour du cluster, vérifiez la configuration MIG :
# Update kubeconfig aws eks update-kubeconfig --nameyour-eks-cluster--regionus-east-2# Check MIG labels kubectl get nodeNODE_NAME-o=jsonpath='{.metadata.labels}' | grep mig # Check available MIG resources kubectl describe nodeNODE_NAME| grep -A 10 "Allocatable:"
Commandes courantes pour le débogage de la configuration MIG
Utilisez les commandes suivantes pour dépanner et valider la configuration MIG dans votre cluster :
# Check GPU Operator status kubectl get pods -n gpu-operator-resources # View MIG configuration kubectl exec -n gpu-operator-resources nvidia-driver-XXXXX -- nvidia-smi mig -lgi # Check device plugin configuration kubectl logs -n gpu-operator-resources nvidia-device-plugin-XXXXX # Monitor node events kubectl get events --field-selector involvedObject.name=NODE_NAME
Note
Remplacez nvidia-driver-XXXXX et nvidia-device-plugin-XXXXX par les noms de pod réels de votre cluster, ainsi que NODE_NAME par le nom de votre nœud.
Utilisation de la console SageMaker AI
Création d'un nouveau cluster avec MIG
-
Accédez à Amazon SageMaker AI > HyperPod Clusters > Gestion des clusters > Créer un HyperPod cluster
-
Select Orchestrated by EKS
-
Choisissez Configuration personnalisée et vérifiez que GPU Operator est activé par défaut
-
Dans la section Groupes d'instances, cliquez sur Ajouter un groupe
-
Configurez le groupe d'instances et accédez à Configuration avancée pour activer l'option Utiliser la partition GPU et choisissez la configuration MIG souhaitée dans la liste déroulante
-
Cliquez sur Ajouter un groupe d'instances et terminez la configuration de cluster restante
-
Cliquez sur Soumettre pour créer le cluster
Mise à jour de la configuration MIG sur un cluster existant
-
Accédez à Amazon SageMaker AI > HyperPod Clusters > Gestion des clusters
-
Sélectionnez votre cluster existant et cliquez sur Modifier dans le groupe d'instances que vous souhaitez modifier
-
Dans Configuration avancée, cochez Utiliser la partition GPU si ce n'est pas déjà fait et sélectionnez une autre configuration MIG dans la liste déroulante
-
Cliquez sur Enregistrer les modifications