Como configurar o Cloud TPU no GKE

Nesta página, você verá um guia rápido de como configurar o Cloud TPU com o Google Kubernetes Engine (GKE). Se quiser ler as instruções detalhadas, siga o tutorial que mostra como treinar o modelo ResNet-50 do TensorFlow usando o Cloud TPU e o GKE.

Por que usar o GKE?

O GKE oferece clusters do Kubernetes como um serviço gerenciado.

  • Facilidade de configuração e gerenciamento: para usar a Cloud TPU, é preciso ter uma VM do Compute Engine para executar a carga de trabalho e um bloco de roteamento entre domínios sem classificação (CIDR, na sigla em inglês) para a Cloud TPU. O GKE configura e gerencia a VM e o bloco de CIDR para você.

  • Custo otimizado: o GKE escalona as VMs e os nós da Cloud TPU automaticamente com base nas cargas de trabalho e no tráfego. Você pagará pela Cloud TPU e pela VM apenas quando executar cargas de trabalho nelas.

  • Uso flexível: basta alterar uma linha na especificação do pod para solicitar um acelerador de hardware diferente (CPU, GPU ou TPU)

    kind: Pod
    spec:
      containers:
      - name: example-container
        resources:
          limits:
            cloud-tpus.google.com/v2: 8
            # See the line above for TPU, or below for CPU / GPU.
            # cpu: 2
            # nvidia.com/gpu: 1
    
  • Escalonabilidade: o GKE fornece a API Deployment, que pode ser facilmente escalonada para centenas de pods e nós do Cloud TPU.

  • Tolerância a falhas: a API Job do GKE e o mecanismo de ponto de verificação do TensorFlow fornecem a semântica da execução à conclusão. Em caso de falha nas instâncias de VMs ou nos nós da Cloud TPU, os jobs de treinamento são automaticamente executados de novo com o estado mais recente lido no checkpoint.

Requisitos e limitações

Ao definir sua configuração, observe o seguinte:

  • Use o GKE na versão 1.13.4-gke.5 ou posterior. Para especificá-la, adicione o parâmetro --cluster-version ao comando gcloud container clusters create, conforme descrito abaixo. Veja mais informações sobre a versão na documentação do SDK.
  • Use a versão 1.13 ou posterior do TensorFlow. Determine a versão do TensorFlow usada pelo Cloud TPU na especificação do pod do Kubernetes, conforme descrito abaixo.
  • É preciso criar o cluster do GKE e os pools de nós em uma zona em que o Cloud TPU esteja disponível. Também é possível criar os buckets do Cloud Storage para manter seus dados e modelos de treinamento na mesma região que o cluster do GKE. As zonas a seguir estão disponíveis:

    US

    Tipo de TPU (v2) Núcleos de TPU v2 Memória total de TPU Região/zona
    v2-8 8 64 GiB us-central1-b
    us-central1-c
    us-central1-f
    v2-32 32 256 GiB us-central1-a
    v2-128 128 1 TiB us-central1-a
    v2-256 256 2 TiB us-central1-a
    v2-512 512 4 TiB us-central1-a
    Tipo de TPU (v3) Núcleos de TPU v3 Memória total de TPU Zonas disponíveis
    v3-8 8 128 GiB us-central1-a
    us-central1-b
    us-central1-f

    Europa

    Tipo de TPU (v2) Núcleos de TPU v2 Memória total de TPU Região/zona
    v2-8 8 64 GiB europe-west4-a
    v2-32 32 256 GiB europe-west4-a
    v2-128 128 1 TiB europe-west4-a
    v2-256 256 2 TiB europe-west4-a
    v2-512 512 4 TiB europe-west4-a
    Tipo de TPU (v3) Núcleos de TPU v3 Memória total de TPU Zonas disponíveis
    v3-8 8 128 GiB europe-west4-a
    v3-32 32 512 GiB europe-west4-a
    v3-64 64 1 TiB europe-west4-a
    v3-128 128 2 TiB europe-west4-a
    v3-256 256 4 TiB europe-west4-a
    v3-512 512 8 TiB europe-west4-a
    v3-1024 1024 16 TiB europe-west4-a
    v3-2048 2048 32 TiB europe-west4-a

    Ásia-Pacífico

    Tipo de TPU (v2) Núcleos de TPU v2 Memória total de TPU Região/zona
    v2-8 8 64 GiB asia-east1-c
  • Cada contêiner pode solicitar, no máximo, um Cloud TPU. No entanto, é permitido que vários contêineres em um pod solicitem um.
  • O autoescalador de clusters aceita o Cloud TPU no GKE 1.11.4-gke.12 e versões posteriores.
  • Seu cluster do GKE precisa ser um cluster nativo de VPC.

Antes de começar

  1. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Cloud, na página do seletor de projetos, selecione ou crie um projeto do Cloud.

    Acessar a página do seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como confirmar se a cobrança está ativada para o seu projeto.

  4. Ao usar o Cloud TPU com o GKE, são utilizados componentes faturáveis do Google Cloud Platform no projeto. Para fazer uma estimativa de custos, verifique os preços da Cloud TPU e os preços do GKE. Siga as instruções para limpar os recursos quando não forem mais necessários.

  5. Ative as seguintes APIs no Console do Cloud:

Crie um bucket do Cloud Storage

Você precisa ter um bucket do Cloud Storage para armazenar os resultados do treinamento do seu modelo de machine learning.

  1. Acesse a página do Cloud Storage no Console do Cloud.

    Acessar a página do Cloud Storage

  2. Crie um novo bucket especificando as opções a seguir:

    • Um nome exclusivo à sua escolha
    • Classe de armazenamento padrão: Standard
    • Local: us-central1

    O local do bucket precisa estar na mesma região do recurso da TPU provisionado no cluster do GKE.

Autorize o acesso da Cloud TPU ao bucket do Cloud Storage

É necessário conceder ao Cloud TPU acesso de leitura/gravação aos objetos do Cloud Storage. Para isso, conceda o acesso necessário à conta de serviço usada pelo Cloud TPU. Siga as instruções do guia conceder acesso ao bucket de armazenamento.

Crie um cluster do GKE compatível com a Cloud TPU

É possível ativar o suporte do Cloud TPU em um cluster novo ou atual do GKE.

Como criar um novo cluster compatível com o Cloud TPU

É possível criar um cluster compatível com o Cloud TPU usando o Console do Cloud ou a ferramenta gcloud.

Selecione uma das opções abaixo para ver as instruções pertinentes:

Console

Siga estas instruções para criar um cluster do GKE compatível com a Cloud TPU:

  1. Acesse a página do GKE no Console do Cloud.

    Acessar a página do GKE

  2. Clique em Criar cluster.

  3. Especifique o Nome do cluster. Ele precisa ser exclusivo no projeto e na zona.

  4. Em Tipo de local, selecione zonal e selecione a zona desejada em que você planeja usar um recurso do Cloud TPU. Por exemplo, selecione a zona us-central1-b.

    A Cloud TPU está disponível nas seguintes zonas:

    US

    Tipo de TPU (v2) Núcleos de TPU v2 Memória total de TPU Região/zona
    v2-8 8 64 GiB us-central1-b
    us-central1-c
    us-central1-f
    v2-32 32 256 GiB us-central1-a
    v2-128 128 1 TiB us-central1-a
    v2-256 256 2 TiB us-central1-a
    v2-512 512 4 TiB us-central1-a
    Tipo de TPU (v3) Núcleos de TPU v3 Memória total de TPU Zonas disponíveis
    v3-8 8 128 GiB us-central1-a
    us-central1-b
    us-central1-f

    Europa

    Tipo de TPU (v2) Núcleos de TPU v2 Memória total de TPU Região/zona
    v2-8 8 64 GiB europe-west4-a
    v2-32 32 256 GiB europe-west4-a
    v2-128 128 1 TiB europe-west4-a
    v2-256 256 2 TiB europe-west4-a
    v2-512 512 4 TiB europe-west4-a
    Tipo de TPU (v3) Núcleos de TPU v3 Memória total de TPU Zonas disponíveis
    v3-8 8 128 GiB europe-west4-a
    v3-32 32 512 GiB europe-west4-a
    v3-64 64 1 TiB europe-west4-a
    v3-128 128 2 TiB europe-west4-a
    v3-256 256 4 TiB europe-west4-a
    v3-512 512 8 TiB europe-west4-a
    v3-1024 1024 16 TiB europe-west4-a
    v3-2048 2048 32 TiB europe-west4-a

    Ásia-Pacífico

    Tipo de TPU (v2) Núcleos de TPU v2 Memória total de TPU Região/zona
    v2-8 8 64 GiB asia-east1-c
  5. Confirme se a Versão principal está definida como 1.13.4-gke.5 ou posterior, para garantir que ela seja compatível com o Cloud TPU.

  6. No painel de navegação, no pool de nós que você quer configurar, clique em Segurança.

  7. Selecione Permitir acesso completo a todas as APIs do Cloud. Isso garante que todos os nós no cluster tenham acesso ao bucket do Cloud Storage. O cluster e o bucket de armazenamento precisam estar no mesmo projeto para isso funcionar. Por padrão, os pods herdam os escopos dos nós em que são implantados. Para limitar o acesso por pod, veja como autenticar com contas de serviço no guia do GKE.

  8. No painel de navegação, em Cluster, clique em Rede.

  9. Selecione Ativar roteamento de tráfego nativo VPC (usa IP do alias), talvez você precise criar uma rede VPC, se não existir uma para o projeto atual.

  10. No painel de navegação, em Cluster, clique em Recursos.

  11. Selecione Ativar o Cloud TPU.

  12. Configure as outras opções do cluster como quiser. Você pode deixar as opções com os valores padrão.

  13. Clique em Criar

  14. Conecte-se ao cluster. Para fazer isso, selecione o cluster na página de clusters do Console do Kubernetes e clique no botão Conectar. Isso fará com que o comando da gcloudgcloud seja exibido. Execute-o em um Cloud Shell para se conectar.

gcloud

Siga as instruções abaixo para configurar o ambiente e criar um cluster do GKE compatível com o Cloud TPU usando a ferramenta gcloud:

  1. Instale os componentes gcloud, necessários para executar o GKE com o Cloud TPU:

    $ gcloud components install
  2. Especifique seu projeto do Google Cloud:

    $ gcloud config set project project-name
    

    Substitua project-name pelo nome do projeto do Google Cloud.

  3. Especifique a zona em que você planeja usar um recurso da Cloud TPU. Para este exemplo, use a zona us-central1-b:

    $ gcloud config set compute/zone us-central1-b
    

    A Cloud TPU está disponível nas seguintes zonas:

    US

    Tipo de TPU (v2) Núcleos de TPU v2 Memória total de TPU Região/zona
    v2-8 8 64 GiB us-central1-b
    us-central1-c
    us-central1-f
    v2-32 32 256 GiB us-central1-a
    v2-128 128 1 TiB us-central1-a
    v2-256 256 2 TiB us-central1-a
    v2-512 512 4 TiB us-central1-a
    Tipo de TPU (v3) Núcleos de TPU v3 Memória total de TPU Zonas disponíveis
    v3-8 8 128 GiB us-central1-a
    us-central1-b
    us-central1-f

    Europa

    Tipo de TPU (v2) Núcleos de TPU v2 Memória total de TPU Região/zona
    v2-8 8 64 GiB europe-west4-a
    v2-32 32 256 GiB europe-west4-a
    v2-128 128 1 TiB europe-west4-a
    v2-256 256 2 TiB europe-west4-a
    v2-512 512 4 TiB europe-west4-a
    Tipo de TPU (v3) Núcleos de TPU v3 Memória total de TPU Zonas disponíveis
    v3-8 8 128 GiB europe-west4-a
    v3-32 32 512 GiB europe-west4-a
    v3-64 64 1 TiB europe-west4-a
    v3-128 128 2 TiB europe-west4-a
    v3-256 256 4 TiB europe-west4-a
    v3-512 512 8 TiB europe-west4-a
    v3-1024 1024 16 TiB europe-west4-a
    v3-2048 2048 32 TiB europe-west4-a

    Ásia-Pacífico

    Tipo de TPU (v2) Núcleos de TPU v2 Memória total de TPU Região/zona
    v2-8 8 64 GiB asia-east1-c
  4. Use o comando gcloud container clusters create para criar um cluster no GKE com suporte para o Cloud TPU. No comando a seguir , substitua cluster-name pelo nome de cluster de sua escolha:

    $ gcloud container clusters create cluster-name \
      --cluster-version=1.16 \
      --scopes=cloud-platform \
      --enable-ip-alias \
      --enable-tpu
    

    No comando acima:

    • --cluster-version=1.16 indica que o cluster usará a versão mais recente do Kubernetes 1.16. Use a versão 1.13.4-gke.5 ou posterior.
    • --scopes=cloud-platform garante que todos os nós no cluster tenham acesso ao bucket do Cloud Storage no projeto do Google Cloud definido como project-name acima. O cluster e o bucket de armazenamento precisam estar no mesmo projeto para isso funcionar. Por padrão, os pods herdam os escopos dos nós em que são implantados. Portanto, --scopes=cloud-platform fornece o escopo cloud-platform a todos os pods em execução no cluster. Para limitar o acesso por pod, veja como autenticar com contas de serviço no guia do GKE.
    • --enable-ip-alias indica que o cluster usa intervalos de IP do alias. Isso é necessário para usar a Cloud TPU no GKE.
    • --enable-tpu indica que o cluster precisa ser compatível com o Cloud TPU.
    • --tpu-ipv4-cidr (opcional, não especificado acima) indica o local do intervalo CIDR a ser usado para o Cloud TPU. IP_RANGE pode estar na forma de IP/20, como 10.100.0.0/20. Se essa sinalização não for especificada, um intervalo de CIDR de tamanho /20 será alocado e atribuído automaticamente.

Como ativar o suporte do Cloud TPU em um cluster atual

Para ativar o suporte do Cloud TPU em um cluster atual do GKE, execute as seguintes etapas na ferramenta de linha de comando gcloud:

  1. Ative o suporte do Cloud TPU:

    gcloud beta container clusters update cluster-name --enable-tpu
    

    Substitua cluster-name pelo nome do cluster.

  2. Atualize a entrada kubeconfig:

    gcloud container clusters get-credentials cluster-name
    

Como definir um intervalo CIDR personalizado

Por padrão, o GKE aloca um bloco CIDR com o tamanho de /20 para as TPUs provisionadas pelo cluster. Especifique um intervalo CIDR personalizado para o Cloud TPU executando o seguinte comando:

gcloud beta container clusters update cluster-name \
  --enable-tpu \
  --tpu-ipv4-cidr 10.100.0.0/20

Substitua:

  • cluster-name: o nome do cluster atual.
  • 10.100.0.0/20: o intervalo CIDR personalizado.

Visualizar as operações

A ativação do suporte do Cloud TPU inicia uma operação de atualização. Para clusters zonais, essa operação leva cerca de 5 minutos e, para clusters regionais, ela leva cerca de 15 minutos, dependendo da região do cluster.

Para listar todas as operações concluídas e em execução no cluster, execute o seguinte comando:

gcloud container operations list

Para mais informações sobre uma operação específica, execute o seguinte comando:

gcloud container operations operations describe operation-id

Substitua operation-id pelo ID da operação específica.

Crie e coloque o modelo em um contêiner na imagem do Docker

É possível usar um modelo de TPU oficial que tenha sido colocado em um contêiner nas imagens do Docker ou criar e colocar seu próprio modelo em um contêiner.

  • Usar os modelos oficiais do TensorFlow

    Os modelos oficiais mais recentes do TensorFlow estão disponíveis no GitHub e como um pacote pip (ambos em inglês). Para modelos que usam a sinalização --tpu, adicione --tpu=$(KUBE_GOOGLE_CLOUD_TPU_ENDPOINTS) ao comando na especificação do pod.

  • Criar os próprios modelos

    Se você quiser criar seu próprio modelo para executar o Cloud TPU no GKE, use o Cloud TPU no TensorFlow com tf.distribute.cluster_resolver.TPUClusterResolver e tf.distribute.experimental.TPUStrategy (ambos em inglês) da seguinte maneira:

    # The tpu_names, zone, and project may be omitted in TPUClusterResolver
    # as GKE automatically uses the Cloud TPU created for your
    # job when your runs.
    
    tpu_cluster_resolver = tf.distribute.cluster_resolver.TPUClusterResolver()
    tf.config.experimental_connect_to_cluster(tpu_cluster_resolver)
    tf.tpu.experimental.initialize_tpu_system(tpu_cluster_resolver)
    strategy = tf.distribute.experimental.TPUStrategy(tpu_cluster_resolver)
    with strategy.scope():
        ...
    
    

    Para mais informações, consulte a documentação do TensorFlow sobre como usar Cloud TPUs no TensorFlow.

É possível usar o gcloud builds submit -t gcr.io/... para criar uma imagem do Docker e enviá-la para o Google Container Registry.

Solicite uma Cloud TPU na especificação do pod do Kubernetes

Na especificação de pod do Kubernetes:

  • use a anotação de pod a seguir para especificar a versão do TensorFlow que os nós da Cloud TPU usam:

    tf-version.cloud-tpus.google.com: "x.y"
    

    em que x.y é a versão do TensorFlow compatível com o Cloud TPU. Use a versão 1.13 ou posterior do TensorFlow. Todas as instâncias da Cloud TPU criadas para um pod precisam usar a mesma versão do TensorFlow. É necessário criar os modelos nos contêineres usando a mesma versão do TensorFlow. Veja as versões compatíveis.

  • Especifique o recurso do Cloud TPU na seção limits, no campo resource, na especificação do contêiner.

    Observe que a unidade do recurso do Cloud TPU corresponde ao número de núcleos do Cloud TPU. A tabela a seguir lista todas as solicitações de recursos válidas.

    Se o recurso destinado ao uso for um pod do Cloud TPU, solicite uma cota, porque a cota padrão do pod do Cloud TPU é zero.

    Solicitação de recurso Tipo de Cloud TPU Versão necessária do GKE
    cloud-tpus.google.com/v2: 8 Um dispositivo Cloud TPU v2 (8 núcleos) 1.10.4-gke.2 ou posterior
    cloud-tpus.google.com/v2: 32 Um pod do Cloud TPU v2-32 (32 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v2: 128 Um pod do Cloud TPU v2-128 (128 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v2: 256 Um pod do Cloud TPU v2-256 (256 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v2: 512 Um pod do Cloud TPU v2-512 (512 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v3: 32 Um pod do Cloud TPU v3-32 (32 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v3: 64 Um pod do Cloud TPU v3-64 (64 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v3: 128 Um pod do Cloud TPU v3-128 (128 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v3: 256 Um pod do Cloud TPU v3-256 (256 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v3: 512 Um pod do Cloud TPU v3-512 (512 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v3: 1024 Um pod do Cloud TPU v3-1024 (1024 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/v3: 2048 Um pod do Cloud TPU v3-2048 (2048 núcleos) (beta) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/preemptible-v2: 8 Um dispositivo preemptivo da Cloud TPU v2 (8 núcleos) 1.10.6-gke.1 ou posterior
    cloud-tpus.google.com/v3: 8 Um dispositivo da Cloud TPU v3 (8 núcleos) 1.10.7-gke.6 ou posterior
    cloud-tpus.google.com/preemptible-v3: 8 Um dispositivo preemptivo da Cloud TPU v3 (8 núcleos) 1.10.7-gke.6 ou posterior

    Para mais informações sobre como especificar recursos e limites na especificação de pod do Kubernetes, consulte a documentação do Kubernetes.

Por exemplo, esta especificação do job solicita um dispositivo preemptivo da Cloud TPU v2 com o TensorFlow 2.2:

apiVersion: batch/v1
kind: Job
metadata:
  name: resnet-tpu
spec:
  template:
    metadata:
      annotations:
        # The Cloud TPUs that will be created for this Job will support
        # TensorFlow 2.2. This version MUST match the
        # TensorFlow version that your model is built on.
        tf-version.cloud-tpus.google.com: "2.2"
    spec:
      restartPolicy: Never
      containers:
      - name: resnet-tpu
        # The official TensorFlow 2.2.0 image.
        # https://hub.docker.com/r/tensorflow/tensorflow
        image: tensorflow/tensorflow:2.2.0
        command:
        - bash
        - -c
        - |
          pip install tf-models-official==2.2.0
          python3 -m official.vision.image_classification.resnet.resnet_ctl_imagenet_main \
            --tpu=$(KUBE_GOOGLE_CLOUD_TPU_ENDPOINTS) \
            --distribution_strategy=tpu \
            --steps_per_loop=500 \
            --log_steps=500 \
            --use_synthetic_data=true \
            --dtype=fp32 \
            --enable_tensorboard=true \
            --train_epochs=90 \
            --epochs_between_evals=1 \
            --batch_size=1024 \
            --model_dir=gs://<my-model-bucket>/resnet
        resources:
          limits:
            # Request a single Preemptible v2-8 Cloud TPU device to train the
            # model. A single v2-8 Cloud TPU device consists of 4 chips, each of
            # which has 2 cores, so there are 8 cores in total.
            cloud-tpus.google.com/preemptible-v2: 8

Crie o job

Siga estas etapas para criar o job no cluster do GKE e instalar o kubectl:

  1. Crie a especificação do seu job, example-job.yaml, incluindo a especificação descrita acima.

  2. Execute o job:

    $ kubectl create -f example-job.yaml
    job "resnet-tpu" created

    Esse comando cria o job que programa o pod automaticamente.

  3. Verifique se o pod foi programado e se os nós da Cloud TPU foram provisionados. Um pod que solicita nós da Cloud TPU pode permanecer pendente por até cinco minutos antes de ser executado. Até que o pod seja programado, a resposta será semelhante à mostrada a seguir.

    $ kubectl get pods -w
    
    NAME               READY     STATUS    RESTARTS   AGE
    resnet-tpu-cmvlf   0/1       Pending   0          1m
    

    Depois de cinco minutos, você verá algo semelhante a isto:

    NAME               READY     STATUS    RESTARTS   AGE
    resnet-tpu-cmvlf   1/1       Running   0          6m
    
    A vida útil dos nós do Cloud TPU é vinculada aos pods que os solicitam. A Cloud TPU é criada sob demanda quando o pod é programado e reciclada quando o pod é excluído.

Acesse os registros da Cloud TPU

Siga estas etapas para acessar os registros das instâncias da Cloud TPU usadas pelos pods do Kubernetes.

  1. Crie especificações de implantação e serviço como as seguintes:

    Acessar a página do GKE

  2. Clique em Workloads.

  3. Encontre seu job e clique nele.

  4. Encontre o pod em Pods gerenciados e clique nele.

  5. Procure o contêiner em Contêineres e clique em Ver registros para visualizar os registros do Cloud TPU usados por esse contêiner.

Use o TensorBoard para visualizar métricas e analisar o desempenho

No TensorBoard, há um conjunto de ferramentas projetadas para apresentar visualmente os dados do TensorFlow. Com o TensorBoard é possível identificar gargalos no processamento e receber sugestões para melhorar o desempenho.

O TensorFlow Profiler (em inglês) é um plug-in do TensorBoard usado para capturar um perfil em um Cloud TPU individual ou um Pod do Cloud TPU, que pode ser visualizado no TensorBoard. O seletor de ferramentas do Cloud TPU ficará disponível na guia Perfil, que aparecerá na barra de menus depois que você capturar informações de rastreamento a partir de um modelo do TensorFlow em execução. Você também pode selecionar essa ferramenta no menu suspenso.

Siga estas etapas para executar o TensorBoard no cluster do GKE:

  1. Crie outro contêiner do TensorFlow para executar o TensorBoard e substitua bucket-name pelo nome do bucket do GCS.

    $ kubectl run tensorboard \
      --image tensorflow/tensorflow:2.2.0 \
      --port 6006 \
      -- bash -c "pip install tensorboard-plugin-profile==2.2.0 cloud-tpu-client && tensorboard --logdir=gs://bucket-name/resnet"
    
  2. Verifique se o pod tensorboard foi programado.

    $ kubectl get pod tensorboard -w
    
    NAME          READY   STATUS    RESTARTS   AGE
    tensorboard   1/1     Running   0          50s
    
    
  3. Faça o encaminhamento de portas para o pod tensorboard:

    $ kubectl port-forward pod/tensorboard 6006
    
  4. Acesse http://localhost:6006 no seu navegador.

  5. Selecione a guia Perfil no menu suspenso do TensorBoard.

  6. Selecione o botão Capturar perfil na guia "Perfil".

  7. No menu pop-up, selecione o tipo de endereço do nome da TPU e insira o nome. O nome da TPU aparece na página Compute Engine > TPUs do Console do Cloud com o seguinte formato:

    gke-cluster-name-cluster-id-tpu-tpu-id
    
    Exemplo:
    gke-demo-cluster-25cee208-tpu-4b90f4c5

  8. Selecione o botão Capturar quando tudo estiver pronto para criar o perfil e aguarde alguns segundos até que esse processo seja concluído.

  9. Atualize seu navegador para ver os dados de rastreamento na guia "Perfil" do TensorBoard.

Para mais informações sobre como capturar e interpretar perfis, consulte o guia do criador de perfil do TensorFlow (em inglês).

Como desativar o Cloud TPU em um cluster

Para desativar o suporte do Cloud TPU em um cluster atual do GKE, execute as seguintes etapas na ferramenta de linha de comando gcloud:

  1. Verifique se nenhuma de suas cargas de trabalho está usando o Cloud TPU:

    kubectl get tpu
    
  2. Desative o suporte do Cloud TPU no cluster:

    gcloud beta container clusters update cluster-name --no-enable-tpu
    

    Substitua cluster-name pelo nome do cluster.

    Para clusters zonais, essa operação leva cerca de 5 minutos e, para clusters regionais, ela leva cerca de 15 minutos, dependendo da região do cluster.

  3. Depois que as operações forem concluídas sem erros, será possível verificar se as TPUs provisionadas pelo cluster foram removidas:

    gcloud compute tpus list
    

    Os nomes das TPUs criadas pelo Cloud TPU têm o seguinte formato:

    gke-cluster-name-cluster-id-tpu-tpu-id
    

    Substitua:

    • cluster-name: o nome do cluster atual.
    • cluster-id: o ID do cluster atual.
    • tpu-id: ID do Cloud TPU.

    Se alguma TPU aparecer, será possível excluí-las manualmente executando:

    gcloud compute tpus delete gke-cluster-name-cluster-id-tpu-tpu-id
    

Limpeza

Quando terminar de usar o Cloud TPU no GKE, limpe os recursos para evitar cobranças extras na sua conta do Google Cloud.

Console

Exclua seu Cluster do GKE:

  1. Acesse a página do GKE no Console do Cloud.

    Acessar a página do GKE

  2. Marque a caixa de seleção ao lado do cluster que você quer excluir.

  3. Clique em Excluir.

Ao terminar de examinar os dados, exclua o bucket do Cloud Storage criado durante este tutorial:

  1. Acesse a página do Cloud Storage no Console do Cloud.

    Acessar a página do Cloud Storage

  2. Marque a caixa de seleção ao lado do bucket que você quer excluir.

  3. Clique em Excluir.

Consulte o guia de preços do Cloud Storage para se informar sobre os limites de armazenamento gratuito e outros preços.

gcloud

Caso não tenha definido o projeto e a zona para esta sessão, faça isso agora. Consulte as instruções ensinadas anteriormente neste guia. Depois, siga este procedimento de limpeza:

  1. Execute o seguinte comando para excluir o cluster do GKE, substituindo cluster-name pelo nome do cluster e project-name pelo nome do projeto do Google Cloud:

    $ gcloud container clusters delete cluster-name --project=project-name
    
  2. Ao terminar de examinar os dados, use o comando gsutil para excluir o bucket do Cloud Storage criado durante este tutorial. Substitua bucket-name pelo nome do seu bucket do Cloud Storage:

    $ gsutil rm -r gs://bucket-name
    

    Consulte o guia de preços do Cloud Storage para se informar sobre os limites de armazenamento gratuito e outros preços.

A seguir

  • Faça o tutorial para treinar o modelo ResNet-50 do TensorFlow no Cloud TPU e no GKE.
  • Use uma das especificações de job abaixo para executar mais modelos e jobs de recuperação de conjuntos de dados: