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á.
Crie um NodeClass
Importante
Você deve começar com 0 nó no seu grupo de instâncias e deixar o Karpenter lidar com o ajuste de escala automático. Se você começar com mais de 0 nó, o Karpenter reduzirá a escala vertical dos nós para 0.
Uma classe de nó (NodeClass) define as configurações em nível de infraestrutura que se aplicam a grupos de nós no cluster do Amazon EKS, incluindo configuração de rede, configurações de armazenamento e marcação de recursos. HyperPodNodeClassA é um personalizado NodeClass que mapeia grupos de instâncias pré-criados em SageMaker HyperPod, definindo restrições em torno de quais tipos de instância e zonas de disponibilidade são compatíveis com as decisões de escalonamento automático da Karpenter.
Considerações sobre como criar de uma classe de nós
-
Você pode especificar até dez grupos de instâncias em uma
NodeClass. -
Os grupos de instâncias que usam
InstanceRequirements(grupos de instâncias flexíveis) podem conter vários tipos de instâncias em um único grupo de instâncias. Isso simplifica suaNodeClassconfiguração porque você pode referenciar menos grupos de instâncias para cobrir o mesmo conjunto de tipos de instância e zonas de disponibilidade. Por exemplo, em vez de criar 6 grupos de instâncias (3 tipos de instância × 2 AZs), você pode criar um único grupo de instâncias flexível que cubra todas as combinações. Observe issoInstanceTypeeInstanceRequirementssão mutuamente exclusivos. Você precisa especificar um ou outro para cada grupo de instâncias. -
Ao usar o particionamento de GPU com MIG (GPU de múltiplas instâncias), o Karpenter pode provisionar automaticamente nós com grupos de instâncias habilitados para MIG. Certifique-se de que seus grupos de instâncias incluam tipos de instância compatíveis com o MIG (ml.p4d.24xlarge, ml.p5.48xlarge ou ml.p5e/p5en.48xlarge) e configure os rótulos MIG apropriados durante a criação do cluster. Para obter mais informações sobre como configurar o particionamento de GPU, consulte. Usando partições de GPU na Amazon SageMaker HyperPod
-
Se rótulos personalizados forem aplicados a grupos de instâncias, você poderá visualizá-los no
desiredLabelscampo ao consultar oHyperpodNodeClassstatus. Isso inclui rótulos de configuração MIG, comonvidia.com/mig.config. Quando os trabalhos recebidos solicitam recursos MIG, o Karpenter escalará automaticamente as instâncias com os rótulos MIG apropriados aplicados. -
Se você optar por excluir um grupo de instâncias, recomendamos removê-lo do seu
NodeClassantes de excluí-lo do seu HyperPod cluster. Se um grupo de instâncias for excluído enquanto for usado em umaNodeClass, aNodeClassserá marcada como nãoReadypara provisionamento e não será usada para operações de ajuste de escala subsequentes enquanto o grupo de instâncias não for removido daNodeClass. -
Quando você remove grupos de instâncias de um
NodeClass, o Karpenter detecta um desvio nos nós que foram gerenciados pelo Karpenter nos grupos de instâncias e interrompe os nós com base em seus controles de orçamento de interrupção. -
As sub-redes usadas pelo grupo de instâncias devem pertencer à mesma AZ. As sub-redes são especificadas usando
OverrideVpcConfigem nível de grupo de instâncias ou em nível de cluster.VpcConfigé usada por padrão. -
No momento, só é possível usar a capacidade sob demanda. Não é possível usar grupos de instâncias com plano de treinamento ou capacidade reservada.
-
Não é possível usar grupos de instâncias com
DeepHealthChecks (DHC). Isso ocorre porque uma DHC leva cerca de 60 a 90 minutos para ser concluída e os pods permanecem em estado pendente durante esse período, o que pode causar provisionamento excessivo.
As etapas a seguir mostram como criar uma NodeClass.
-
Crie um arquivo YAML (por exemplo, nodeclass.yaml) com sua configuração de
NodeClass. -
Aplique a configuração ao cluster usando o kubectl.
-
Faça referência à
NodeClassem sua configuração deNodePool. -
Veja um exemplo de
NodeClassque usa os tipos de instância ml.c5.xlarge e ml.c5.4xlarge:apiVersion: karpenter.sagemaker.amazonaws.com/v1 kind: HyperpodNodeClass metadata: name: sample-nc spec: instanceGroups: # name of InstanceGroup in HyperPod cluster. InstanceGroup needs to pre-created # MaxItems: 10 - auto-c5-xaz1 - auto-c5-4xaz2 -
Aplique a configuração:
kubectl apply -f nodeclass.yaml -
Monitore o NodeClass status para garantir que a condição Pronto no status esteja definida como Verdadeira:
kubectl get hyperpodnodeclass sample-nc -o yamlapiVersion: karpenter.sagemaker.amazonaws.com/v1 kind: HyperpodNodeClass metadata: creationTimestamp: "<timestamp>" name: sample-nc uid: <resource-uid> spec: instanceGroups: - auto-c5-az1 - auto-c5-4xaz2 status: conditions: // true when all IGs in the spec are present in SageMaker cluster, false otherwise - lastTransitionTime: "<timestamp>" message: "" observedGeneration: 3 reason: InstanceGroupReady status: "True" type: InstanceGroupReady // true if subnets of IGs are discoverable, false otherwise - lastTransitionTime: "<timestamp>" message: "" observedGeneration: 3 reason: SubnetsReady status: "True" type: SubnetsReady // true when all dependent resources are Ready [InstanceGroup, Subnets] - lastTransitionTime: "<timestamp>" message: "" observedGeneration: 3 reason: Ready status: "True" type: Ready instanceGroups: - desiredLabels: - key: <custom_label_key> value: <custom_label_value> - key: nvidia.com/mig.config value: all-1g.5gb instanceTypes: - ml.c5.xlarge name: auto-c5-az1 subnets: - id: <subnet-id> zone: <availability-zone-a> zoneId: <zone-id-a> - instanceTypes: - ml.c5.4xlarge name: auto-c5-4xaz2 subnets: - id: <subnet-id> zone: <availability-zone-b> zoneId: <zone-id-b> # Flexible instance group with multiple instance types - instanceTypes: - ml.p5.48xlarge - ml.p4d.24xlarge - ml.g6.48xlarge name: inference-workers subnets: - id: <subnet-id> zone: <availability-zone-a> zoneId: <zone-id-a> - id: <subnet-id> zone: <availability-zone-b> zoneId: <zone-id-b>