Peça TPUs com reserva futura no modo de calendário

Este guia mostra como otimizar o aprovisionamento da unidade de processamento tensorial (TPU) usando a reserva futura no modo de calendário. A reserva futura no modo de calendário é um consultor e um recomendador de calendário incorporados que podem ajudar a localizar capacidade de UTPs e planear com antecedência. Pode pedir capacidade para uma hora de início e uma duração especificadas, entre 1 e 90 dias, e o recomendador fornece datas sugeridas.

Este guia destina-se a engenheiros de aprendizagem automática (ML), administradores e operadores de plataformas, e a especialistas de dados e IA interessados em usar capacidades de orquestração de contentores do Kubernetes para executar cargas de trabalho em lote. Para mais informações sobre as funções comuns e exemplos de tarefas que referimos no Google Cloud conteúdo, consulte Funções e tarefas comuns de utilizadores do GKE.

Para mais informações, consulte o artigo Acerca da reserva futura no modo de calendário.

Exemplos de utilização

A reserva futura no modo de calendário funciona melhor para cargas de trabalho com pedidos agendados, de curto prazo e de elevada procura, como preparação, ou modelos de inferência em lote que requerem elevada disponibilidade na hora de início pedida.

Se a sua carga de trabalho exigir recursos aprovisionados dinamicamente conforme necessário, durante um máximo de 7 dias, sem reservas a longo prazo nem gestão de quotas complexa, considere usar a opção de consumo flex-start. Para mais informações, consulte o artigo Acerca do aprovisionamento de GPUs e TPUs com início flexível.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize a CLI gcloud. Se instalou anteriormente a CLI gcloud, execute o comando gcloud components update para obter a versão mais recente. As versões anteriores da CLI gcloud podem não suportar a execução dos comandos neste documento.
  • Certifique-se de que tem um dos seguintes elementos:

Peça uma reserva futura no modo de calendário para as UTPs

O processo para pedir TPUs com reserva futura no modo de calendário envolve os seguintes passos:

  1. Certifique-se de que tem quota suficiente para todos os recursos que não fazem parte de uma reserva quando as VMs são criadas, como discos ou endereços IP. Os pedidos de reserva futuros no modo de calendário não requerem quota do Compute Engine.
  2. Conclua os passos para criar um pedido no modo de calendário. Estes passos incluem o seguinte:
    1. Veja a disponibilidade futura das TPUs.
    2. Crie e envie um pedido de reserva futura no modo de calendário para as UTPs.
    3. Aguarde que Google Cloud aprove o seu pedido.
  3. Crie um node pool de TPU que use a sua reserva.

Crie um node pool

Esta secção aplica-se apenas a clusters padrão, uma vez que o modo Autopilot cria automaticamente nós com base nas cargas de trabalho.

Pode usar a sua reserva quando cria pools de nós de fatias de TPUs com um ou vários anfitriões.

Crie um node pool de fatia de TPU de anfitrião único

Pode criar um conjunto de nós de fatia de TPU de anfitrião único com a Google Cloud CLI.

gcloud container node-pools create NODE_POOL_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --cluster=CLUSTER_NAME \
    --node-locations=NODE_ZONES \
    --machine-type=MACHINE_TYPE \
    --reservation-affinity=specific \ This is required
    --reservation=RESERVATION

Substitua o seguinte:

  • NODE_POOL_NAME: o nome do novo node pool.
  • CONTROL_PLANE_LOCATION: o nome da zona com base na versão da TPU que quer usar. Para identificar uma localização disponível, consulte o artigo Disponibilidade de TPUs no GKE.
  • CLUSTER_NAME: o nome do cluster.
  • NODE_ZONES: a lista separada por vírgulas de uma ou mais zonas onde o GKE cria o conjunto de nós.
  • MACHINE_TYPE: o tipo de máquina a usar para os nós. Para mais informações sobre os tipos de máquinas compatíveis com a TPU, use a tabela em Escolha a versão da TPU.
  • RESERVATION: o nome da reserva do calendário a consumir.

Para ver uma lista completa de todas as flags que pode especificar, consulte a referência gcloud container clusters create.

Depois de criar um conjunto de nós com a reserva de calendário, pode implementar a sua carga de trabalho como qualquer outro conjunto de nós de TPU. O consumo de reservas futuras no modo de calendário funciona da mesma forma que para qualquer outro tipo de reserva. Para mais informações, consulte o artigo Consumir recursos zonais reservados.

Crie um node pool de fatia de TPU com vários anfitriões

Os passos para criar um conjunto de nós de fatia de TPU com vários anfitriões variam consoante use o Ironwood (TPU7x) ou uma versão anterior da TPU.

Ironwood (TPU7x)

Pode criar um nó de segmento de TPU com vários anfitriões na versão Ironwood (TPU7x) através da Google Cloud CLI ou do Terraform:

gcloud

Para criar um node pool de fatia de TPU com vários anfitriões com o Ironwood (TPU7x), tem de criar primeiro uma política de carga de trabalho.

  1. 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 o seguinte:

    • WORKLOAD_POLICY_NAME: um nome para a sua política de carga de trabalho.
    • TPU_TOPOLOGY: a topologia Ironwood da TPU (TPU7x). Por exemplo, 2x2x2. Para ver todas as topologias do Ironwood (TPU7x) suportadas, consulte a secção de topologia.
    • PROJECT_ID: o ID do seu Google Cloud projeto.
    • 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 partilham a mesma topologia.
  2. Crie o node pool com a política de workload:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=us-central1 \
        --node-locations=us-central1-c \
        --machine-type=tpu7x-standard-4t \
        --reservation-affinity=specific \
        --reservation=FUTURE_RESERVATION_NAME \
        --placement-policy=WORKLOAD_POLICY
    

    Substitua o seguinte:

    • NODE_POOL_NAME: o nome do novo grupo de nós.
    • WORKLOAD_POLICY: o nome da política de carga de trabalho que criou.
    • FUTURE_RESERVATION_NAME: o nome da sua reserva futura.

    Este comando cria um conjunto de nós denominado NODE_POOL_NAME com as seguintes caraterísticas:

    • --machine-type=tpu7x-standard-4t especifica o tipo de máquina Ironwood (TPU7x)

Terraform

  1. Certifique-se de que usa a versão 4.84.0 ou posterior do fornecedor google.
  2. Crie uma política de carga de trabalho:

    resource "google_compute_resource_policy" {
      name   = "WORKLOAD_POLICY_NAME"
      region = CLUSTER_LOCATION
      workload_policy {
        type = "HIGH_THROUGHPUT"
        accelerator_topology = "TPU_TOPOLOGY"
      }
    }
    

    Substitua o seguinte:

    • WORKLOAD_POLICY_NAME: um nome para a política de carga de trabalho.
    • CLUSTER_LOCATION: calcular a localização do cluster. Recomendamos que tenha um cluster regional para uma maior fiabilidade do plano de controlo do Kubernetes. Também pode usar um cluster zonal. Para mais informações, consulte o artigo Selecione uma versão e uma topologia da TPU.
    • TPU_TOPOLOGY: a topologia Ironwood da TPU (TPU7x). Por exemplo, 2x2x2. Para ver todas as topologias do Ironwood (TPU7x) suportadas, consulte o artigo Planeie TPUs.

    Para mais informações sobre a referência google_compute_resource_policy, consulte o fornecedor do Terraform.

  3. Na configuração do Terraform, adicione o seguinte bloco:

    resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" {
      provider           = google
      project            = PROJECT_ID
      cluster            = CLUSTER_NAME
      name               = POOL_NAME
      location           = CLUSTER_LOCATION
      node_locations     = [NODE_ZONES]
      initial_node_count = NUM_NODES
    
      autoscaling {
        max_node_count = MAX_NODES
        location_policy      = "ANY"
      }
      node_config {
        machine_type = MACHINE_TYPE
        reservation_affinity {
          consume_reservation_type = "SPECIFIC_RESERVATION"
          key = "compute.googleapis.com/reservation-name"
          values = [RESERVATION_LABEL_VALUES]
        }
        flex_start = false
      }
    
      placement_policy {
        policy_name = WORKLOAD_POLICY_NAME
      }
    }
    

    Substitua o seguinte:

    • NODE_POOL_RESOURCE_NAME: o nome do recurso do conjunto de nós no modelo do Terraform.
    • PROJECT_ID: o ID do projeto.
    • CLUSTER_NAME: o nome do cluster existente ao qual adicionar o conjunto de nós.
    • POOL_NAME: o nome do node pool a criar.
    • NODE_ZONES: a lista separada por vírgulas de uma ou mais zonas onde o GKE cria o conjunto de nós.
    • NUM_NODES: o número de nós no node pool. Tem de ser zero ou o produto do número de chips da TPU dividido por quatro, porque nas fatias de TPU com vários anfitriões, cada nó da fatia de TPU tem quatro chips. Por exemplo, se TPU_TOPOLOGY for 4x8, existem 32 chips, o que significa que NUM_NODES tem de ser 8. Para saber mais sobre as topologias de TPU, use a tabela em Escolha a versão do TPU.
    • TPU_TOPOLOGY: isto indica a topologia física selecionada para a fatia da TPU. O formato da topologia depende da versão da TPU que está a usar. Para saber mais sobre as topologias de TPUs, use a tabela em Escolha uma topologia.

    Opcionalmente, também pode usar as seguintes variáveis:

    • RESERVATION_NAME: se usar uma reserva de TPU, forneça uma lista de etiquetas de recursos de reserva a usar quando criar o conjunto de nós. Para saber como preencher o campo RESERVATION_LABEL_VALUES no campo reservation_affinity, consulte o artigo Fornecedor do Terraform.
    • autoscaling: crie um node pool com o dimensionamento automático ativado. Quando o GKE dimensiona um conjunto de nós de fatia de TPU com vários anfitriões, dimensiona atomicamente o conjunto de nós de zero para o tamanho máximo.
      • MAX_NODES: o tamanho máximo do node pool. O valor tem de ser igual ao produto dos valores definidos em TPU_TOPOLOGY ({A}x{B}x{C}) dividido pelo número de chips em cada MV. Por exemplo, se TPU_TOPOLOGY for 2x2x2, o produto é 8. Uma vez que cada MV em tpu7x-standard-4t tem 4 chips, o número de nós é 2.
    • spot: o node pool que vai usar VMs do Spot para os nós da fatia de TPU. Não é possível alterar esta definição após a criação do conjunto de nós. Para mais informações, consulte VMs de spot.
    • flex_start: o conjunto de nós que vai usar a opção de consumo flex-start. Não é possível definir esta definição como true se spot estiver ativado.

Outras versões do TPU

Pode criar um nó de segmento de TPU multi-anfitrião na versão v3, v4, v5p, v5e e Trillium (v6e) através da CLI Google Cloud, do Terraform ou da Google Cloud consola.

gcloud

  gcloud container node-pools create NODE_POOL_NAME \
      --cluster=CLUSTER_NAME \
      --location=CONTROL_PLANE_LOCATION \
      --node-locations=NODE_ZONES \
      --machine-type=MACHINE_TYPE \
      --tpu-topology=TPU_TOPOLOGY \
      --reservation-affinity=specific \
      --reservation=FUTURE_RESERVATION_NAME

Substitua o seguinte:

  • NODE_POOL_NAME: o nome do novo grupo de nós.
  • CLUSTER_NAME: o nome do cluster.
  • CONTROL_PLANE_LOCATION: o nome da zona com base na versão da TPU que quer usar. Para identificar uma localização disponível, consulte o artigo Disponibilidade de TPUs no GKE.
  • NODE_ZONES: a lista separada por vírgulas de uma ou mais zonas onde o GKE cria o conjunto de nós.
  • MACHINE_TYPE: o tipo de máquina a usar para os nós. Para mais informações sobre os tipos de máquinas compatíveis com a TPU, use a tabela em Escolha a versão da TPU.
  • TPU_TOPOLOGY: a topologia da TPU. Por exemplo, 2x2x2. Para ver todas as topologias de TPUs suportadas, consulte a secção de topologia.
  • FUTURE_RESERVATION_NAME: o nome da sua reserva futura.

Terraform

  1. Certifique-se de que usa a versão 4.84.0 ou posterior do fornecedor google.
  2. Adicione o seguinte bloco à configuração do Terraform:

    resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" {
      provider           = google
      project            = PROJECT_ID
      cluster            = CLUSTER_NAME
      name               = POOL_NAME
      location           = CLUSTER_LOCATION
      node_locations     = [NODE_ZONES]
      initial_node_count = NUM_NODES
    
      autoscaling {
        max_node_count = MAX_NODES
        location_policy      = "ANY"
      }
      node_config {
        machine_type = MACHINE_TYPE
        reservation_affinity {
          consume_reservation_type = "SPECIFIC_RESERVATION"
          key = "compute.googleapis.com/reservation-name"
          values = [RESERVATION_LABEL_VALUES]
        }
        flex_start = false
      }
    
      placement_policy {
        type = "COMPACT"
        tpu_topology = TPU_TOPOLOGY
      }
    }
    

    Substitua o seguinte:

    • NODE_POOL_RESOURCE_NAME: o nome do recurso do conjunto de nós no modelo do Terraform.
    • PROJECT_ID: o ID do projeto.
    • CLUSTER_NAME: o nome do cluster existente ao qual adicionar o conjunto de nós.
    • POOL_NAME: o nome do node pool a criar.
    • CLUSTER_LOCATION: calcular a localização do cluster. Recomendamos que tenha um cluster regional para uma maior fiabilidade do plano de controlo do Kubernetes. Também pode usar um cluster zonal. Para saber mais, consulte o artigo Selecione uma versão e uma topologia da TPU.
    • NODE_ZONES: a lista separada por vírgulas de uma ou mais zonas onde o GKE cria o conjunto de nós.
    • NUM_NODES: o número de nós no node pool. Tem de ser zero ou o produto do número de chips de TPU dividido por quatro, porque nas fatias de TPU com vários anfitriões, cada nó de fatia de TPU tem 4 chips. Por exemplo, se TPU_TOPOLOGY for 4x8, existem 32 chips, o que significa que NUM_NODES tem de ser 8. Para saber mais sobre as topologias de TPU, use a tabela em Escolha a versão do TPU.
    • TPU_TOPOLOGY: isto indica a topologia física da fatia da TPU. O formato da topologia depende da versão da TPU que está a usar. Para saber mais sobre as topologias de TPUs, use a tabela em Escolha uma topologia.

    Opcionalmente, também pode usar as seguintes variáveis:

    • RESERVATION_NAME: se usar a reserva de TPU, esta é a lista de etiquetas dos recursos de reserva a usar quando criar o conjunto de nós. Para saber como preencher o campo RESERVATION_LABEL_VALUES no campo reservation_affinity, consulte o artigo Fornecedor do Terraform.
    • autoscaling: crie um node pool com o dimensionamento automático ativado. Quando o GKE dimensiona um conjunto de nós de fatia de TPU com vários anfitriões, dimensiona atomicamente o conjunto de nós de zero para o tamanho máximo.
      • MAX_NODES: é o tamanho máximo do node pool. Tem de ser igual ao produto dos valores definidos em TPU_TOPOLOGY ({A}x{B}x{C}) dividido pelo número de chips em cada MV).
    • spot: permite que o node pool use VMs do Spot para os nós da fatia de TPU. Não é possível alterar esta opção após a criação do conjunto de nós. Para mais informações, consulte VMs de spot.
    • flex_start: define o conjunto de nós para usar a opção de consumo flex-start. Não é possível definir como true se spot estiver ativado.

Consola

Para criar um node pool com TPUs:

  1. Aceda à página Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. Na lista de clusters, clique no nome do cluster que quer modificar.

  3. Clique em Adicionar conjunto de nós.

  4. Na secção Detalhes do conjunto de nós, selecione a caixa Especificar localizações dos nós.

  5. Selecione o nome da zona com base na versão da TPU que quer usar. Para identificar uma localização disponível, consulte o artigo Disponibilidade de TPUs no GKE.

  6. No painel de navegação, clique em Nodes.

  7. Na secção Configuração da máquina, selecione TPUs.

  8. No menu pendente Série, selecione uma das seguintes opções:

    • CT3: TPU v3, dispositivo de anfitrião único
    • CT3P: TPU v3, fatia de pod multi-host
    • CT4P: TPU v4
    • CT5LP: TPU v5e
    • CT5P: TPU v5p
    • CT6E: TPU Trillium (v6e)
  9. No menu pendente Tipo de máquina, selecione o nome da máquina a usar para os nós. Use a tabela Escolha a versão do TPU para saber como definir o tipo de máquina e a topologia do TPU que criam um conjunto de nós de fatia do TPU com vários anfitriões.

  10. No menu pendente Topologia da TPU, selecione a topologia física para a fatia da TPU.

  11. Na caixa de diálogo Alterações necessárias, clique em Fazer alterações.

  12. Certifique-se de que o Tipo de disco de arranque é um Disco persistente padrão ou um Disco persistente SSD.

  13. Opcionalmente, selecione a caixa de verificação Ativar nós em VMs de capacidade instantânea para usar VMs de capacidade instantânea para os nós no conjunto de nós.

  14. Clique em Criar.

Depois de criar um conjunto de nós com a reserva de calendário, pode implementar a sua carga de trabalho como qualquer outro conjunto de nós de TPU. O consumo de reservas futuras no modo de calendário funciona da mesma forma que para qualquer outro tipo de reserva. Para mais informações, consulte o artigo Consumir recursos zonais reservados.

O que se segue?