View a markdown version of this page

Configurando rótulos e contaminações 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 contaminações personalizados do Kubernetes na Amazon SageMaker HyperPod

SageMaker HyperPod Os clusters da Amazon com o orquestrador Amazon Elastic Kubernetes Service (Amazon EKS) oferecem suporte a rótulos e contaminações personalizados 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 impurezas, trabalhando em conjunto com as tolerâncias, são propriedades específicas do nó que influenciam a programação dos frutos ao repelir os frutos 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

A seguir, são apresentados cenários comuns em que rótulos e contaminações personalizados são benéficos:

  • Evitando pods do sistema em instâncias caras - aplique contaminações às instâncias de GPU para evitar que os pods do 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 seu cluster. Rótulos e contaminações são aplicados a todos os nós do 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 dos rótulos e contaminações 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 nos rótulos ou manchas que você deseja alterar e inclua todos os outros que você 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 contaminações 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=prodteam=ml-training, e gpu-type=a100

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

Atualizando 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 contaminações, 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.

Etiqueta de monitoramento e aplicação de contaminação

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

Verificando o status em nível de cluster

Use a DescribeCluster API para visualizar os estados atuais e desejados dos rótulos e contaminações no nível do grupo de instâncias. O exemplo a seguir mostra a estrutura de 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 CurrentLabels coincidem DesiredLabels e CurrentTaints coincidemDesiredTaints, todos os nós do 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 de um nó individual

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

Node-level o monitoramento é útil para solucionar problemas quando rótulos ou manchas não estão se aplicando 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 personalizados ou contaminações. 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 Karpenter

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