View a markdown version of this page

Crie um NodeClass - SageMaker Inteligência Artificial 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á.

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 sua NodeClass configuraçã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 isso InstanceType e InstanceRequirements sã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 desiredLabels campo ao consultar o HyperpodNodeClass status. 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 NodeClass antes de excluí-lo do seu HyperPod cluster. Se um grupo de instâncias for excluído enquanto for usado em umaNodeClass, a NodeClass será marcada como não Ready para provisionamento e não será usada para operações de ajuste de escala subsequentes enquanto o grupo de instâncias não for removido da NodeClass.

  • 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 OverrideVpcConfig em 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.

  1. Crie um arquivo YAML (por exemplo, nodeclass.yaml) com sua configuração de NodeClass.

  2. Aplique a configuração ao cluster usando o kubectl.

  3. Faça referência à NodeClass em sua configuração de NodePool.

  4. Veja um exemplo de NodeClass que 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
  5. Aplique a configuração:

    kubectl apply -f nodeclass.yaml
  6. Monitore o NodeClass status para garantir que a condição Pronto no status esteja definida como Verdadeira:

    kubectl get hyperpodnodeclass sample-nc -o yaml
    apiVersion: 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>