Solicitar TPUs com reserva adiantada no modo de calendário

Neste guia, mostramos como otimizar o provisionamento da Unidade de Processamento de Tensor (TPUs) usando a reserva adiantada no modo de agenda. A reserva adiantada no modo de calendário é um consultor e recomendador de calendário integrado que pode ajudar você a localizar capacidade de TPU e se planejar com antecedência. Você pode solicitar capacidade para um horário de início e uma duração especificados, entre 1 e 90 dias, e o recomendador vai fornecer datas sugeridas.

Este guia é destinado a engenheiros de machine learning (ML), administradores e operadores de plataforma e especialistas em dados e IA interessados em usar os recursos de orquestração de contêineres do Kubernetes para executar cargas de trabalho em lote. Para mais informações sobre papéis comuns e tarefas de exemplo que referenciamos no conteúdo do Google Cloud , consulte Funções e tarefas comuns do usuário do GKE.

Para mais informações, consulte Sobre reservas adiantadas no modo de calendário.

Casos de uso

A reserva adiantada no modo de calendário funciona melhor para cargas de trabalho com solicitações programadas, de curto prazo e de alta demanda, como treinamento ou modelos de inferência em lote que exigem alta disponibilidade no horário de início solicitado.

Se a carga de trabalho exigir recursos provisionados dinamicamente conforme necessário, por até 7 dias sem reservas de longo prazo ou gerenciamento complexo de cotas, use a opção de consumo de flex-start. Para mais informações, consulte Sobre o provisionamento de GPUs e TPUs com início flexível.

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 uma das seguintes opções:

Solicitar reserva adiantada no modo de calendário para TPUs

O processo para solicitar TPUs com reserva adiantada no modo de agenda envolve as seguintes etapas:

  1. Verifique se você tem cota suficiente para recursos que não fazem parte de uma reserva quando as VMs são criadas, como discos ou endereços IP. As solicitações de reserva adiantada no modo de calendário não exigem cota do Compute Engine.
  2. Siga as etapas em criar uma solicitação no modo de calendário. Essas etapas incluem o seguinte:
    1. Confira a disponibilidade futura de TPUs.
    2. Crie e envie uma solicitação de reserva adiantada no modo de calendário para TPUs.
    3. Aguarde Google Cloud aprovar sua solicitação.
  3. Crie um pool de nós da TPU que use sua reserva.

Crie um pool de nós.

Esta seção se aplica apenas aos clusters Standard, porque o modo Autopilot cria nós automaticamente com base nas cargas de trabalho.

É possível usar sua reserva ao criar pools de nós de fração de TPU de host único ou de vários hosts.

Criar um pool de nós de fração de TPU de host único

É possível criar um pool de nós de fatia da TPU de host único usando 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:

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

Para uma lista completa de todas as flags que podem ser especificadas, consulte a referência gcloud container clusters create.

Depois de criar um pool de nós com a reserva de calendário, você pode implantar sua carga de trabalho como qualquer outro pool de nós de TPU. O consumo de uma reserva adiantada no modo de calendário funciona da mesma forma que qualquer outro tipo de reserva. Para mais informações, consulte Consumo de recursos zonais reservados.

Criar um pool de nós de fração de TPU com vários hosts

As etapas para criar um pool de nós de fração de TPU de vários hosts variam dependendo se você usa o Ironwood (TPU7x) ou uma versão anterior da TPU.

Ironwood (TPU7x)

É possível criar um pool de nós de fração de TPU de vários hosts na versão Ironwood (TPU7x) usando a Google Cloud CLI ou o Terraform:

gcloud

Para criar um pool de nós de fração de TPU de vários hosts com Ironwood (TPU7x), primeiro crie 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:

    • WORKLOAD_POLICY_NAME: um nome para a política de carga de trabalho.
    • TPU_TOPOLOGY: a topologia da TPU Ironwood (TPU7x). Por exemplo, 2x2x2. Para conferir todas as topologias do Ironwood (TPU7x) compatíveis, consulte a seção de topologia.
    • 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.
  2. Crie o pool de nós com a política de carga de trabalho:

    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:

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

    Esse comando cria um pool de nós chamado NODE_POOL_NAME com as seguintes características:

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

Terraform

  1. Use a versão 4.84.0 ou mais recente do provedor 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:

    • WORKLOAD_POLICY_NAME: um nome para a política de carga de trabalho.
    • CLUSTER_LOCATION: local do Compute do cluster. Recomendamos ter um cluster regional para aumentar a confiabilidade do plano de controle do Kubernetes. Também é possível usar um cluster zonal. Para mais informações, consulte Selecionar uma versão e uma topologia de TPU.
    • TPU_TOPOLOGY: a topologia da TPU Ironwood (TPU7x). Por exemplo, 2x2x2. Para conferir todas as topologias do Ironwood (TPU7x) compatíveis, consulte Planejar TPUs.

    Para mais informações sobre a referência google_compute_resource_policy, consulte Provedor 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:

    • NODE_POOL_RESOURCE_NAME: o nome do recurso do pool de nós no modelo do Terraform.
    • PROJECT_ID: o ID do projeto.
    • CLUSTER_NAME: o nome do cluster atual ao qual o pool de nós será adicionado.
    • POOL_NAME: o nome do pool de nós a ser criado;
    • NODE_ZONES: a lista separada por vírgulas de uma ou mais zonas em que o GKE cria o pool de nós.
    • NUM_NODES: o número de nós no pool de nós. Esse valor precisa ser zero ou o produto do número de chips de TPU dividido por quatro. Isso acontece porque, nas frações da TPU de vários hosts, cada nó de fração da TPU tem quatro chips. Por exemplo, se TPU_TOPOLOGY for 4x8, haverá 32 chips, o que significa que NUM_NODES precisa ser 8. Para saber mais sobre topologias de TPU, use a tabela em Escolher a versão de TPU.
    • TPU_TOPOLOGY: indica a topologia física selecionada para a fração de TPU. O formato da topologia depende da versão da TPU usada. Para saber mais sobre topologias de TPU, use a tabela em Escolher uma topologia.

    Também é possível usar as seguintes variáveis:

    • RESERVATION_NAME: se você usar uma reserva de TPU, forneça uma lista de rótulos de recursos de reserva a serem usados ao criar o pool de nós. Para saber como preencher o RESERVATION_LABEL_VALUES no campo reservation_affinity, consulte Provedor do Terraform.
    • autoscaling: crie um pool de nós com o escalonamento automático ativado. Quando o GKE escalona um pool de nós de uma fração da TPU de vários hosts, ele escalona horizontalmente e de maneira atomizada esse pool de nós de zero até o tamanho máximo.
      • MAX_NODES: o tamanho máximo do pool de nós. O valor precisa ser igual ao produto dos valores definidos em TPU_TOPOLOGY ({A}x{B}x{C}) dividido pelo número de chips em cada VM. Por exemplo, se TPU_TOPOLOGY for 2x2x2, o produto será 8. Como cada VM em tpu7x-standard-4t tem quatro chips, o número de nós é dois.
    • spot: o pool de nós que vai usar VMs spot para os nós de fração de TPU. Não é possível mudar essa configuração depois que o pool de nós é criado. Para mais informações, consulte VMs spot.
    • flex_start: o pool de nós que vai usar a opção de consumo flex-start. Essa configuração não pode ser definida como true se spot estiver ativado.

Outras versões de TPU

É possível criar um pool de nós de fração da TPU de vários hosts nas versões v3, v4, v5p, v5e e Trillium (v6e) usando a Google Cloud CLI, o Terraform ou o console Google Cloud .

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:

  • NODE_POOL_NAME: o nome do novo pool de nós.
  • CLUSTER_NAME: o nome do cluster.
  • CONTROL_PLANE_LOCATION: o nome da zona com base na versão da TPU que você quer usar. Para identificar um local disponível, consulte Disponibilidade da TPU no GKE.
  • NODE_ZONES: a lista separada por vírgulas de uma ou mais zonas em que o GKE cria o pool de nós.
  • MACHINE_TYPE: o tipo de máquina a ser usado para nós. Para mais informações sobre os tipos de máquinas compatíveis com TPU, use a tabela em Escolher a versão da TPU.
  • TPU_TOPOLOGY: a topologia da TPU. Por exemplo, 2x2x2. Para conferir todas as topologias de TPU compatíveis, consulte a seção de topologia.
  • FUTURE_RESERVATION_NAME: o nome da sua reserva adiantada.

Terraform

  1. Use a versão 4.84.0 ou mais recente do provedor 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:

    • NODE_POOL_RESOURCE_NAME: o nome do recurso do pool de nós no modelo do Terraform.
    • PROJECT_ID: o ID do projeto.
    • CLUSTER_NAME: o nome do cluster atual ao qual o pool de nós será adicionado.
    • POOL_NAME: o nome do pool de nós a ser criado;
    • CLUSTER_LOCATION: local de computação do cluster. Recomendamos ter um cluster regional para aumentar a confiabilidade do plano de controle do Kubernetes. Também é possível usar um cluster zonal. Para saber mais, consulte Selecionar uma versão de TPU e topologia.
    • NODE_ZONES: a lista separada por vírgulas de uma ou mais zonas em que o GKE cria o pool de nós.
    • NUM_NODES: o número de nós no pool de nós. Esse valor precisa ser zero ou o produto do número de chips de TPU dividido por quatro. Isso acontece porque, nas frações da TPU de vários hosts, cada nó de TPU de fração tem quatro chips. Por exemplo, se TPU_TOPOLOGY for 4x8, haverá 32 chips, o que significa que NUM_NODES precisa ser 8. Para saber mais sobre topologias de TPU, use a tabela em Escolher a versão de TPU.
    • TPU_TOPOLOGY: indica a topologia física da fração de TPU. O formato da topologia depende da versão da TPU usada. Para saber mais sobre topologias de TPU, use a tabela em Escolher uma topologia.

    Também é possível usar as seguintes variáveis:

    • RESERVATION_NAME: se você usar a reserva de TPU, esta será a lista de rótulos dos recursos de reserva a serem usados ao criar o pool de nós. Para saber como preencher o RESERVATION_LABEL_VALUES no campo reservation_affinity, consulte Provedor do Terraform.
    • autoscaling: adicionar um pool de nós com escalonamento automático ativado. Quando o GKE escalona um pool de nós de uma fração da TPU de vários hosts, ele escalona horizontalmente e de maneira atomizada esse pool de nós de zero até o tamanho máximo.
      • MAX_NODES: o tamanho máximo do pool de nós. Ele precisa ser igual ao produto dos valores definidos em TPU_TOPOLOGY ({A}x{B}x{C}) dividido pelo número de chips em cada VM.
    • spot: permite que o pool de nós use VMs spot para os nós de fração de TPU. Isso não pode ser alterado após a criação do pool de nós. Para mais informações, consulte VMs spot.
    • flex_start: define o pool de nós para usar a opção de consumo flex-start. Não pode ser definido como true se spot estiver ativado.

Console

Para criar um pool de nós com TPUs:

  1. Acesse a página do Google Kubernetes Engine no console do Google Cloud .

    Acessar o Google Kubernetes Engine

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

  3. Clique em Adicionar pool de nós.

  4. Na seção Detalhes do pool de nós, marque a caixa Especificar locais do nó.

  5. Selecione o nome da zona com base na versão da TPU que você quer usar. Para identificar um local disponível, consulte Disponibilidade da TPU no GKE.

  6. No painel de navegação, clique em Nós.

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

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

    • CT3: TPU v3, dispositivo de host único
    • CT3P: TPU v3, fração de pod de vários hosts
    • CT4P: TPU v4.
    • CT5LP: TPU v5e
    • CT5P: TPU v5p
    • CT6E: TPU Trillium (v6e)
  9. No menu suspenso Tipo de máquina, selecione o nome da máquina que será usada para os nós. Use a tabela Escolher a versão da TPU para saber como definir o tipo de máquina e a topologia de TPU que criam um pool de nós de fração de TPU de vários hosts.

  10. No menu suspenso 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 inicialização seja Disco permanente padrão ou Disco permanente SSD.

  13. Como opção, marque a caixa de seleção Ativar nós em VMs do Spot para usar VMs do Spot nos nós do pool de nós.

  14. Clique em Criar.

Depois de criar um pool de nós com a reserva de calendário, você pode implantar sua carga de trabalho como qualquer outro pool de nós de TPU. O consumo de uma reserva adiantada no modo de calendário funciona da mesma forma que qualquer outro tipo de reserva. Para mais informações, consulte Consumo de recursos zonais reservados.

A seguir