Como executar aplicativos do Cloud TPU no GKE

Neste guia, descrevemos como:

Se quiser ler as instruções detalhadas, siga o tutorial que mostra como treinar o modelo ResNet-50 do TensorFlow usando a Cloud TPU e o GKE.

Benefícios da execução de aplicativos do Cloud TPU no GKE

É possível configurar os aplicativos de treinamento do Cloud TPU para serem executados em contêineres do GKE dentro dos pods. Quando são eles, você tem os seguintes benefícios:

  • 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 a VM e o bloco CIDR e gerencia a VM para você.

  • Custo otimizado: você só paga pela TPU enquanto o job estiver ativo. O GKE cria e exclui automaticamente TPUs de acordo com os requisitos de recursos de um job.

  • 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: as APIs Job e Deployment são fornecidas pelo GKE e podem ser facilmente escalonadas para centenas de pods do GKE 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 de configuração da Cloud TPU e do GKE

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

  • O Cloud TPU não é compatível com pools de nós do Windows Server.
  • 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.15.5 ou posterior do TensorFlow. Determine a versão do TensorFlow usada pela 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, uma Cloud TPU. No entanto, é permitido que vários contêineres em um pod solicitem uma.
  • O autoescalador de clusters é compatível com o Cloud TPU no GKE 1.13.4-gke.5 ou posterior.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o 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:

Criar uma conta de serviço e 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. Abra uma janela do Cloud Shell.

    Abra o Cloud Shell

  2. Crie uma variável para o ID do seu projeto.

    export PROJECT_ID=project-id
    
  3. Use a API gcloud para criar uma conta de serviço para o projeto do Cloud TPU.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
    

    O comando retorna uma conta de serviço do Cloud TPU com o formato a seguir:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    
  4. Crie um novo bucket especificando as opções a seguir:

    • Um nome exclusivo à sua escolha
    • Tipo de local: region
    • Local: us-central1
    • Classe de armazenamento padrão: Standard
    • Controle de acesso: fine-grained

    Antes de usar o bucket de armazenamento, autorize o acesso da conta de serviço do Cloud TPU a ele. Defina ACLs detalhadas para sua conta de serviço do Cloud TPU.

Autorize o acesso da Cloud TPU ao bucket do Cloud Storage

É necessário conceder à 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.

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.

  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 do Kubernetes 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), você precisará 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 kubectl 
  2. Configure gcloud om o ID do projeto do Google Cloud:

    $ gcloud config set project project-name
    

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

    Na primeira vez que você executar esse comando em uma nova VM do Cloud Shell, será exibida uma página Authorize Cloud Shell. Clique em Authorize na parte inferior da página para permitir que gcloud faça chamadas de API do GCP com suas credenciais.

  3. Configure gcloud com a zona em que você planeja usar um recurso do Cloud TPU. Neste tutorial, use a zona us-central1-b:

    $ gcloud config set compute/zone us-central1-b
    
  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
    

    Descrições de sinalizações de comando

    cluster-version
    Indica que o cluster usará a versão mais recente do Kubernetes 1.16. Use a versão 243.0.0 1.13.4-gke.5 ou posterior.
    scopes
    Garante que todos os nós do 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. 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 a Cloud TPU.
    tpu-ipv4-cidr (opcional, não especificado acima)
    Indica o intervalo CIDR a ser usado para o Cloud TPU. Especifique IP_RANGE 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.

    Quando o cluster for criado, você verá uma mensagem semelhante a esta:

    NAME             LOCATION       MASTER_VERSION    MASTER_IP     MACHINE_TYPE   NODE_VERSION      NUM_NODES  STATUS
    cluster-resnet  us-central1-b  1.16.15-gke.4901  34.71.245.25  n1-standard-1  1.16.15-gke.4901  3          RUNNING
    

Visualizar operações do cluster

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 describe operation-id
   

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

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.15.5 ou posterior do TensorFlow. Todas as instâncias da Cloud TPU criadas para um pod do Kubernetes 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 saber mais sobre como especificar recursos e limites na especificação de Pods, consulte a documentação do Kubernetes.

O exemplo de especificação de job mostrado abaixo solicita um dispositivo preemptivo do Cloud TPU v2 com TensorFlow 2.3. Ele também inicia um processo de processo do TensorBoard.

A vida útil dos nós da Cloud TPU é vinculada aos pods do Kubernetes que os solicitam. A Cloud TPU é criada sob demanda quando o pod do Kubernetes é programado e reciclada quando o pod é excluído.

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.3. This version MUST match the
        # TensorFlow version that your model is built on.
        tf-version.cloud-tpus.google.com: "2.3"
    spec:
      restartPolicy: Never
      containers:
      - name: resnet-tpu
        # The official TensorFlow 2.3.0 image.
        # https://hub.docker.com/r/tensorflow/tensorflow
        image: tensorflow/tensorflow:2.3.0
        command:
        - bash
        - -c
        - |
          pip install tf-models-official==2.3.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://bucket-name/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
      - name: tensorboard
        image: tensorflow/tensorflow:2.2.0
        command:
        - bash
        - -c
        - |
          pip install tensorboard-plugin-profile==2.3.0 cloud-tpu-client
          tensorboard --logdir=gs://bucket-name/resnet --port=6006
        ports:
        - containerPort: 6006

Como criar o job

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

  1. Usando um editor de texto, crie uma especificação de job, example-job.yaml, e copie e cole na especificação de job mostrada acima. Lembre-se de substituir a variável bucket-name no parâmetro --model_dir e no comando do Tensorflow pelo nome do bucket de armazenamento.

  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
    

Veja o status e os registros da Cloud TPU

Siga estas etapas para verificar o status e visualizar os registros das instâncias do Cloud TPU usadas pelos pods do Kubernetes.

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

    Acessar a página do GKE

  2. Na barra de navegação à esquerda, clique em Cargas de trabalho.

  3. Selecione o job. Isso leva você a uma página que inclui um cabeçalho Pods gerenciados.

  4. Em Pods gerenciados, selecione o pod do Kubernetes. Isso levará você a uma página que inclui um cabeçalho Contêineres.

    Em Contêineres, uma lista de contêineres é exibida. A lista inclui todas as instâncias do Cloud TPU. Para cada contêiner, são exibidas as seguintes informações:

    • O status de execução
    • Link para os registros do 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 TPU Profiler é um plug-in do TensorBoard 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 estará disponível na guia Perfil, na barra de menu do TensorBoard, após as informações de rastreamento terem sido coletadas de um modelo do TensorFlow em execução com o TPU Profiler.

Execute o TensorBoard em um cluster do GKE

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

  1. Siga as etapas para visualizar o status do TensorBoard e verificar se a instância do TensorBoard está sendo executada em um contêiner.

  2. Encaminhe o encaminhamento para o pod do Kubernetes Kubernetes:

    $ kubectl port-forward pod/resnet-tpu-pod-id 6006
    

    em que pod-id é o último conjunto de dígitos do nome do pod do GKE mostrado no Console em: Kubernetes Engine > Cargas de trabalho > Pods gerenciados. Exemplo: resnet-tpu-wxskc.

  3. Na barra do canto superior direito do Cloud Shell, clique no botão Web preview e abra a porta 6006 para ver a saída do TensorBoard. A interface do usuário do TensorBoard aparecerá no seu navegador como uma guia.

  4. Selecione PROFILE no menu suspenso no canto superior direito da página do TensorBoard.

  5. Clique no botão CAPTURE PROFILE na página PROFILE.

  6. 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
    
    Por exemplo:
    gke-demo-cluster-25cee208-tpu-4b90f4c5

  7. Selecione o botão CAPTURE no menu pop-up quando estiver pronto para começar a criação de perfil e aguarde alguns segundos para que o perfil seja concluído.

  8. Atualize seu navegador para ver dados de rastreamento na guia PROFILE no TensorBoard.

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

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 de TPU

    Os modelos oficiais de TPU mais recentes são colocados em contêineres nas imagens do Docker. Essas imagens do Docker foram criadas usando um Dockerfile.

  • Criar seu próprio modelo

    Os notebooks do Colab na documentação do TensorFlow (em inglês) fornecem exemplos de como criar seu próprio modelo.

    Se você optar por criar seu próprio modelo, use as seguintes etapas para colocar o modelo em um contêiner de uma imagem do Docker e enviá-lo por push ao Google Container Registry.

    1. Ative as seguintes APIs no Console do Cloud:

    2. Crie um Dockerfile contendo as linhas a seguir.

      FROM tensorflow/tensorflow:2.3.0
      
      RUN pip install tf-models-official==2.3.0 tensorboard-plugin-profile==2.3.0 cloud-tpu-client
      
    3. Execute o comando a seguir no mesmo diretório que o Dockerfile para criar e marcar a imagem do Docker. Substitua a variável my-project pelo nome do projeto e substitua a variável my-image por um nome de imagem.

      gcloud builds submit . -t gcr.io/my-project/my-image
      

      O prefixo gcr.io refere-se ao Container Registry, em que a imagem está hospedada. A execução desse comando não carrega a imagem.

    4. Execute o comando docker images para verificar se a compilação foi bem-sucedida:

       docker images
      
      Saída:
      REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
      gcr.io/my-project/my-image     v1                  25cfadb1bf28        10 seconds ago      54 MB
      
    5. Atualize a especificação do job para usar a imagem do Docker. Substitua as variáveis my-project e my-image pelo nome do projeto e pelo nome da imagem que você definiu. Além disso, substitua a variável bucket-name pelo nome de um bucket que você usará para armazenar a saída de treinamento do modelo.

        image: gcr.io/my-project/my-image
        command:
          - 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://<bucket-name>/resnet-output
      
    6. Crie e execute o job como faria com um modelo de TPU oficial.

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.

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 conta do Cloud Billing.

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.

Quando terminar de examinar os dados, exclua o bucket do Cloud Storage criado:

  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

Se você não tiver 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. 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 na Cloud TPU e no GKE.
  • Use uma das especificações de jobs abaixo para executar mais modelos e jobs de recuperação de conjuntos de dados:
  • Faça o download e o pré-processamento do conjunto de dados COCO no GKE.
  • Faça o download e o pré-processamento do ImageNet no GKE.
  • Treine o AmoebaNet-D usando a Cloud TPU e o GKE.
  • Treine o Inception v3 usando a Cloud TPU e o GKE.
  • Treine o RetinaNet usando a Cloud TPU e o GKE.