Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Configuración de etiquetas y manchas personalizadas de Kubernetes en Amazon SageMaker HyperPod
SageMaker HyperPod Los clústeres de Amazon con el orquestador Amazon Elastic Kubernetes Service (Amazon EKS) admiten etiquetas y manchas de Kubernetes personalizadas para los nodos de los grupos de instancias. Las etiquetas y los errores son mecanismos de programación y organización fundamentales en Kubernetes que te permiten tener un control pormenorizado sobre la ubicación de los pods y el uso de los recursos.
Las etiquetas son pares clave-valor que se pueden adjuntar a los objetos de Kubernetes, lo que te permite organizar y seleccionar los recursos en función de sus atributos. Las manchas, junto con las tolerancias, son propiedades específicas de los nodos que influyen en la programación de los módulos al repeler los grupos que no tienen tolerancias coincidentes. En conjunto, estos mecanismos permiten aislar las cargas de trabajo, asignarlas de acuerdo con las especificaciones del hardware y garantizar una utilización óptima de los recursos.
Casos de uso comunes
Las siguientes son situaciones habituales en las que resulta beneficioso utilizar etiquetas y etiquetas personalizadas:
-
Evitar el uso de módulos del sistema en instancias costosas: Aplica restricciones a las instancias de GPU para evitar que los pods del sistema y otras cargas de trabajo no críticas consuman costosos recursos de cómputo
-
Integración con las herramientas existentes: aplique etiquetas que se adapten a los patrones de infraestructura establecidos de su organización y a las configuraciones de afinidad de nodos
Configuración de etiquetas y manchas
Puedes configurar etiquetas e imprecisiones de Kubernetes personalizadas a nivel de grupo de instancias mediante el KubernetesConfig parámetro de la configuración del clúster. Las etiquetas y las restricciones se aplican a todos los nodos del grupo de instancias y persisten durante todo el ciclo de vida del clúster.
El KubernetesConfig parámetro es declarativo, lo que significa que especificas todo el estado deseado de las etiquetas y las manchas para un grupo de instancias. SageMaker HyperPod a continuación, concilia el estado real de los nodos para que coincida con el estado deseado.
-
Añadir etiquetas o manchas: incluye las nuevas etiquetas o manchas
KubernetesConfigjunto con las existentes que desees conservar -
Actualización de etiquetas o manchas: modifique los valores de
KubernetesConfiglas etiquetas o manchas que desee cambiar e incluya todas las demás que desee conservar -
Eliminar etiquetas o manchas: omita las etiquetas o manchas que desee eliminar y conserve solo las
KubernetesConfigque desee conservar
Crear un grupo con etiquetas y manchas
Al crear un SageMaker HyperPod clúster nuevo, incluye el KubernetesConfig parámetro en la configuración del grupo de instancias. En el siguiente ejemplo, se muestra cómo crear un clúster con etiquetas y detalles 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"} } }
En este ejemplo:
-
Etiquetas: se aplican tres etiquetas personalizadas:
env=prodteam=ml-training, ygpu-type=a100 -
Contaminaciones: hay dos manchas configuradas para evitar la programación no deseada de los módulos
Actualización de etiquetas e impurezas en un clúster existente
Puedes modificar las etiquetas y las impurezas de un clúster existente mediante la UpdateCluster API. En el siguiente ejemplo, se muestra cómo actualizar el KubernetesConfig de un grupo de instancias:
{ "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" }] } }] }
Cuando actualizas las etiquetas y las manchas, SageMaker HyperPod aplica los cambios a todos los nodos del grupo de instancias. El servicio gestiona la transición del estado actual al deseado, que puedes supervisar mediante la DescribeCluster API.
Supervisar la aplicación, etiquetar y contaminar
SageMaker HyperPod APIs permite supervisar el estado de las etiquetas y las manchas a medida que se aplican a los nodos del clúster.
Comprobar el estado a nivel de clúster
Usa la DescribeCluster API para ver los estados actuales y deseados de las etiquetas y las impurezas a nivel de grupo de instancias. En el siguiente ejemplo, se muestra la estructura de respuesta:
{ "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" }] } }] }
Cuando CurrentLabels coinciden DesiredLabels y CurrentTaints coincidenDesiredTaints, se aplica la configuración especificada a todos los nodos del grupo de instancias. Si son diferentes, el clúster aún está en proceso de aplicar los cambios.
Comprobando el estado de los nodos individuales
Para obtener detalles a nivel de nodo, usa la DescribeClusterNode API para comprobar la configuración de etiquetas y contaminar los nodos individuales. El siguiente ejemplo muestra la estructura de respuesta:
{ "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" }] } } }
La supervisión a nivel de nodo resulta útil para solucionar problemas cuando las etiquetas o los errores no se aplican correctamente a nodos específicos o cuando es necesario verificar la configuración de una instancia concreta.
Prefijos reservados
Algunos prefijos están reservados para el uso del sistema y no se deben usar para etiquetas personalizadas o impuras. Los siguientes prefijos están reservados:
-
kubernetes.io/- Reservado para los componentes principales de Kubernetes -
k8s.io/- Reservado para los componentes principales de 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 el escalado automático de Karpenter
Los componentes del sistema administran las etiquetas y las manchas con estos prefijos y no deben sobrescribirse con valores personalizados.