Criar um MIG com uma fração do Cloud TPU de vários hosts
Neste documento, descrevemos como criar um grupo gerenciado de instâncias (MIG) com uma fração de TPU de vários hosts.
Pré-requisitos
Siga os seguintes pré-requisitos:
- Crie um projeto para suas TPUs, conforme descrito em Configurar um projeto para TPUs.
- Determine os requisitos de TPU conforme descrito em Planejar os recursos.
Criar um MIG com frações de TPU de vários hosts
- Criar um modelo de instância.
- Criar uma política de carga de trabalho.
- Crie o MIG.
Criar um modelo de instância
O comando para criar um modelo de instância depende da opção de consumo usada: on demand, Spot, vinculada à reserva ou início flexível. Para mais informações sobre as opções de consumo, consulte Planejar os recursos de TPU.
Criar um modelo de instância para uma VM de TPU on demand
O comando a seguir cria um modelo de instância usando 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",
"scheduling": {
"onHostMaintenance": "TERMINATE"
},
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
}
}
],
"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: 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.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 usando a opção de consumo do 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: 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.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 de TPU vinculada à reserva
O comando a seguir cria um modelo de instância usando a opção de consumo vinculado à reserva:
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: 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.RESERVATION_NAME: o nome da reserva específica que será consumida. Para todas as reservas do modo de capacidade, é possível segmentar um bloco ou sub-bloco especificando o link de reserva da seguinte maneira:Especifique um bloco:
RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAMEEspecifique 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 usando a opção de consumo de 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: 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 de execução da VM de TPU. Para REST, especifique como um número de segundos (por exemplo,3600para 1 hora ou604800para 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 uma política de carga de trabalho
É preciso criar uma política de carga de trabalho com o parâmetro accelerator-topology (por exemplo, 4x4, 8x8 ou 4x4x4). A topologia do acelerador configura o MIG para tratar as instâncias como uma única fração interconectada.
O comando a seguir cria uma política de carga de trabalho para uma topologia específica:
gcloud
gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
--type=high-throughput \
--accelerator-topology=TOPOLOGY \
--region=REGION
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"name": "WORKLOAD_POLICY_NAME",
"workloadPolicy": {
"type": "HIGH_THROUGHPUT",
"acceleratorTopology": "TOPOLOGY"
}
}' \
"https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies"
Substitua os seguintes marcadores de posição:
PROJECT_ID: ID do seu projeto do Google Cloud .WORKLOAD_POLICY_NAME: o nome da política de carga de trabalho.TOPOLOGY: a topologia das VMs de TPU, por exemplo,4x4x8. Para mais informações sobre a topologia de cada versão de TPU, consulte Arquitetura do sistema.REGION: a região da política de carga de trabalho.
Criar um MIG
Para criar um MIG zonal que contenha uma fração de TPU de vários hosts, use o seguinte comando:
gcloud
gcloud compute instance-groups managed create MIG_NAME \
--size=MIG_SIZE \
--target-size-policy-mode=bulk \
--template=INSTANCE_TEMPLATE_URL \
--zone=ZONE \
--default-action-on-vm-failure=do-nothing \
--workload-policy=WORKLOAD_POLICY_URL
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"name": "MIG_NAME",
"targetSize": MIG_SIZE,
"targetSizePolicy": {
"mode": "BULK"
},
"instanceTemplate": "INSTANCE_TEMPLATE_URL",
"instanceLifecyclePolicy": {
"defaultActionOnFailure": "DO_NOTHING"
},
"resourcePolicies": {
"workloadPolicy": "WORKLOAD_POLICY_URL"
}
}' \
"https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers"
Substitua os seguintes marcadores de posição:
PROJECT_ID: 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
- Para um modelo de instância regional:
ZONE: a zona do MIG.WORKLOAD_POLICY_URL: o URL da política de carga de trabalho que você quer usar para criar instâncias no MIG. Por exemplo,projects/PROJECT_ID/regions/WORKLOAD_POLICY_REGION/resourcePolicies/WORKLOAD_POLICY_NAME.
Para criar um MIG regional que contenha uma fração de TPU de vários hosts, use o seguinte comando:
gcloud
gcloud compute instance-groups managed create MIG_NAME \
--size=MIG_SIZE \
--target-size-policy-mode=bulk \
--template=INSTANCE_TEMPLATE_URL \
--region=REGION \
--default-action-on-vm-failure=do-nothing \
--workload-policy=WORKLOAD_POLICY_URL \
--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,
"targetSizePolicy": {
"mode": "BULK"
},
"instanceTemplate": "INSTANCE_TEMPLATE_URL",
"instanceLifecyclePolicy": {
"defaultActionOnFailure": "DO_NOTHING"
},
"resourcePolicies": {
"workloadPolicy": "WORKLOAD_POLICY_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: 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
- Para um modelo de instância regional:
ZONE: a zona do MIG.REGION: a região do MIG.WORKLOAD_POLICY_URL: o URL da política de carga de trabalho que você quer usar para criar instâncias no MIG. Por exemplo,projects/PROJECT_ID/regions/WORKLOAD_POLICY_REGION/resourcePolicies/WORKLOAD_POLICY_NAME.
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 depurar e garantir que as instâncias sejam criadas em uma ordem específica.
Os MIGs que contêm uma fração de TPU de vários hosts usam o modo em massa da política de tamanho de destino. Ao criar VMs com nomes personalizados em um MIG, as seguintes condições se aplicam:
Primeiro, verifique se o MIG não tem VMs. Se o MIG tiver VMs, será necessário redimensionar o MIG para o tamanho de destino
0ou criar outro MIG com o tamanho de destino0.Só é possível usar a API REST para criar VMs com nomes personalizados.
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
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
- Saiba mais sobre VMs de TPU e MIGs.
- Saiba como criar um MIG com uma fração de Cloud TPU de host único.
- Saiba como gerenciar VMs de TPU.
- Saiba mais sobre TPUs no GKE.