Implantar TPUs no modo "All Capacity" no GKE

Este documento explica como implantar e gerenciar cargas de trabalho usando o recurso modo de capacidade total da TPU no GKE. Todas as reservas do modo de capacidade oferecem controle aprimorado sobre os recursos de TPU, permitindo que você coloque as cargas de trabalho com controle refinado na capacidade reservada.

Este documento é destinado a engenheiros de machine learning (ML) e administradores e operadores de plataforma que querem usar a orquestração de contêineres do Kubernetes com controle granular sobre implantações de TPU.

Antes de ler este documento, confira se você conhece os seguintes conceitos:

O que é o modo de capacidade total de TPU?

O modo de capacidade total da TPU, ativado pelo TPU Cluster Director, oferece controle total sobre a capacidade reservada da TPU. O TPU Cluster Director é um serviço de gerenciamento que oferece controle baseado em reservas sobre suas TPUs.

Ao contrário do modo gerenciado anterior, em que Google Cloud reserva uma parte da capacidade para lidar com falhas de hardware, o modo "Toda a capacidade" concede acesso a todos os recursos de TPU reservados. Esse modo oferece visibilidade total do status do hardware, mas também transfere para você a responsabilidade de gerenciar falhas de nós e manutenção planejada.

Para mais informações sobre os principais recursos do modo de capacidade total, consulte Modo de capacidade total na visão geral do TPU Cluster Director.

Terminologia relacionada ao modo "Toda a capacidade" no GKE

A tabela a seguir inclui os termos e equivalências definidos pelo tamanho de um bloco, sub-bloco e cubo na versão Ironwood (TPU7x). Um cubo é uma topologia 4x4x4 de chips de TPU interconectados, que só é aplicável a topologias em tuplas de três elementos ({A}x{B}x{C}).

Recurso da TPU Núcleos Chips Hosts Cubos
1 ícone 2 1 - -
1 host 8 4 1 -
1 sub-bloco 128 64 16 1
Um bloco contém 144 sub-blocos 18432 9216 2304 144

Para mais informações sobre as topologias permitidas em um bloco, consulte Escolher uma topologia.

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.
  • Verifique se você tem um cluster Standard na versão 1.34.0-gke.2201000 ou mais recente. Para criar um novo cluster, consulte Como criar um cluster regional.
  • Verifique se você tem cota suficiente para TPUs na região que quer usar.
  • Instale o JobSet v0.2.3 ou mais recente.

Limitações

O modo de capacidade total da TPU no GKE só é compatível com as versões do Ironwood (TPU7x).

Usar o modo de capacidade total da TPU no GKE

Esta seção descreve o fluxo de trabalho para usar o modo de capacidade total da TPU no GKE.

  1. Conheça o TPU Cluster Director.
  2. Solicite capacidade de TPU no modo "Toda a capacidade".
  3. Confira a topologia e o status de integridade de todas as reservas no modo de capacidade.
  4. Conclua a etapa neste documento:
    1. Criar um pool de nós do GKE
    2. Programar cargas de trabalho
    3. Gerenciar falhas de nós com uma reserva no modo "Toda a capacidade"
  5. Gerenciar eventos de manutenção com TPUs no modo "Toda a capacidade".
  6. Reportar e corrigir hosts com falha usando TPUs no modo "Toda a capacidade".

Criar um pool de nós em uma reserva no modo "Toda a capacidade"

Com o modo de capacidade total no GKE, é possível criar pools de nós das seguintes maneiras:

  • Um pool de nós em que o GKE seleciona o bloco ou sub-bloco na sua reserva de capacidade total da TPU.
  • Um pool de nós que tem como destino um bloco ou sub-bloco específico em uma reserva do modo de capacidade total da TPU.

O GKE seleciona o bloco ou sub-bloco na sua reserva de capacidade total da TPU.

Nesse modo, o GKE seleciona o posicionamento do pool de nós na sua reserva de capacidade total da TPU. Esse processo é semelhante à criação de pools de nós com outras opções de provisionamento de TPU, como VMs spot ou sob demanda.

Para criar um pool de nós, use o comando gcloud container node-pools create com a flag --reservation. Especifique o nome completo do recurso da sua reserva de TPU como o valor da flag --reservation.

Para ver um exemplo de comando de criação de pool de nós, consulte Criar um pool de nós manualmente.

Segmentar um bloco ou sub-bloco em uma reserva

Com o modo "Toda a capacidade" da TPU, é possível segmentar um bloco ou sub-bloco específico na sua reserva de TPU para cargas de trabalho paralelas. Esse recurso é útil para cargas de trabalho que exigem proximidade entre os chips de TPU para minimizar a latência.

  1. Consulte as configurações de bloco, sub-bloco e host disponíveis. Conclua as etapas no documento Ver a topologia e o status de integridade de todas as reservas no modo de capacidade total.

  2. Crie uma política de carga de trabalho:

    gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
        --type=HIGH_THROUGHPUT \
        --accelerator-topology=TPU_TOPOLOGY \
        --project=PROJECT_ID \
        --region=REGION
    

    Substitua:

    • WORKLOAD_POLICY_NAME: um nome para a política de carga de trabalho.
    • TPU_TOPOLOGY: a topologia do TPU Ironwood (TPU7x). Por exemplo, 2x2x2. Para conferir todas as topologias do Ironwood (TPU7x) com suporte, consulte Planejar TPUs no GKE.
    • PROJECT_ID: o ID do projeto Google Cloud .
    • REGION: a região da política de carga de trabalho. Uma política de carga de trabalho é um recurso regional e pode ser reutilizada em pools de nós que compartilham a mesma topologia.
  3. Para criar um pool de nós e segmentar um bloco ou sub-bloco específico da reserva, use a flag --reservation para especificar o nome completo do recurso do bloco ou sub-bloco de destino na reserva.

    Para segmentar um bloco específico na sua reserva, use o seguinte comando:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --machine-type=tpu7x-standard-4t \
        --placement-policy=WORKLOAD_POLICY_NAME \
        --zone=ZONE \
        --reservation=project/PROJECT/reservation/RESERVATION_NAME/reservationBlocks/BLOCK_NAME
    

    Para segmentar um sub-bloco específico dentro de um bloco, use o seguinte comando:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --machine-type=tpu7x-standard-4t \
        --placement-policy=WORKLOAD_POLICY_NAME \
        --zone=ZONE \
        --reservation=project/PROJECT/reservation/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUB_BLOCK_NAME
    

    Substitua:

    • NODE_POOL_NAME: o nome do novo pool de nós.
    • CLUSTER_NAME: o nome do cluster do GKE.
    • WORKLOAD_POLICY_NAME: o nome da política de carga de trabalho que você criou.
    • ZONE: a zona do pool de nós, por exemplo, us-central1-a.
    • PROJECT: o ID do projeto Google Cloud .
    • RESERVATION_NAME: o nome da sua reserva de TPU.
    • BLOCK_NAME: o bloco específico dentro da sua reserva.
    • SUB_BLOCK_NAME: o sub-bloco específico na sua reserva.

    Nos comandos anteriores, você

Programar cargas de trabalho

Depois de criar um pool de nós com VMs de TPU no modo "Toda a capacidade", você pode implantar sua carga de trabalho como qualquer outro pool de nós de TPU. No modo de capacidade total da TPU, não há outras diferenças no agendamento de cargas de trabalho em comparação com os pools de nós que usam reservas padrão com suporte de SLO.

Para mais informações e exemplos de cargas de trabalho que usam TPUs, consulte Executar uma carga de trabalho em nós de uma fração de TPU e Executar uma carga de trabalho de várias frações.

Gerenciar falhas de nós

As reservas de TPU no modo de capacidade total são sem retenção. Sem retenção significa que você recebe a capacidade total de TPU, incluindo a parte que oGoogle Cloud normalmente retém para failovers no modo de capacidade gerenciada.

No modo de capacidade total da TPU, se uma VM falhar devido a problemas como falha de hardware,o Google Cloud tentará recuperar a VM no mesmo host (reparo no local). Portanto, recomendamos que você mantenha uma capacidade extra para acomodar o reagendamento da carga de trabalho durante falhas de infraestrutura.

Falha e recuperação de nós

Quando um nó falha em uma reserva no modo de capacidade total da TPU, os seguintes eventos ocorrem:

  • Google Cloud inicia um evento de reparo para a instância de VM do Compute Engine com falha. Esse processo tenta restaurar a VM para um status RUNNING e retornar o status do nó do GKE para READY.
  • A VM da TPU entra em um status de reparo, e qualquer carga de trabalho em execução nesse nó pode falhar, dependendo da política de failover. O status do pool de nós não muda para ERROR, mesmo que uma ou mais das VMs estejam com falhas.

Para monitorar o status de integridade dos nós, siga estas etapas:

  1. Liste os nós no pool de nós:

    kubectl get nodes
    

    Os nós com falha têm o status NotReady.

  2. Monitore o status do nó do Compute Engine:

    Para VMs de TPU no modo "Toda a capacidade", use gcloud compute instances describe. Esse comando também fornece o status físico da topologia para encontrar detalhes do host, do subbloco e do bloco.

    gcloud compute instances describe VM_NAME \
            --format="table[box,title=VM-Position](resourceStatus.physical_host_topology:label=location)" \
            --zone=ZONE
    

    Substitua:

    • VM_NAME: o nome da instância de VM de TPU.
    • ZONE: a zona da VM, por exemplo, us-central1-a.

    Para mais etapas sobre como recuperar informações de topologia e integridade sobre sua capacidade do modo "Toda a capacidade", consulte Conferir a topologia e o status de integridade das reservas do modo "Toda a capacidade".

Gerenciar manutenção

Para lidar com possíveis interrupções e garantir que suas cargas de trabalho permaneçam resilientes, gerencie a manutenção de nós individuais usando as políticas de manutenção do GKE. Para mais informações, consulte Janelas de manutenção e exclusões de manutenção.

O GKE não oferece suporte à manutenção de grupo para VMs de TPU em uma reserva no modo "All Capacity". Para realizar a manutenção do grupo no nível do subbloco, bloco ou reserva, use as APIs do Compute Engine. Para mais informações, consulte Gerenciar eventos de manutenção com TPUs no modo "Toda a capacidade".

Limpar

Para evitar cobranças indesejadas na sua conta do Google Cloud , exclua os pools de nós da TPU que não têm mais cargas de trabalho programadas. Se as cargas de trabalho em execução precisarem ser encerradas normalmente, use o comando kubectl drain para limpá-las antes de excluir o pool de nós.

  1. Exclua um pool de nós da TPU:

    gcloud container node-pools delete NODE_POOL_NAME \
        --location=LOCATION \
        --cluster=CLUSTER_NAME
    

    Substitua:

    • NODE_POOL_NAME: o nome do pool de nós.
    • CLUSTER_NAME: o nome do cluster.
    • LOCATION: o local de computação do cluster.

A seguir