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
- Acesse a página "TPUs" na página principal do Compute Engine.
- Clique em CRIAR NÓ DE TPU para abrir a página de criação de nó da TPU.
- 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.
- Clique na opção de preempção para tornar este novo nó da TPU preemptivo.
- Especifique os atributos restantes para esse nó da TPU.
- 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 imagemtf-1-15
para 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
- Para orientações sobre a criação de recursos de TPU, consulte o guia de início rápido.