Criar um MIG com frações de Cloud TPU de host único

Neste documento, descrevemos como criar um grupo gerenciado de instâncias (MIG) com várias frações de TPU de host único independentes.

Pré-requisitos

Atenda aos seguintes pré-requisitos:

  1. Crie um projeto para suas TPUs, conforme descrito em Configurar um projeto para TPUs.
  2. Determine seus requisitos de TPU conforme descrito em Planejar seus recursos.

Criar um MIG com várias frações de TPU de host único

Para criar várias VMs de TPU independentes em um MIG:

  1. Criar um modelo de instância.
  2. Crie o MIG.

Criar um modelo de instância

As configurações do modelo de instância variam de acordo com a opção de consumo usada: sob demanda, Spot, reservas ou início flexível. Para mais informações sobre opções de consumo, consulte Planejar seus recursos de TPU .

Criar um modelo de instância para uma VM de TPU sob demanda

O comando a seguir cria um modelo de instância que usa a opção de consumo sob demanda:

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "INSTANCE_TEMPLATE_NAME",
    "properties": {
      "machineType": "MACHINE_TYPE",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "scheduling": {
        "onHostMaintenance": "TERMINATE"
      },
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ]
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"

Substitua os seguintes marcadores de posição:

  • PROJECT_ID: o ID do seu projeto do Google Cloud .
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina da VM da TPU (por exemplo, ct6e-standard-8t).
  • IMAGE_FAMILY: a família de imagens do SO para a VM de TPU. Se você quiser instalar uma versão específica do SO, use a flag --image. Para mais informações sobre imagens do SO, consulte Imagens do SO.
  • IMAGE_PROJECT: o projeto que contém a imagem do SO. Para imagens de TPU, é ubuntu-os-accelerator-images.

Criar um modelo de instância para uma VM spot de TPU

O comando a seguir cria um modelo de instância que usa a opção de consumo Spot:

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --instance-termination-action=STOP \
    --provisioning-model=SPOT \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "INSTANCE_TEMPLATE_NAME",
    "properties": {
      "machineType": "MACHINE_TYPE",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "scheduling": {
        "onHostMaintenance": "TERMINATE",
        "provisioningModel": "SPOT",
        "instanceTerminationAction": "STOP"
      },
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ]
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"

Substitua os seguintes marcadores de posição:

  • PROJECT_ID: o ID do seu projeto do Google Cloud .
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina da VM da TPU (por exemplo, ct6e-standard-8t).
  • IMAGE_FAMILY: a família de imagens do SO para a VM de TPU. Se você quiser instalar uma versão específica do SO, use a flag --image. Para mais informações sobre imagens do SO, consulte Imagens do SO.
  • IMAGE_PROJECT: o projeto que contém a imagem do SO. Para imagens de TPU, é ubuntu-os-accelerator-images.

Criar um modelo de instância para uma VM vinculada a uma reserva de TPU

O comando a seguir cria um modelo de instância que usa a opção de consumo reservation-bound:

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --instance-termination-action=DELETE \
    --reservation-affinity=specific \
    --provisioning-model=reservation-bound \
    --reservation=RESERVATION_NAME \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "INSTANCE_TEMPLATE_NAME",
    "properties": {
      "machineType": "MACHINE_TYPE",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "scheduling": {
        "onHostMaintenance": "TERMINATE",
        "provisioningModel": "RESERVATION_BOUND",
        "instanceTerminationAction": "DELETE"
      },
      "reservationAffinity": {
        "consumeReservationType": "SPECIFIC_RESERVATION",
        "key": "compute.googleapis.com/reservation-name",
        "values": [
          "RESERVATION_NAME"
        ]
      },
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ]
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"

Substitua os seguintes marcadores de posição:

  • PROJECT_ID: o ID do seu projeto do Google Cloud .
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina da VM de TPU (por exemplo, ct6e-standard-8t).
  • RESERVATION_NAME: o nome de uma reserva específica que você quer consumir. Para todas as reservas no modo "Toda a capacidade", é possível segmentar um bloco ou subbloco especificando o link de reserva da seguinte forma:

    • Especifique um bloco:

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
      
    • Especifique um sub-bloco:

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME/reservationSubBlocks/RESERVATION_SUBBLOCK_NAME
      
  • IMAGE_FAMILY: a família de imagens do SO para a VM de TPU. Se você quiser instalar uma versão específica do SO, use a flag --image. Para mais informações sobre imagens do SO, consulte Imagens do SO.

  • IMAGE_PROJECT: o projeto que contém a imagem do SO. Para imagens de TPU, é ubuntu-os-accelerator-images.

Criar um modelo de instância para uma VM flex-start de TPU

O comando a seguir cria um modelo de instância que usa a opção de consumo Início flexível:

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --instance-termination-action=DELETE \
    --provisioning-model=FLEX_START \
    --max-run-duration=DURATION \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "INSTANCE_TEMPLATE_NAME",
    "properties": {
      "machineType": "MACHINE_TYPE",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "scheduling": {
        "onHostMaintenance": "TERMINATE",
        "provisioningModel": "FLEX_START",
        "instanceTerminationAction": "DELETE",
        "maxRunDuration": {
          "seconds": "DURATION"
        }
      },
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ]
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"

Substitua os seguintes marcadores de posição:

  • PROJECT_ID: o ID do seu projeto do Google Cloud .
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina para a VM de TPU (por exemplo, ct6e-standard-8t).
  • DURATION: a duração máxima da execução da VM de TPU. Para REST, especifique isso como uma string que contenha o número de segundos seguido por "s" (por exemplo, 3600s para 1 hora ou 604800s para 7 dias).
  • IMAGE_FAMILY: a família de imagens do SO para a VM de TPU. Se você quiser instalar uma versão específica do SO, use a flag --image. Para mais informações sobre imagens do SO, consulte Imagens do SO.
  • IMAGE_PROJECT: o projeto que contém a imagem do SO. Para imagens de TPU, é ubuntu-os-accelerator-images.

Criar um MIG

Para criar um MIG zonal com uma fração de TPU de host único, use o seguinte comando:

gcloud

gcloud compute instance-groups managed create MIG_NAME \
    --size=MIG_SIZE \
    --template=INSTANCE_TEMPLATE_URL \
    --zone=ZONE

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MIG_NAME",
    "targetSize": MIG_SIZE,
    "instanceTemplate": "INSTANCE_TEMPLATE_URL"
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers"

Substitua os seguintes marcadores de posição:

  • PROJECT_ID: o ID do seu projeto do Google Cloud .
  • MIG_NAME: o nome do MIG.
  • MIG_SIZE: o tamanho do MIG.
  • INSTANCE_TEMPLATE_URL: o URL do modelo de instância que você quer usar para criar instâncias no MIG. O URL pode conter o ID ou o nome do modelo de instância. Especifique um dos seguintes valores:
    • Para um modelo de instância regional: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID.
    • Para um modelo de instância global: INSTANCE_TEMPLATE_ID
  • ZONE: a zona do MIG.

Para criar um MIG regional com uma fração de TPU de host único, use o comando a seguir:

gcloud

gcloud compute instance-groups managed create MIG_NAME \
    --size=MIG_SIZE \
    --template=INSTANCE_TEMPLATE_URL \
    --region=REGION \
    --target-distribution-shape=ANY_SINGLE_ZONE \
    --instance-redistribution-type=none

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MIG_NAME",
    "targetSize": MIG_SIZE,
    "instanceTemplate": "INSTANCE_TEMPLATE_URL",
    "distributionPolicy": {
      "targetShape": "ANY_SINGLE_ZONE"
    },
    "updatePolicy": {
      "instanceRedistributionType": "NONE"
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers"

Substitua os seguintes marcadores de posição:

  • PROJECT_ID: o ID do seu projeto do Google Cloud .
  • MIG_NAME: o nome do MIG.
  • MIG_SIZE: o número de VMs no MIG.
  • INSTANCE_TEMPLATE_URL: o URL do modelo de instância que você quer usar para criar instâncias no MIG. O URL pode conter o ID ou o nome do modelo de instância. Especifique um dos seguintes valores:
    • Para um modelo de instância regional: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID.
    • Para um modelo de instância global: INSTANCE_TEMPLATE_ID
  • ZONE: a zona em que você quer provisionar o MIG.
  • REGION: a região em que você quer provisionar o MIG.

Criar VMs com nomes personalizados em um MIG

É possível criar VMs em um MIG especificando nomes personalizados para cada uma delas. Isso é útil para depuração e para garantir que as instâncias sejam criadas em uma ordem específica.

gcloud

Crie uma VM com um nome personalizado usando o comando create-instance e especifique a flag --instance. Para criar várias VMs, repita o comando para cada uma delas. Caso contrário, use o método da API REST para especificar várias VMs em uma única solicitação.

  • Para um MIG zonal, use o seguinte comando:

    gcloud compute instance-groups managed create-instance MIG_NAME \
        --zone=ZONE \
        --instance=INSTANCE_NAME
    
  • Para um MIG regional, use o seguinte comando:

    gcloud compute instance-groups managed create-instance MIG_NAME \
        --region=REGION \
        --instance=INSTANCE_NAME
    

Substitua os seguintes marcadores de posição:

  • MIG_NAME: o nome do MIG.
  • ZONE: a zona do MIG.
  • REGION: a região do MIG.
  • INSTANCE_NAME: o nome da VM a ser adicionada ao MIG especificado.

REST

Crie VMs com nomes personalizados usando um dos seguintes métodos da API REST:

  • Para um MIG zonal, use o instanceGroupManagers.createInstances.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/createInstances
     {
       "instances": [
         {
           "name": "INSTANCE_NAME_1"
         },
         {
           "name": "INSTANCE_NAME_2"
         },
         ...
       ]
     }
     

  • Para um MIG regional, use o método regionInstanceGroupManagers.createInstances.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/createInstances
     {
       "instances": [
         {
           "name": "INSTANCE_NAME_1"
         },
         {
           "name": "INSTANCE_NAME_2"
         },
         ...
       ]
     }
     

Substitua os seguintes marcadores de posição:

  • PROJECT_ID: o ID do projeto em que o MIG existe.
  • ZONE: a zona do MIG.
  • REGION: a região do MIG.
  • INSTANCE_NAME_1,2,..: os nomes das VMs a serem adicionadas ao MIG especificado.

A seguir