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 des partitions GPU sur Amazon SageMaker HyperPod
Rubriques
Conditions préalables
-
HyperPod Cluster Amazon EKS avec instances de GPU prises en charge
-
Opérateur GPU NVIDIA installé
-
Autorisations IAM appropriées pour la gestion des clusters
Création d'un cluster avec configuration MIG
En utilisant 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
En utilisant 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
Installer l'opérateur GPU
{$AWS_REGION}Remplacez-le 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érateur du GPU sont en cours d'exécution :
kubectl get pods -n kube-system | grep -E "(gpu-operator|nvidia-)"
Capsules attendues :
-
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 compatible MiG (A100/H100)
Supprimer l'ancien plugin d'appareil
Désactivez l'existant nvidia-device-plugin :
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 indiquent la capacité du GPU. Il devrait afficher : nvidia.com/gpu : 8 (ou votre nombre réel de GPU).
kubectl describe nodes | grep "nvidia.com/gpu"
Mise à jour de la configuration MIG
Préparation des nœuds avant les mises à jour du MIG
Avant de mettre à jour les configurations MIG sur votre groupe d'instances, vous devez préparer les nœuds afin d'éviter toute interruption de la charge de travail. Suivez ces étapes pour évacuer 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
Identifiez d'abord tous les nœuds appartenant 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 une liste de tous les nœuds du groupe d'instances spécifié. Notez le nom de chaque nœud pour les étapes suivantes.
Étape 2 : Cordon et vidange chaque nœud
Pour chaque nœud identifié à l'étape 1, effectuez les actions suivantes :
Cordon le nœud
Le cordoning 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 pods 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 du 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 à l'opération de vidange de se poursuivre même en présence de DaemonSet capsules -
--delete-emptydir-data- Supprime les pods à l'aide de volumes EmptyDir (nécessaires pour que le vidage 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 capsules et de leurs délais de fin
-
Les pods système des espaces de noms suivants continueront de fonctionner :
kube-systemcert-manager,kubeflow,hyperpod-inference-system,kube-public,mpi-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érifier qu'aucun module de charge de travail n'est en cours d'exécution
Après le vidage, vérifiez qu'aucun module de charge de travail ne reste sur les nœuds (à l'exception des espaces de noms du 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 uniquement afficher la ligne d'en-tête). Si des pods fonctionnent toujours, déterminez 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 du 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 communes pour le débogage de la configuration MIG
Utilisez les commandes suivantes pour résoudre les problèmes 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 réels des pods de votre cluster et 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
-
Sélectionnez Orchestré par EKS
-
Choisissez Configuration personnalisée et vérifiez que l'opérateur GPU 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 de votre choix dans le menu déroulant.
-
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 sur le groupe d'instances que vous souhaitez modifier
-
Dans Configuration avancée, activez l'option Utiliser la partition GPU si ce n'est déjà fait et sélectionnez une autre configuration MIG dans le menu déroulant
-
Cliquez sur Enregistrer les modifications