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
KubernetesConfigjunto 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 do
KubernetesConfig, 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, egpu-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.