Esta página foi traduzida pela API Cloud Translation.
Switch to English

Como usar TPUs preemptivas

Um nó da TPU preemptiva é um nó da Cloud TPU que é executado a um preço muito mais baixo que os nós comuns. No entanto, o Cloud TPU poderá encerrar esses nós (forçar a interrupção) a qualquer momento se precisar de acesso aos recursos para outra finalidade.

Como criar uma TPU preemptiva

É possível criar um nó de TPU preemptiva usando o Console do Cloud, a ferramenta de linha de comando gcloud ou o utilitário ctpu.

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. Na parte inferior da página "Criar uma Cloud TPU", clique em Rótulos e descrição para mostrar a opção de preempção.
  4. Clique na opção de preempção para tornar este novo nó da TPU preemptivo.
  5. Especifique os atributos restantes para esse nó da TPU.
  6. Na parte inferior da página, clique em Criar para gerar o nó da TPU.

gcloud

Caso precise de uma configuração personalizada, use o comando gcloud em vez do ctpu para criar e gerenciar os recursos da TPU. Para saber mais sobre configurações personalizadas, consulte a página Como criar e excluir TPUs. Para criar uma TPU preemptiva, use o mesmo comando gcloud compute tpus create usado ao criar a TPU normal, mas adicione a sinalização --preemptible:

$ gcloud compute tpus create demo-tpu \
  --version=2.1 \
  --preemptible
  

onde:

  • demo-tpu é o nome de identificação da TPU que está sendo criada;
  • --version especifica a versão do TensorFlow a ser usada com a TPU;
  • --preemptible permite que a Cloud TPU force a interrupção da TPU.

ctpu

Para criar uma TPU preemptiva, use o mesmo comando ctpu up usado ao criar a TPU normal, mas adicione a sinalização --preemptible:

$ ctpu up --preemptible

É preciso especificar a sinalização --preemptible cada vez que você executar ctpu up para a TPU preemptiva. As sinalizações de linha de comando e os respectivos valores padrão se aplicam a cada invocação de comando individualmente.

O status preemptivo da TPU independe do status preemptivo da instância de VM. Veja abaixo mais detalhes sobre VMs e TPUs preemptivas.

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

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.

É possível usar o comando ctpu ou gcloud para definir uma VM preemptiva:

ctpu

Para criar uma VM preemptiva, use o mesmo comando ctpu up usado na criação de uma TPU com uma VM normal, mas adicione a sinalização --preemptible-vm:

$ ctpu up --preemptible-vm

É preciso especificar a sinalização --preemptible-vm cada vez que você executar ctpu up para a TPU preemptiva. As sinalizações de linha de comando e os respectivos valores padrão se aplicam a cada invocação de comando individualmente.

gcloud

Caso precise de uma configuração personalizada, use o comando gcloud em vez do ctpu para criar e gerenciar os recursos da TPU. Para saber mais sobre configurações personalizadas, consulte a página Como criar e excluir TPUs. Para criar uma VM preemptiva, use o mesmo comando gcloud compute instances create usado na criação de uma VM normal, mas adicione a sinalização --preemptible:

$ gcloud compute instances create tpu-demo-vm \
  --machine-type=n1-standard-2 \
  --image-project=ml-images \
  --image-family=tf-1-15 \
  --scopes=cloud-platform \
  --preemptible

onde:

  • tpu-demo-vm é o nome de identificação da instância de VM que está sendo criada;
  • --machine-type=n1-standard-2 é um tipo de máquina padrão com 4 CPUs virtuais e 15 GB de memória. Consulte os tipos de máquina disponíveis;
  • --image-project=ml-images é uma coleção compartilhada de imagens que disponibiliza a imagem tf-1-15para uso;
  • --image-family=tf-1-15 é uma imagem com o pacote pip exigido para o TensorFlow;
  • --scopes=cloud-platform permite que a VM acesse as APIs Google Cloud.
  • --preemptible permite que o Compute Engine force a interrupção da instância da VM.

Consulte a documentação do Compute Engine sobre criação de instâncias de VM preemptivas.

Como descobrir se uma TPU foi interrompida

É possível usar o comando ctpu ou gcloud para verificar se o serviço da Cloud TPU substituiu sua TPU:

ctpu

Verifique o status das TPUs:

$ ctpu status

O comando acima imprime os detalhes das TPUs criadas. O valor impresso de TPU preemptiva indica se a TPU é preemptiva ou não. Se o Estado da TPU impresso for READY, a TPU não terá sido interrompida. Se a TPU tiver sido interrompida, o estado mudará de READY para PREEMPTED.

gcloud

Liste as TPUs disponíveis:

(vm)$ gcloud compute tpus list

O comando acima imprime os detalhes das TPUs criadas. Se o STATUS impresso for READY, a TPU não será interrompida. Se a TPU tiver sido interrompida, o status mudará de READY para PREEMPTED. Por 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 descobrir se uma instância de VM foi interrompida

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 deve ser resiliente a reinicializações da VM e da TPU. Para isso, salve regularmente os pontos de verificação do modelo e configure o aplicativo para restaurar o ponto mais recente ao reiniciar.

A API TPUEstimator do TensorFlow salva e restaura os pontos de verificação do modelo para você. Se você usa o TPUEstimator, não precisa se preocupar em salvar ou restaurar os checkpoints das TPUs ou VMs. Leia mais sobre Como usar a TPUEstimator com a Cloud TPU.

A prática recomendada é usá-la com a Cloud TPU, conforme descrito acima. No entanto, se você quiser investigar como gravar a função de salvamento e restauração de checkpoints no seu próprio modelo, consulte os seguintes recursos no módulo tf.train do TensorFlow:

A seguir