View a markdown version of this page

Configurazione di etichette e contaminanti Kubernetes personalizzati in Amazon SageMaker HyperPod - Amazon SageMaker AI

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 di etichette e contaminanti Kubernetes personalizzati in Amazon SageMaker HyperPod

SageMaker HyperPod I cluster Amazon con l'orchestrator Amazon Elastic Kubernetes Service (Amazon EKS) supportano etichette e taint Kubernetes personalizzati per i nodi all'interno di gruppi di istanze. Le etichette e i taint sono meccanismi di pianificazione e organizzazione fondamentali in Kubernetes che offrono un controllo dettagliato sul posizionamento dei pod e sull'utilizzo delle risorse.

Le etichette sono coppie chiave-valore che possono essere allegate agli oggetti Kubernetes, consentendo di organizzare e selezionare le risorse in base agli attributi. I taint, che funzionano insieme alle tolleranze, sono proprietà specifiche dei nodi che influenzano la pianificazione dei pod respingendo i pod che non hanno tolleranze corrispondenti. Insieme, questi meccanismi consentono di isolare i carichi di lavoro, assegnarli in base alle specifiche hardware e garantire un utilizzo ottimale delle risorse.

Casi di utilizzo comune

Di seguito sono riportati alcuni scenari comuni in cui etichette e colorazioni personalizzate sono utili:

  • Prevenzione dei pod di sistema su istanze costose: applica i taint alle istanze GPU per evitare che i pod di sistema e altri carichi di lavoro non critici consumino costose risorse di calcolo

  • Integrazione con gli strumenti esistenti: applica etichette che corrispondano ai modelli di infrastruttura consolidati dell'organizzazione e alle configurazioni di affinità dei nodi

Configurazione di etichette e coloranti

Puoi configurare etichette e taint Kubernetes personalizzati a livello di gruppo di istanze utilizzando il parametro nella configurazione del KubernetesConfig cluster. Le etichette e i taint vengono applicati a tutti i nodi del gruppo di istanze e persistono per tutto il ciclo di vita del cluster.

Il KubernetesConfig parametro è dichiarativo, il che significa che si specifica lo stato completo desiderato delle etichette e dei taint per un gruppo di istanze. SageMaker HyperPod quindi riconcilia lo stato effettivo dei nodi in modo che corrisponda allo stato desiderato.

  • Aggiungere etichette o macchie: includi le nuove etichette o macchie KubernetesConfig insieme a quelle esistenti che desideri conservare

  • Aggiornamento delle etichette o delle macchie: modifica i valori delle KubernetesConfig etichette o delle macchie che desideri modificare e includi tutte le altre che desideri conservare

  • Rimozione di etichette o macchie: ometti le etichette o le macchie che desideri rimuovereKubernetesConfig, mantenendo solo quelle che desideri conservare

Creazione di un cluster con etichette e tinte

Quando crei un nuovo SageMaker HyperPod cluster, includi il KubernetesConfig parametro nella configurazione del gruppo di istanze. L'esempio seguente mostra come creare un cluster con etichette e tinte personalizzate:

{ "ClusterName": "my-cluster", "InstanceGroups": [{ "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 4, "LifeCycleConfig": { "SourceS3Uri": "s3://my-bucket/lifecycle-config.sh", "OnCreate": "on-create.sh" }, "ExecutionRole": "arn:aws:iam::123456789012:role/HyperPodExecutionRole", "ThreadsPerCore": 1, "KubernetesConfig": { "Labels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "Taints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }, { "key": "dedicated", "value": "ml-workloads", "effect": "NoExecute" }] } }], "VpcConfig": { "SecurityGroupIds": ["sg-0123456789abcdef0"], "Subnets": ["subnet-0123456789abcdef0", "subnet-0123456789abcdef1"] }, "Orchestrator": { "Eks": { "ClusterArn": "arn:aws:eks:us-west-2:123456789012:cluster/my-eks-cluster" } } }

In questo esempio:

  • Etichette: vengono applicate tre etichette personalizzate: env=prodteam=ml-training, e gpu-type=a100

  • Contini: due contaminanti sono configurati per impedire la pianificazione indesiderata dei pod

Aggiornamento di etichette e contaminanti su un cluster esistente

È possibile modificare etichette e tint su un cluster esistente utilizzando l'UpdateClusterAPI. L'esempio seguente mostra come aggiornare il KubernetesConfig per un gruppo di istanze:

{ "ClusterName": "my-cluster", "InstanceGroups": [{ "InstanceGroupName": "worker-group-1", "KubernetesConfig": { "Labels": { "env": "prod", "team": "ml-training", "gpu-type": "a100", "cost-center": "ml-ops" }, "Taints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }] } }] }

Quando si aggiornano etichette e tinte, SageMaker HyperPod applica le modifiche a tutti i nodi del gruppo di istanze. Il servizio gestisce la transizione dallo stato corrente a quello desiderato, che puoi monitorare utilizzando l'DescribeClusterAPI.

Etichetta di monitoraggio e applicazione contaminata

SageMaker HyperPod fornisce API per monitorare lo stato delle etichette e dei taint quando vengono applicati ai nodi del cluster.

Verifica dello stato a livello di cluster

Utilizza l'DescribeClusterAPI per visualizzare gli stati attuali e desiderati delle etichette e dei taint a livello di gruppo di istanze. L'esempio seguente mostra la struttura della risposta:

{ "ClusterName": "my-cluster", "ClusterStatus": "InService", "InstanceGroups": [{ "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.24xlarge", "CurrentInstanceCount": 4, "TargetInstanceCount": 4, "KubernetesConfig": { "CurrentLabels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "DesiredLabels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "CurrentTaints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }], "DesiredTaints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }] } }] }

In caso di CurrentLabels CurrentTaints corrispondenza DesiredLabelsDesiredTaints, a tutti i nodi del gruppo di istanze viene applicata la configurazione specificata. Se sono diversi, il cluster sta ancora applicando le modifiche.

Verifica dello stato dei singoli nodi

Per informazioni dettagliate a livello di nodo, utilizzate l'DescribeClusterNodeAPI per verificare la configurazione delle etichette e delle tinte dei singoli nodi. L'esempio seguente mostra la struttura della risposta:

{ "NodeDetails": { "InstanceId": "i-0123456789abcdef0", "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.24xlarge", "InstanceStatus": { "Status": "Running", "Message": "Node is healthy" }, "LifeCycleConfig": { "SourceS3Uri": "s3://my-bucket/lifecycle-config.sh", "OnCreate": "on-create.sh" }, "LaunchTime": 1699564800.0, "KubernetesConfig": { "CurrentLabels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "DesiredLabels": { "env": "prod", "team": "ml-training", "gpu-type": "a100" }, "CurrentTaints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }], "DesiredTaints": [{ "key": "gpu", "value": "true", "effect": "NoSchedule" }] } } }

Node-level il monitoraggio è utile per la risoluzione dei problemi quando le etichette o i taint non vengono applicati correttamente a nodi specifici o quando è necessario verificare la configurazione di una particolare istanza.

Prefissi riservati

Alcuni prefissi sono riservati all'uso del sistema e non devono essere utilizzati per etichette o tinte personalizzate. I seguenti prefissi sono riservati:

  • kubernetes.io/- Riservato ai componenti principali di Kubernetes

  • k8s.io/- Riservato ai componenti principali di Kubernetes

  • sagemaker.amazonaws.com/- Riservato per SageMaker HyperPod

  • eks.amazonaws.com/- Riservato ad Amazon EKS

  • k8s.aws/- Riservato ad Amazon EKS

  • karpenter.sh/- Riservato all'autoscaling di Karpenter

Le etichette e le macchie con questi prefissi sono gestite dai componenti del sistema e non devono essere sovrascritte con valori personalizzati.