Configurando rótulos e manchas personalizados do Kubernetes na Amazon SageMaker HyperPod - SageMaker IA da Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurando rótulos e manchas personalizados do Kubernetes na Amazon SageMaker HyperPod

SageMaker HyperPod Os clusters da Amazon com o orquestrador do Amazon Elastic Kubernetes Service (Amazon EKS) oferecem suporte a rótulos e contaminações personalizadas do Kubernetes para nós dentro de grupos de instâncias. Rótulos e contaminações são mecanismos fundamentais de agendamento e organização no Kubernetes que oferecem controle refinado sobre o posicionamento do pod e a utilização de recursos.

Os rótulos são pares de valores-chave que podem ser anexados aos objetos do Kubernetes, permitindo que você organize e selecione recursos com base em atributos. As manchas, trabalhando em conjunto com as tolerâncias, são propriedades específicas dos nós que influenciam o agendamento das cápsulas ao repelir as cápsulas que não têm tolerâncias correspondentes. Juntos, esses mecanismos permitem isolar cargas de trabalho, atribuí-las de acordo com as especificações de hardware e garantir a utilização ideal dos recursos.

Casos de uso comuns

Veja a seguir cenários comuns em que rótulos e tintas personalizados são benéficos:

  • Prevenção de pods de sistema em instâncias caras — aplique manchas em instâncias de GPU para evitar que pods de sistema e outras cargas de trabalho não críticas consumam recursos computacionais caros

  • Integração com ferramentas existentes - aplique rótulos que correspondam aos padrões de infraestrutura estabelecidos pela sua organização e às configurações de afinidade de nós

Configurando rótulos e manchas

Você pode configurar rótulos e contaminações personalizados do Kubernetes no nível do grupo de instâncias usando o KubernetesConfig parâmetro na configuração do cluster. Rótulos e contaminações são aplicados a todos os nós no grupo de instâncias e persistem durante todo o ciclo de vida do cluster.

O KubernetesConfig parâmetro é declarativo, o que significa que você especifica o estado completo desejado de rótulos e manchas para um grupo de instâncias. SageMaker HyperPod em seguida, reconcilia o estado real dos nós para corresponder ao estado desejado.

  • Adicionar rótulos ou manchas - Inclua os novos rótulos ou manchas KubernetesConfig junto com os existentes que você deseja manter

  • Atualizando rótulos ou manchas - Modifique os valores dos rótulos ou manchas que você deseja alterar e inclua todos os outros que deseja manter KubernetesConfig

  • Removendo rótulos ou manchas - Omita os rótulos ou manchas que você deseja remover doKubernetesConfig, mantendo somente aqueles que você deseja reter

Criação de um cluster com rótulos e manchas

Ao criar um novo SageMaker HyperPod cluster, inclua o KubernetesConfig parâmetro na configuração do seu grupo de instâncias. O exemplo a seguir mostra como criar um cluster com rótulos e manchas personalizados:

{ "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" } } }

Neste exemplo:

  • Etiquetas - Três etiquetas personalizadas são aplicadas:env=prod,team=ml-training, e gpu-type=a100

  • Contaminações - Duas impurezas são configuradas para evitar o agendamento indesejado de pods

Atualização de rótulos e manchas em um cluster existente

Você pode modificar rótulos e manchas em um cluster existente usando a UpdateCluster API. O exemplo a seguir mostra como atualizar o KubernetesConfig para um grupo de instâncias:

{ "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 você atualiza rótulos e manchas, SageMaker HyperPod aplica as alterações a todos os nós no grupo de instâncias. O serviço gerencia a transição do estado atual para o desejado, que você pode monitorar usando a DescribeCluster API.

Rótulo de monitoramento e aplicação de manchas

SageMaker HyperPod fornece APIs o monitoramento do status de rótulos e contaminações à medida que são aplicados aos nós do cluster.

Verificando o status no nível do cluster

Use a DescribeCluster API para visualizar os estados atuais e desejados de rótulos e contaminações no nível do grupo de instâncias. O exemplo a seguir mostra a estrutura da resposta:

{ "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" }] } }] }

Quando as instâncias CurrentLabels CurrentTaints combinam DesiredLabels e coincidemDesiredTaints, todos os nós no grupo de instâncias têm a configuração especificada aplicada. Se forem diferentes, o cluster ainda está aplicando as alterações.

Verificando o status individual do nó

Para obter detalhes em nível de nó, use a DescribeClusterNode API para verificar a configuração de rótulos e manchas de nós individuais. O exemplo a seguir mostra a estrutura da resposta:

{ "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" }] } } }

O monitoramento em nível de nó é útil para solucionar problemas quando rótulos ou contaminações não estão sendo aplicados corretamente a nós específicos ou quando você precisa verificar a configuração de uma instância específica.

Prefixos reservados

Alguns prefixos são reservados para uso do sistema e não devem ser usados para rótulos ou manchas personalizadas. Os seguintes prefixos são reservados:

  • kubernetes.io/- Reservado para componentes principais do Kubernetes

  • k8s.io/- Reservado para componentes principais do Kubernetes

  • sagemaker.amazonaws.com/- Reservado para SageMaker HyperPod

  • eks.amazonaws.com/- Reservado para Amazon EKS

  • k8s.aws/- Reservado para Amazon EKS

  • karpenter.sh/- Reservado para escalonamento automático do Karpenter

Rótulos e manchas com esses prefixos são gerenciados pelos componentes do sistema e não devem ser substituídos por valores personalizados.