TPUs preemptivas

TPUs preemptivas custam muito menos do que as não preventivas. O serviço da Cloud TPU pode forçar a interrupção (encerrar) essas TPUs a qualquer momento, se ela exigir mais recursos da TPU.

É possível criar um nó de TPU preemptivo usando o Console do Cloud ou a ferramenta de linha de comando gcloud. O comando gcloud que você usa depende do uso de VMs ou nós de TPU. Para mais informações, consulte Arquitetura do sistema.

Como criar uma VM preemptiva da TPU

Console

  1. Acesse a página "TPUs" na página principal do Compute Engine.
  2. Clique em CRIAR NÓ DE TPU para abrir a página de criação de nó da TPU.
  3. Digite um nome para o nó de TPU.
  4. Selecione a zona em que o nó de TPU será criado.
  5. No menu Configurações da TPU, selecione Arquitetura da VM de TPU.
  6. Selecione um Tipo de TPU para o nó de TPU.
  7. Selecione Ativar a preempção deste nó para tornar o nó de TPU preemptivo.
  8. Selecione a versão do software de TPU. Por exemplo, tpu-vm-tf-2.7.0 para VMs de TPU.

gcloud

$ gcloud alpha compute tpus tpu-vm create demo-tpu \
  --zone=europe-west4-a \
  --accelerator-type=v3-8
  --version=tpu-vm-tf-2.7.0 \
  --preemptible
  

onde:

  • demo-tpu é um nome para a TPU;
  • `--accelerator-type especifica o tipo de TPU;
  • --version especifica a versão do software de VM da TPU a ser instalada;
  • --preemptible permite que a Cloud TPU force a interrupção da TPU.

Como criar um nó de TPU legado preemptivo

Console

  1. Acesse a página "TPUs" na página principal do Compute Engine.
  2. Clique em CRIAR NÓ DE TPU para abrir a página de criação de nó da TPU.
  3. Digite um nome para o nó de TPU.
  4. Selecione a zona em que o nó de TPU será criado.
  5. Selecione um Tipo de TPU para o nó de TPU.
  6. Clique em Ativar a preempção deste nó para ativar a capacidade de preempção do nó de TPU.
  7. Selecione a versão do TensorFlow ou do PyTorch para instalar na VM.

gcloud

$ gcloud compute tpus execution-groups create demo-tpu \
  --zone=europe-west4-a \
  --accelerator-type=v3-8
  --version=2.7.0 \
  --preemptible
  

onde:

  • demo-tpu é um nome para a TPU;
  • `--accelerator-type especifica o tipo de TPU;
  • --version especifica a versão do TensorFlow ou do PyTorch a ser instalada na VM.
  • --preemptible permite que a Cloud TPU force a interrupção da TPU.

Com os nós da TPU, o status preemptivo de uma TPU é independente do status preemptivo da instância de VM.

Preços e cotas para TPUs preemptivas

O preço das TPUs preemptíveis é significativamente menor do que das TPUs normais. Para detalhes, consulte a página de preços. Não haverá cobranças pelas TPUs caso elas sejam interrompidas no primeiro minuto após a criação.

Geralmente, a cota para TPUs preemptivas é maior e contabilizada separadamente da cota para TPUs normais. Consulte a página de cotas.

VMs e TPUs preemptivas (somente nós de TPU)

Conforme descrito no guia de início rápido, é necessário uma máquina virtual (VM, na sigla em inglês) do Compute Engine para se conectar a uma TPU. Observe que o status preemptivo da TPU é independente do status preemptivo da VM. É possível definir a TPU como preemptiva e a VM como não preemptiva ou vice-versa. Outra opção é definir ambas como preemptivas.

A combinação mais provável é uma TPU preemptiva e uma VM não preemptiva. Observe os seguintes detalhes:

  • As cobranças pela VM provavelmente serão baixas em comparação às cobranças pela TPU. As cobranças pela VM dependem do tipo de máquina usado. Consulte a página de preços para ver um exemplo simples dos custos relativos.
  • O Cloud TPU não coordena a preempção da VM com a da TPU. Se você definir ambas como preemptivas, elas poderão ser interrompidas em momentos diferentes.
  • Se o Compute Engine forçar a interrupção da VM, você ainda será cobrado pela TPU, a menos que ela também seja interrompida. Observe que a TPU permanece inativa enquanto a VM é interrompida.
  • As instâncias preemptivas, tanto as instâncias de VM do Compute Engine quanto as do Cloud TPU, são sempre interrompidas após 24 horas. Certas ações redefinem esse contador de 24 horas.

Como descobrir se uma TPU foi interrompida

Use o comando gcloud para verificar se o serviço do Cloud TPU encerrou por preempção sua TPU:

Liste as TPUs disponíveis:

(vm)$ gcloud compute tpus list

O comando acima exibe os detalhes das TPUs criadas no seu projeto. Se uma TPU tiver sido interrompida, o status mudará de READY para PREEMPTED.

Exemplo:

NAME       ZONE           ACCELERATOR_TYPE  NETWORK_ENDPOINT   NETWORK  RANGE          STATUS
demo-tpu   us-central1-b  v2-8              10.240.1.2:8470    default  10.240.1.0/29  PREEMPTED

Como detectar se uma instância de VM foi interrompida (somente nós da TPU)

Para verificar se a instância da VM foi interrompida, use o comando gcloud compute operations list para conseguir uma lista de operações recentes do sistema. Adicione um filtro name para exibir apenas as instâncias em execução no momento ou adicione o filtro operationType para exibir apenas os recursos que foram interrompidos. Por exemplo, use o seguinte comando para exibir apenas as instâncias com o nome de instância especificado:

$ gcloud compute operations list--filter="name=( 'NAME' my-vm)"

O exemplo a seguir exibe apenas os recursos que foram interrompidos:

$ gcloud compute operations list --filter="operationType=compute.instances.preempted"

Para saber mais, consulte o guia do Compute Engine.

Como projetar um aplicativo de aprendizado de máquina executável em TPUs preemptivas

Seu aplicativo precisa ser resiliente a reinicializações da VM e da TPU. Para isso, salve regularmente os checkpoints do modelo e configure o aplicativo para restaurar o checkpoint mais recente ao reiniciar.