Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Configurazione delle partizioni GPU su Amazon SageMaker HyperPod
Argomenti
Prerequisiti
-
HyperPod Cluster Amazon EKS con istanze GPU supportate
-
NVIDIA GPU Operator installato
-
Autorizzazioni IAM appropriate per la gestione dei cluster
Creazione di un cluster con configurazione MIG
Utilizzo 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
Utilizzo 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" }
Aggiungere un operatore GPU a un cluster esistente
Installa GPU Operator
Sostituisci {$AWS_REGION} con la regione del tuo cluster (ad esempio, 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
Verifica l'installazione (attendi 2-3 minuti)
Controlla che tutti i pod degli operatori GPU siano in esecuzione:
kubectl get pods -n kube-system | grep -E "(gpu-operator|nvidia-)"
Baccelli previsti:
-
gpu-operator-* - 1 istanza (controller del cluster)
-
nvidia-device-plugin-daemonset-* - 1 per nodo GPU (tutte le istanze GPU)
-
nvidia-mig-manager-* - 1 per MIG-capable nodo () A100/H100
Rimuovi il vecchio plug-in del dispositivo
Disattiva il plugin nvidia-device-esistente:
helm upgrade dependencies helm_chart/HyperPodHelmChart \ --set nvidia-device-plugin.devicePlugin.enabled=false \ -n kube-system
Verifica le risorse della GPU
Verifica che i nodi mostrino la capacità della GPU. Dovrebbe visualizzare: nvidia. com/gpu: 8 (o il numero effettivo di GPU).
kubectl describe nodes | grep "nvidia.com/gpu"
Aggiornamento della configurazione MIG
Preparazione dei nodi prima degli aggiornamenti MIG
Prima di aggiornare le configurazioni MIG sul gruppo di istanze, è necessario preparare i nodi per evitare interruzioni del carico di lavoro. Segui questi passaggi per scaricare in sicurezza i carichi di lavoro dai nodi che verranno riconfigurati.
Fase 1: Identifica i nodi nel gruppo di istanze
Innanzitutto, identifica tutti i nodi che appartengono al gruppo di istanze che desideri aggiornare:
# 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
Questo comando restituisce un elenco di tutti i nodi nel gruppo di istanze specificato. Annota il nome di ogni nodo per i passaggi seguenti.
Passaggio 2: cordone e drenaggio di ciascun nodo
Per ogni nodo identificato nel passaggio 1, eseguire le seguenti azioni:
Cordona il nodo
Il cordonaggio impedisce la pianificazione di nuovi pod sul nodo:
# Cordon a single node kubectl cordonNODE_NAME# Example: kubectl cordon hyperpod-i-014a41a7001adca60
Elimina i workload pod dal nodo
Svuota il nodo per eliminare tutti i pod del carico di lavoro preservando al contempo i pod di sistema:
# 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
Spiegazione delle opzioni di comando:
-
--ignore-daemonsets- Consente di procedere all'operazione di scarico anche in presenza di DaemonSet cialde -
--delete-emptydir-data- Elimina i pod utilizzando i volumi EmptyDir (necessario per il corretto svuotamento) -
--force- Forza l'eliminazione dei pod non gestiti da un controller (usare con cautela) -
--grace-period=300- Consente ai pod di terminarli correttamente in 5 minuti
Importante
-
L'operazione di scarico può richiedere diversi minuti a seconda del numero di pod e dei relativi periodi di tolleranza per la cessazione
-
I pod di sistema nei seguenti namespace rimarranno in esecuzione:
kube-system,,,,,cert-manager,kubeflow,hyperpod-inference-system,,kube-publicmpi-operator, egpu-operatoraws-hyperpodjupyter-k8s-systemhyperpod-observabilitykueue-systemkeda -
DaemonSet i pod rimarranno sul nodo (vengono ignorati in base alla progettazione)
Fase 3: verifica che nessun workload pod sia in esecuzione
Dopo il drenaggio, verifica che non rimanga alcun workload pod sui nodi (esclusi i namespace di sistema):
# 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"
Risultato previsto: se il nodo è svuotato correttamente, questo comando non dovrebbe restituire alcun risultato (o mostrare solo la riga di intestazione). Se qualche pod è ancora in funzione, scopri perché non è stato sfrattato e cancellalo manualmente se necessario.
Fase 4: Verifica dello stato di idoneità del nodo
Prima di procedere con l'aggiornamento MIG, verificate che tutti i nodi siano isolati:
# Check node status - should show "SchedulingDisabled" kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME
I nodi devono essere visualizzati SchedulingDisabled nella colonna STATUS, a indicare che sono isolati e pronti per l'aggiornamento MIG.
Aggiorna il profilo MIG sul cluster esistente
È possibile modificare i profili MIG sui cluster esistenti:
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" }'
Nota
Se i job sono già in esecuzione su un nodo, il partizionamento MIG avrà esito negativo. L'utente riceverà un messaggio di errore per svuotare i nodi prima di tentare nuovamente il partizionamento MIG.
Verifica della configurazione MIG
Dopo la creazione o l'aggiornamento del cluster, verifica la configurazione 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:"
Comandi comuni per il debug della configurazione MIG
Usa i seguenti comandi per risolvere i problemi e convalidare la configurazione MIG nel tuo 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
Nota
Sostituisci nvidia-driver-XXXXX and nvidia-device-plugin-XXXXX con i nomi effettivi dei pod del tuo cluster e NODE_NAME con il nome del tuo nodo.
Utilizzo di SageMaker AI Console
Creazione di un nuovo cluster con MIG
-
Accedi ad Amazon SageMaker AI > HyperPod Clusters > Cluster Management > Crea cluster HyperPod
-
Seleziona Orchestrato da EKS
-
Scegli Configurazione personalizzata e verifica che GPU Operator sia abilitato per impostazione predefinita
-
Nella sezione Gruppi di istanze, fai clic su Aggiungi gruppo
-
Configura il gruppo di istanze e vai a Configurazione avanzata per abilitare l'opzione Usa partizione GPU e scegli la configurazione MIG desiderata dal menu a discesa
-
Fai clic su Aggiungi gruppo di istanze e completa la configurazione rimanente del cluster
-
Fai clic su Invia per creare il cluster
Aggiornamento della configurazione MIG su un cluster esistente
-
Accedi ad Amazon SageMaker AI > HyperPod Clusters > Cluster Management
-
Seleziona il cluster esistente e fai clic su Modifica sul gruppo di istanze che desideri modificare
-
In Configurazione avanzata, attiva Usa partizione GPU se non è già abilitata e seleziona una configurazione MIG diversa dal menu a discesa
-
Fai clic su Salva modifiche