Neste documento, descrevemos como criar um grupo gerenciado de instâncias (MIG) que forma frações de TPU de host único. Uma fração de TPU de host único é mapeada para uma instância de máquina virtual (VM) de TPU.
Também é possível criar uma fração de TPU de host único como uma instância de TPU independente. Para mais informações, consulte Criar uma instância de VM de TPU.
Antes de começar
- Analise as limitações para criar MIGs com instâncias de TPU.
-
Configure a autenticação, caso ainda não tenha feito isso.
Com isso, você confirma sua identidade para acesso a serviços e APIs do Google Cloud . Para executar
códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no
Compute Engine selecionando uma das seguintes opções:
Selecione a guia para como planeja usar as amostras nesta página:
gcloud
-
Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada. Depois de fazer login, inicialize a Google Cloud CLI executando o seguinte comando:
gcloud init
-
- Defina uma região e uma zona padrão.
REST
Para usar as amostras da API REST desta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.
Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada.
Saiba mais em Autenticar para usar REST na documentação de autenticação do Google Cloud .
Pré-requisitos
Antes de criar uma fração de TPU de host único, faça o seguinte:
Escolha a versão da TPU: selecione a versão da TPU adequada para sua carga de trabalho. Para uma lista de versões de TPU por tipo de carga de trabalho, consulte Versões de TPU recomendadas por tipos de carga de trabalho.
Escolha uma opção de consumo de TPU: selecione uma opção de consumo que melhor se adapte à sua carga de trabalho, à duração dela e às suas necessidades de custo. Para uma lista de disponibilidade de opções de consumo por versões de TPU, consulte Opções de consumo de TPU.
Valide a disponibilidade de TPU no local de sua preferência: as TPUs estão disponíveis em regiões específicas do Google Cloud . Para usar uma versão de TPU, verifique se ela está disponível na região de sua preferência. Para uma lista de locais de TPU, consulte Disponibilidade de TPU.
Verifique se o projeto tem cota de TPU suficiente: se você estiver criando uma fração de TPU de host único com VMs spot, VMs flex-start ou on demand, é preciso ter cota de TPU suficiente disponível na região que você quer usar. A criação de uma fração de TPU de host único que consome uma reserva de TPU não requer nenhuma cota de TPU, já que a cota é usada quando a reserva é criada. Para uma lista de nomes de cotas de TPU, consulte Cota de TPU. Para instruções sobre como visualizar a cota, consulte Visualizar e gerenciar cotas.
Escolha uma topologia: selecione uma topologia compatível com a versão de TPU escolhida. Para ver uma lista de topologias disponíveis para cada versão de TPU, consulte Topologia de TPU.
Criar um MIG com várias frações de TPU de host único
Para criar várias VMs de TPU independentes em um MIG:
- Criar um modelo de instância.
- 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: on demand, Spot, reservas ou início flexível. Para mais informações sobre as opções de consumo, consulte Sobre os modelos de provisionamento de VM.
Criar um modelo de instância para uma VM de TPU on demand
O comando a seguir cria um modelo de instância que usa a opção de consumo on demand:
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: 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).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: 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).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 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: 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 de uma reserva específica que você quer consumir. 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 da VM de TPU. Se você quiser instalar uma versão específica do SO, use a flag--image. Para mais informações sobre imagens de SO, consulte Imagens de 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 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 da VM de TPU (por exemplo,ct6e-standard-8t).DURATION: a duração máxima de execução da VM de TPU. Para REST, especifique isso como uma string que contém o número de segundos seguido por "s" (por exemplo,3600spara 1 hora ou604800spara 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 que contenha 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: 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.
Para criar um MIG regional que contenha 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 \
--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: 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 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 depurar e garantir que as instâncias sejam criadas em uma ordem específica.
gcloud
Crie uma VM com 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_NAMEPara 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:
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
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: