Ativar a previsão de integridade de nós em um cluster do GKE

Depois de criar um cluster do Google Kubernetes Engine (GKE) otimizado para IA, é possível ativar a previsão de integridade do nó. Se você planeja programar cargas de trabalho usando a programação com reconhecimento de topologia (TAS) e o Kueue, ativar a previsão de integridade do nó permite que o programador do cluster faça o seguinte:

  1. Identifique nós que provavelmente vão apresentar degradação nas próximas cinco horas.

  2. Evite programar novas cargas de trabalho nesses nós.

Essa abordagem ajuda a minimizar as interrupções em cargas de trabalho críticas e sensíveis a interrupções, como cargas de trabalho de treinamento em grande escala.

Este documento explica como ativar a previsão de integridade de nós em um cluster do GKE que usa nós A4X Max, A4X, A4 ou A3 Ultra. Para saber como usar a métrica de previsão de integridade do nó em um painel do Cloud Monitoring quando, por exemplo, você quer resolver problemas de desempenho em um cluster do Slurm, consulte Monitorar instâncias do Compute Engine e clusters do Slurm.

Limitações

Antes de ativar a previsão de integridade do nó no cluster do GKE, considere as seguintes limitações:

  • O nó precisa usar os tipos de máquina A4X Max, A4X, A4 ou A3 Ultra.

  • O nó precisa usar o modelo de provisionamento vinculado à reserva.

Entender a previsão de integridade do nó

Quando você ativa a previsão de integridade do nó em um cluster do GKE, o CronJob aplica o rótulo gke.google.com/recommended-to-run-large-training-workload a cada nó no cluster. O CronJob define os valores de rótulo como a probabilidade de que a integridade da GPU de um nó seja reduzida e atualiza esses valores a cada 10 minutos. Se o valor do rótulo for true, o nó estará íntegro. Caso contrário, se o valor do rótulo for false, o nó provavelmente vai degradar nas próximas cinco horas. O valor do rótulo pode mudar com o tempo com base na integridade da GPU do nó.

Se você perceber que um nó provavelmente vai degradar, faça uma ou as duas ações a seguir:

  • Evite programar cargas de trabalho no nó. É possível configurar o Kueue para evitar o agendamento de cargas de trabalho em nós que mostram um valor de false, conforme descrito neste documento.

  • Denuncie o nó como com falha. Se o nó estiver com problemas, como temperatura alta da GPU ou desempenho lento, você poderá denunciá-lo como com falha. Essa ação inicia um evento de manutenção do host para o nó, disponibilizando-o novamente para execução de cargas de trabalho após a conclusão da manutenção. Para instruções, consulte Informar hosts com falha pelo GKE.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e inicialize a gcloud CLI. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da gcloud CLI não sejam compatíveis com a execução dos comandos neste documento.
  • Para se conectar ao cluster, execute o seguinte comando:

    gcloud container clusters get-credentials CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome do cluster.

Ativar a previsão de integridade do nó

Depois de se preparar para programar cargas de trabalho no cluster do GKE usando o TAS, é possível ativar a previsão de integridade do nó seguindo estas etapas:

  1. Implantar a rotulagem automática de nós

  2. Atualizar a configuração do job

  3. Verificar a rotulagem de nós

Implantar a rotulagem automática de nós

Para implantar a rotulagem automática de nós para previsão de integridade de nós no cluster do GKE, siga estas etapas:

  1. Clone o repositório git de aceleradores de hardware no GKE:

    git clone https://github.com/GoogleCloudPlatform/container-engine-accelerators.git
    
  2. Acesse o diretório topology-scheduler:

    cd container-engine-accelerators/gpudirect-tcpxo/topology-scheduler
    
  3. Crie o ConfigMap do Kubernetes que contém os scripts Python, schedule-daemon.py e label-nodes-daemon.py, que consultam as pontuações de integridade:

    kubectl create configmap predictor-scheduler-scripts \
        --namespace=kube-system \
        --from-file=schedule-daemon.py=schedule-daemon.py \
        --from-file=label-nodes-daemon.py=label-nodes-daemon.py
    
  4. Aplique a configuração da conta de serviço para conceder as permissões necessárias (leitura de métricas do Monitoring e correção de objetos de nó) ao CronJob:

    kubectl apply -f service-account.yaml
    
  5. Implante o DaemonSet que programa o job de rotulagem de nós:

    kubectl apply -f label-nodes-daemon.yaml
    

Atualizar a configuração do job

Para ativar a previsão de integridade do nó ao usar o Kueue, atualize a configuração do Job para verificar os valores de previsão de integridade e, se compatível, os requisitos de topologia antes de iniciar uma carga de trabalho.

Para atualizar a configuração do job e ativar a previsão de integridade do nó, no campo spec, adicione os seguintes campos:

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: gke.google.com/recommended-to-run-large-training-workload
            operator: NotIn
            values:
            - "False"
...

Verificar a identificação de nós

Depois que o CronJob for executado pela primeira vez, o que acontece aproximadamente 10 minutos após a implantação, verifique se ele aplicou o rótulo gke.google.com/recommended-to-run-large-training-workload aos nós.

Confira uma lista de nós com o rótulo gke.google.com/recommended-to-run-large-training-workload aplicado a eles:

kubectl get nodes -L gke.google.com/recommended-to-run-large-training-workload

O valor do rótulo pode ser um dos seguintes:

  • true: o nó deve estar íntegro nas próximas cinco horas.

  • false: o nó provavelmente vai apresentar falhas nas próximas cinco horas. Se você configurou a configuração do job conforme descrito neste documento, o Kueue evita programar novas cargas de trabalho no nó.

A seguir