Como executar o Inception na Cloud TPU

Defina como 1 para mostrar o bloco de limpeza #}

Neste tutorial, você aprende a treinar o modelo do Inception no Cloud TPU.

Exoneração de responsabilidade

Este tutorial usa um conjunto de dados de terceiros. O Google não oferece declarações, proteções ou outras garantias sobre a validade ou quaisquer outros aspectos desse conjunto de dados.

Descrição do modelo

O Inception v3 é um modelo de reconhecimento de imagem que pode alcançar uma precisão significativa. Esse modelo é o auge de muitas ideias desenvolvidas por vários pesquisadores ao longo dos anos. Ele é baseado no documento original "Rethinking the Inception Architecture for Computer Vision", de Szegedy e outros autores.

O modelo inclui elementos básicos simétricos e assimétricos como:

  • convoluções;
  • pool médio;
  • pool máximo;
  • concatenate
  • dropouts;
  • camadas totalmente conectadas.

A perda é calculada usando Softmax.

A imagem a seguir mostra o modelo em detalhes:

image

Você encontra mais informações sobre o modelo no GitHub (em inglês).

O modelo é criado usando a API Estimator.

A API simplifica muito a criação de modelos encapsulando a maioria das funções de baixo nível, permitindo que você se concentre no desenvolvimento dos modelos, e não no funcionamento interno do hardware subjacente que executa tudo.

Objetivos

  • Criar um bucket do Cloud Storage para armazenar o conjunto de dados e a saída do modelo.
  • Executar o job de treinamento.
  • Verificar os resultados da saída.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Antes de começar

Antes de começar o tutorial, verifique se o projeto do Google Cloud foi configurado corretamente.

  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 verificar se o faturamento está ativado em um projeto.

  4. 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

  5. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  6. Este tutorial usa componentes faturáveis do Google Cloud. Para estimar seus custos, consulte a página de preços da Cloud TPU. Para evitar cobranças desnecessárias, não se esqueça de apagar os recursos criados ao terminar de usá-los.

Configurar os recursos

Nesta seção, você verá como configurar os recursos do Cloud Storage, da VM e do Cloud TPU para tutoriais.

  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. Configure a CLI do Google Cloud para usar o projeto em que a Cloud TPU será criada.

    gcloud config set project ${PROJECT_ID}
    

    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 da API Google Cloud com suas credenciais.

  4. Crie uma conta de serviço para o projeto da 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
    

  5. Crie um bucket do Cloud Storage usando o seguinte comando: Substitua bucket-name por um nome para o bucket.

    gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 -b on gs://bucket-name
    

    O bucket do Cloud Storage armazena os dados usados para treinar o modelo e os resultados do treinamento. A ferramenta ctpu up configura as permissões padrão para a conta de serviço da Cloud TPU. Caso queira permissões mais específicas, consulte as permissões de nível de acesso.

    O local do bucket precisa estar na mesma região da máquina virtual (VM) e do nó da TPU. As VMs e os nós da TPU estão localizados em zonas específicas, que são subdivisões dentro de uma região.

  6. Inicie os recursos do Compute Engine usando o comando ctpu up.

    ctpu up --project=${PROJECT_ID} \
     --zone=us-central1-b \
     --vm-only \
     --machine-type=n1-standard-8 \
     --tf-version=1.15.5 \
     --name=inception-tutorial
    

    Descrições de sinalizações de comando

    project
    Seu ID de projeto do Google Cloud
    zone
    A zona em que você planeja criar a Cloud TPU.
    vm-only
    Cria a VM sem criar uma Cloud TPU. Por padrão, o comando ctpu up cria uma VM e uma Cloud TPU.
    machine-type
    O tipo de máquina da VM do Compute Engine a ser criada.
    tf-version
    A versão do TensorFlow ctpu é instalada na VM.
    name
    O nome do Cloud TPU a ser criado.

    Para mais informações sobre o utilitário do CTPU, consulte Referência do CTPU.

  7. Quando solicitado, pressione y para criar os recursos da Cloud TPU.

    Para verificar se você fez login na VM do Compute Engine, o prompt do shell precisa ter mudado de username@projectname para username@vm-name. Caso não esteja conectado à instância do Compute Engine, execute o seguinte comando:

    gcloud compute ssh inception-tutorial --zone=us-central1-b
    

    Daqui em diante, o prefixo (vm)$ significa que é preciso executar o comando na instância de VM do Compute Engine.

  8. Crie uma variável de ambiente para o bucket de armazenamento. Substitua bucket-name pelo nome do seu bucket no Cloud Storage.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
  9. Crie uma variável de ambiente para o nome da TPU.

    (vm)$ export TPU_NAME=inception-tutorial

Conjunto de dados de treinamento

O aplicativo de treinamento precisa que os dados de treinamento sejam acessíveis no Cloud Storage. Ele também usa o bucket do Cloud Storage para armazenar checkpoints durante o treinamento.

O ImageNet é um banco de dados de imagens. As imagens do banco de dados são organizadas hierarquicamente, com cada nó da hierarquia representado por centenas e milhares de imagens.

Neste tutorial, é usada uma versão de demonstração do conjunto de dados completo do ImageNet, conhecido como o conjunto de dados fake_imagenet. Esse conjunto de dados permite testar o tutorial, sem exigir o armazenamento ou o tempo necessário para fazer o download e executar um modelo no banco de dados completo do ImageNet. Também é possível usar o conjunto de dados completo do ImageNet.

Uma variável de ambiente DATA_DIR é usada para especificar o conjunto de dados a ser treinado.

O conjunto de dados fake_imagenet é útil apenas para entender como usar uma Cloud TPU. Os números de precisão e o modelo salvo não são significativos.

O conjunto de dados fake_imagenet é o seguinte local no Cloud Storage:

gs://cloud-tpu-test-datasets/fake_imagenet

Configurar o TensorBoard (opcional)

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

Se você não precisa monitorar a saída do modelo, pode pular as etapas de configuração do TensorBoard.

Caso queira monitorar a saída e o desempenho do modelo, siga o guia para configurar o TensorBoard.

Executar o modelo

Agora você está pronto para treinar e avaliar o modelo do Inception v3 usando os dados do ImageNet.

Esse modelo está pré-instalado na sua VM do Compute Engine, no diretório /usr/share/tpu/models/experimental/inception/.

Nas etapas a seguir, o prefixo (vm)$ significa que é preciso executar o comando na VM do Compute Engine:

  1. Configure uma variável de ambiente DATA_DIR que contenha um dos valores a seguir:

    • Se você estiver usando o conjunto de dados fake_imagenet:

      (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
      
    • Se tiver feito o upload de um conjunto de dados de treinamento no bucket do Cloud Storage:

      (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data
      
  2. Execute o modelo do Inception v3:

    (vm)$ python /usr/share/tpu/models/experimental/inception/inception_v3.py \
        --tpu=$TPU_NAME \
        --learning_rate=0.165 \
        --train_steps=250000 \
        --iterations=500 \
        --use_tpu=True \
        --use_data=real \
        --mode=train_and_eval \
        --train_steps_per_eval=2000 \
        --data_dir=${DATA_DIR} \
        --model_dir=${STORAGE_BUCKET}/inception
    • --tpu especifica o nome da Cloud TPU. ctpu transmite esse nome para a VM do Compute Engine como uma variável de ambiente (TPU_NAME).
    • --use_data especifica o tipo de dados que o programa precisa usar durante o treinamento, seja fictício ou real. O valor padrão é fictício.
    • --data_dir especifica o caminho do Cloud Storage para a entrada de treinamento. O aplicativo ignora esse parâmetro quando você usa dados fake_imagenet.
    • --model_dir especifica o diretório em que os checkpoints e os resumos são armazenados durante o treinamento do modelo. Se a pasta não existir, o programa criará uma. Ao usar uma Cloud TPU, o model_dir precisa ser um caminho do Cloud Storage (gs://...). É possível reutilizar uma pasta para carregar os dados do checkpoint atual e armazenar outros checkpoints. Use a mesma versão do TensorFlow para gravar e carregar checkpoints.

O que esperar

O Inception v3 funciona em imagens 299 x 299. O tamanho do lote de treinamento padrão é 1024, o que significa que cada iteração opera em 1024 dessas imagens.

É possível usar a sinalização --mode para selecionar um dos três modos de operação: train, eval e train_and_eval.

  • --mode=train ou --mode=eval especificam um job somente de treinamento ou de avaliação, respectivamente.
  • --mode=train_and_eval especifica um job híbrido que faz treinamento e avaliação.

Os jobs somente "train" são executados para o número especificado de etapas definidas em train_steps. Se você quiser, eles podem passar por todo o conjunto de treinamento.

Os jobs "train_and_eval" são ciclos com segmentos de treinamento e avaliação. Cada ciclo de treinamento é executado em train_steps_per_eval e seguido por um job de avaliação (usando as ponderações que foram treinadas até então).

Você pode calcular o número de ciclos de treinamento usando a função floor de train_steps, dividida por train_steps_per_eval.

    floor(train_steps / train_steps_per_eval)

Por padrão, os modelos baseados na API Estimator informam os valores de perda a cada número de etapas específico. O formato do relatório é: step = 15440, loss = 12.6237

Discussão: modificações específicas da TPU no modelo

Preparar os modelos baseados na API Estimator requer bem poucas modificações específicas. O programa importa as seguintes bibliotecas: from google.third_party.tensorflow.contrib.tpu.python.tpu import tpu_config from google.third_party.tensorflow.contrib.tpu.python.tpu import tpu_estimator from google.third_party.tensorflow.contrib.tpu.python.tpu import tpu_optimizer A função CrossShardOptimizer encapsula o otimizador da seguinte maneira: if FLAGS.use_tpu: optimizer = tpu_optimizer.CrossShardOptimizer(optimizer) A função que define o modelo retorna uma especificação do Estimator usando: return tpu_estimator.TPUEstimatorSpec( mode=mode, loss=loss, train_op=train_op, eval_metrics=eval_metrics) A função principal define uma configuração compatível com o Estimator usando: run_config = tpu_config.RunConfig( master=tpu_grpc_url, evaluation_master=tpu_grpc_url, model_dir=FLAGS.model_dir, save_checkpoints_secs=FLAGS.save_checkpoints_secs, save_summary_steps=FLAGS.save_summary_steps, session_config=tf.ConfigProto( allow_soft_placement=True, log_device_placement=FLAGS.log_device_placement), tpu_config=tpu_config.TPUConfig( iterations_per_loop=iterations, num_shards=FLAGS.num_shards, per_host_input_for_training=per_host_input_for_training)) O programa usa essa configuração e uma função de definição de modelo para criar um objeto do Estimator: inception_classifier = tpu_estimator.TPUEstimator( model_fn=inception_model_fn, use_tpu=FLAGS.use_tpu, config=run_config, params=params, train_batch_size=FLAGS.train_batch_size, eval_batch_size=eval_batch_size, batch_axis=(batch_axis, 0)) Os jobs somente para treinamento só precisam chamar a função de treinamento e depois escolher: Durante a avaliação, as variáveis treináveis são carregadas a partir do último checkpoint a ficar disponível. Os ciclos de treinamento e avaliação são repetidos conforme especificado nas sinalizações: ``` para o ciclo no intervalo(FLAGS.train_steps_per_eval): inception_classifier.train( input_fn=imagenet_train.input_fn, steps=FLAGS.train_steps_per_eval)

  eval_results = inception_classifier.evaluate(
      input_fn=imagenet_eval.input_fn, steps=eval_steps, hooks=eval_hooks)
If you used the fake\_imagenet dataset to train the model, proceed to
[clean up](#clean-up).

## Using the full Imagenet dataset {: #full-dataset }

The ImageNet dataset consists of three parts, training data, validation data,
and image labels.

The training data contains 1000 categories and 1.2 million images,  packaged for
easy downloading. The validation and test data are not contained in the ImageNet
training data (duplicates have been removed).

The validation and test data consists of 150,000 photographs, collected from
[Flickr](https://www.flickr.com/) and other search engines, hand labeled with
the presence or absence of 1000 object categories. The 1000 object categories
contain both internal nodes and leaf nodes of ImageNet, but do not overlap with
each other. A random subset of 50,000 of the images with labels has been
released as validation data along with a list of the 1000 categories. The
remaining images are used for evaluation and have been released without labels.

### Steps to pre-processing the full ImageNet dataset

There are five steps to preparing the full ImageNet dataset for use by a Machine
Learning model:

1. Verify that you have space on the download target.
1. Set up the target directories.
1. Register on the ImageNet site and request download permission.
1. Download the dataset to local disk or Compute Engine VM.

   Note: Downloading the Imagenet dataset to a Compute Engine VM takes
   considerably longer than downloading to your local machine (approximately 40
   hours versus 7 hours). If you download the dataset to your local
   machine, you must copy the files to a Compute Engine VM to pre-process them.
   You must then upload the files to Cloud Storage before using them to train
   your model. Copying the training and validation files from your local machine to the VM
   takes about 13 hours. The recommended approach is to download the dataset to
   a VM.

1. Run the pre-processing and upload script.

### Verify space requirements

Whether you download the dataset to your local machine or to a Compute Engine
VM, you need about 300GB of space available on the download target. On a VM, you
can check your available storage with the `df -ha` command.

Note: If you use `gcloud compute` to set up your VM, it will allocate 250 GB by
default.

You can increase the size of the VM disk using one of the following methods:

*  Specify the `--disk-size` flag on the `gcloud compute` command line with the
   size, in GB, that you want allocated.
*  Follow the Compute Engine guide to [add a disk][add-disk] to your
   VM.
   * Set **When deleting instance** to **Delete disk** to ensure that the
     disk is removed when you remove the VM.
   * Make a note of the path to your new disk. For example: `/mnt/disks/mnt-dir`.

### Set up the target directories

On your local machine or Compute Engine VM, set up the directory structure to
store the downloaded data.

*  Create and export a home directory for the ImageNet dataset.

   Create a directory, for example, `imagenet` under your home directory on
   your local machine or VM. Under this directory, create two sub directories:
   `train` and `validation`. Export the home directory as IMAGENET_HOME:

   <pre class="prettyprint lang-sh tat-dataset">
   export IMAGENET_HOME=~/imagenet
   </pre>

### Register and request permission to download the dataset

*  Register on the [Imagenet website](http://image-net.org/). You cannot
   download the dataset until ImageNet confirms your registration and sends you
   a confirmation email. If you do not get the confirmation email within a
   couple of days, contact [ImageNet support](mailto:support@image-net.org) to
   see why your registration has not been confirmed. Once your registration is
   confirmed, you can download the dataset. The Cloud TPU tutorials that use the
   ImageNet dataset use the images from the ImageNet Large Scale Visual
   Recognition Challenge 2012 (ILSVRC2012).

### Download the ImageNet dataset

1. From the [LSRVC 2012 download site](https://image-net.org/challenges/LSVRC/2012/2012-downloads.php),
   go to the Images section on the page and right-click
   "Training images (Task 1 & 2)". The URL to download
   the largest part of the training set. Save the URL.

   Right-click "Training images (Task 3)" to get the URL for the second
   training set. Save the URL.

   Right-click "Validation images (all tasks)" to get the URL for the
   validation dataset. Save the URL.

   If you download the ImageNet files to your local machine, you need to copy
   the directories on your local machine to the corresponding `$IMAGENET_HOME`
   directory on your Compute Engine VM. Copying the ImageNet dataset from
   local host to your VM takes approximately 13 hours.

   The following command copies the files under
   $IMAGENET_HOME on your local machine to <var>~/imagenet</var> on your VM (<var>username@vm-name</var>):

   <pre class="prettyprint lang-sh tat-dataset">
   gcloud compute scp --recurse $IMAGENET_HOME <var>username@vm-name</var>:~/imagenet
   </pre>

1. From $IMAGENET_HOME, use `wget` to download the training and validation files
   using the saved URLs.

   The "Training images (Task 1 & 2)" file is the large training set. It is
   138 GB and if you are downloading to a Compute Engine VM using the Cloud
   Shell, the download takes approximately 40 hours. If the Cloud Shell loses its
   connection to the VM, you can prepend `nohup` to the command or use
   [screen](https://linuxize.com/post/how-to-use-linux-screen/).

   <pre class="prettyprint lang-sh tat-dataset">
   cd $IMAGENET_HOME \
   nohup wget http://image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train.tar
   </pre>

   This command downloads a large tar file: ILSVRC2012_img_train.tar.

   From $IMAGENET_HOME on the VM, extract the individual training directories
   into the `$IMAGENET_HOME/train` directory using the following command. The
   extraction takes between 1 - 3 hours.

   <pre class="prettyprint lang-sh tat-dataset">
   tar xf ILSVRC2012_img_train.tar
   </pre>

   Extract the individual training tar files located in the $IMAGENET_HOME/train
   directory, as shown in the following script:

   <pre class="prettyprint lang-sh tat-dataset">
   cd $IMAGENET_HOME/train

   for f in *.tar; do
     d=`basename $f .tar`
     mkdir $d
     tar xf $f -C $d
   done
   </pre>

   Delete the tar files after you have extracted them to free up disk space.

   The "Training images (Task 3)" file is 728 MB and takes just a few minutes
   to download so you do not need to take precautions against losing the Cloud
   Shell connection.

   When you download this file, it extracts the individual training directories
   into the existing `$IMAGENET_HOME/train` directory.

   <pre class="prettyprint lang-sh tat-dataset">
   wget http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train_t3.tar
   </pre>

   When downloading the "Validation images (all tasks)" file, your Cloud Shell may disconnect.
   You can use `nohup` or [screen](https://linuxize.com/post/how-to-use-linux-screen/) to
   prevent Cloud Shell from disconnecting.

   <pre class="prettyprint lang-sh tat-dataset">
   wget http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_val.tar
   </pre>

   This download takes about 30 minutes. When you download this file, it
   extracts the individual validation directories into the
   `$IMAGENET_HOME/validation` directory.

   If you downloaded the validation files to your local machine, you need to
   copy the `$IMAGENET_HOME/validation` directory on your local machine to the
   `$IMAGENET_HOME/validation` directory on your Compute Engine VM. This copy
   operation takes about 30 minutes.

   Download the labels file.

   <pre class="prettyprint lang-sh tat-dataset">
   wget -O $IMAGENET_HOME/synset_labels.txt \
https://raw.githubusercontent.com/tensorflow/models/master/research/inception/inception/data/imagenet_2012_validation_synset_labels.txt
   </pre>

   If you downloaded the labels file to your local machine, you need to copy it
   to the `$IMAGENET_HOME` directory on your local machine to `$IMAGENET_HOME`
   on your Compute Engine VM. This copy operation takes a few seconds.

   The training subdirectory names (for example, n03062245) are "WordNet IDs"
   (wnid). The [ImageNet API](https://image-net.org/download-attributes.php)
   shows the mapping of WordNet IDs to their associated validation labels in the
   `synset_labels.txt` file. A synset in this context is a visually similar
   group of images.

### Process the Imagenet dataset and, optionally, upload to Cloud Storage

1. Download the `imagenet_to_gcs.py` script from GitHub:

   <pre class="prettyprint lang-sh tat-dataset">
   wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.py
   </pre>

1. If you are uploading the dataset to Cloud Storage, specify the storage
   bucket location to upload the ImageNet dataset:

   <pre class="lang-sh prettyprint tat-client-exports">
   export STORAGE_BUCKET=gs://<var>bucket-name</var>
   </pre>

1. If you are uploading the dataset to your local machine or VM, specify a data
   directory to hold the dataset:

   <pre class="lang-sh prettyprint tat-client-exports">
   <span class="no-select">(vm)$ </span>export DATA_DIR=$IMAGENET_HOME/<var>dataset-directory</var>
   </pre>

1. Run the script to pre-process the raw dataset as TFRecords and upload it to
   Cloud Storage using the following command:

   Note: If you don't want to upload to Cloud Storage, specify `--nogcs_upload`
   as another parameter and leave off the `--project` and `--gcs_output_path`
   parameters.

   <pre class="prettypring lang-sh tat-dataset">
     python3 imagenet_to_gcs.py \
      --project=$PROJECT \
      --gcs_output_path=$STORAGE_BUCKET  \
      --raw_data_dir=$IMAGENET_HOME \
      --local_scratch_dir=$IMAGENET_HOME/tf_records
   </pre>

Note: Downloading and preprocessing the data can take 10 or more hours,
depending on your network and computer speed. Do not interrupt the script.

The script generates a set of directories (for both training and validation) of
the form:

    ${DATA_DIR}/train-00000-of-01024
    ${DATA_DIR}/train-00001-of-01024
     ...
    ${DATA_DIR}/train-01023-of-01024

and

    ${DATA_DIR}/validation-00000-of-00128
    S{DATA_DIR}/validation-00001-of-00128
     ...
    ${DATA_DIR}/validation-00127-of-00128

After the data has been uploaded to your Cloud bucket, run your model and set
`--data_dir=${DATA_DIR}`.

## Clean up {: #clean-up }

To avoid incurring charges to your GCP account for the resources used
in this topic:

1. Disconnect from the Compute Engine VM:

    <pre class="lang-sh prettyprint tat-skip">
    <span class="no-select">(vm)$ </span>exit
    </pre>

     Your prompt should now be `username@projectname`, showing you are in the
     Cloud Shell.

1. In your Cloud Shell, run `ctpu delete` with the --zone flag you used when
   you set up the Cloud TPU to delete your
   Compute Engine VM and your Cloud TPU:

    <pre class="lang-sh prettyprint tat-resource-setup">
    <span class="no-select">$ </span>ctpu delete [optional: --zone]
    </pre>

    Important: If you set the TPU resources name when you ran `ctpu up`, you must
    specify that name with the `--name` flag when you run `ctpu delete` in
    order to shut down your TPU resources.

1. Run `ctpu status` to make sure you have no instances allocated to avoid
   unnecessary charges for TPU usage. The deletion might take several minutes.
   A response like the one below indicates there are no more allocated
   instances:

    <pre class="lang-sh prettyprint tat-skip">
    <span class="no-select">$ </span>ctpu status --zone=europe-west4-a
    </pre>
    <pre class="lang-sh prettyprint tat-skip">
    2018/04/28 16:16:23 WARNING: Setting zone to "--zone=europe-west4-a"
    No instances currently exist.
        Compute Engine VM:     --
        Cloud TPU:             --
    </pre>

1. Run `gsutil` as shown, replacing <var>bucket-name</var> with the name of the
   Cloud Storage bucket you created for this tutorial:

    <pre class="lang-sh prettyprint tat-resource-setup">
    <span class="no-select">$ </span>gsutil rm -r gs://<var>bucket-name</var>
    </pre>

Note: For free storage limits and other pricing information, see the
[Cloud Storage pricing guide](/storage/pricing).

## Inception v4

The Inception v4 model is a deep neural network model that uses Inception v3
building blocks to achieve higher accuracy than Inception v3. It is described in
the paper "Inception-v4, Inception-ResNet and the Impact of Residual Connections
on Learning" by Szegedy et. al.

The Inception v4 model is pre-installed on your Compute Engine VM, in
the `/usr/share/tpu/models/experimental/inception/` directory.

In the following steps, a prefix of `(vm)$` means you should run the command on
your Compute Engine VM:

1. If you have TensorBoard running in your Cloud Shell tab, you need another tab
   to work in. Open another tab in your Cloud Shell, and use `ctpu` in the new
   shell to connect to your Compute Engine VM:

    <pre class="lang-sh prettyprint">
    <span class="no-select">$ </span>ctpu up --project=${PROJECT_ID} </pre>

1. Set up a `DATA_DIR` environment variable containing one of the following
   values:

    * If you are using the fake\_imagenet dataset:

        <pre class="prettyprint lang-sh">
        <span class="no-select">(vm)$ </span>export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
        </pre>

    * If you have uploaded a set of training data to your Cloud Storage
      bucket:

        <pre class="prettyprint lang-sh">
        <span class="no-select">(vm)$ </span>export DATA_DIR=${STORAGE_BUCKET}/data
        </pre>

1. Run the Inception v4 model:

    <pre class="lang-sh prettyprint">
    <span class="no-select">(vm)$ </span>python /usr/share/tpu/models/experimental/inception/inception_v4.py \
        --tpu=$TPU_NAME \
        --learning_rate=0.36 \
        --train_steps=1000000 \
        --iterations=500 \
        --use_tpu=True \
        --use_data=real \
        --train_batch_size=256 \
        --mode=train_and_eval \
        --train_steps_per_eval=2000 \
        --data_dir=${DATA_DIR} \
        --model_dir=${STORAGE_BUCKET}/inception</pre>

    * `--tpu` specifies the name of the Cloud TPU. `ctpu`
      passes this name to the Compute Engine VM as an environment
      variable (`TPU_NAME`).
    * `--use_data` specifies which type of data the program must use during
      training, either fake or real. The default value is fake.
    * `--train_batch_size` specifies the train batch size to be 256. As the
      Inception v4 model is larger than Inception v3, it must be run at a
      smaller batch size per TPU core.
    * `--data_dir` specifies the Cloud Storage path for training input.
      The application ignores this parameter when you're using fake\_imagenet
      data.
    * `--model_dir` specifies the directory where checkpoints and
      summaries are stored during model training. If the folder is missing, the
      program creates one. When using a Cloud TPU, the `model_dir`
      must be a Cloud Storage path (`gs://...`). You can reuse an existing
      folder to load current checkpoint data and to store additional
      checkpoints as long as the previous checkpoints were created using TPU of
      the same size and TensorFlow version.

    

Clean up

What's next

## What's next {: #whats-next } The TensorFlow Cloud TPU tutorials generally train the model using a sample dataset. The results of this training are not usable for inference. To use a model for inference, you can train the data on a publicly available dataset or your own data set. TensorFlow models trained on Cloud TPUs generally require datasets to be in [TFRecord](https://www.tensorflow.org/tutorials/load_data/tfrecord) format. You can use the [dataset conversion tool sample](https://cloud.google.com/tpu/docs/classification-data-conversion) to convert an image classification dataset into TFRecord format. If you are not using an image classification model, you will have to convert your dataset to [TFRecord](https://www.tensorflow.org/tutorials/load_data/tfrecord) format yourself. For more information, see [TFRecord and tf.Example](https://www.tensorflow.org/tutorials/load_data/tfrecord). ### Hyperparameter tuning To improve the model's performance with your dataset, you can tune the model's hyperparameters. You can find information about hyperparameters common to all TPU supported models on [GitHub](https://github.com/tensorflow/tpu/tree/master/models/hyperparameters). Information about model-specific hyperparameters can be found in the [source code](https://github.com/tensorflow/tpu/tree/master/models/official) for each model. For more information on hyperparameter tuning, see [Overview of hyperparameter tuning](https://cloud.google.com/ai-platform/training/docs/hyperparameter-tuning-overview), [Using the Hyperparameter tuning service](https://cloud.google.com/ai-platform/training/docs/using-hyperparameter-tuning), and [Tune hyperparameters](https://developers.google.com/machine-learning/guides/text-classification/step-5). ### Inference Once you have trained your model you can use it for inference (also called prediction). [AI Platform](https://cloud.google.com/ai-platform/docs/technical-overview) is a cloud-based solution for developing, [training](https://cloud.google.com/ai-platform/training/docs), and [deploying](https://cloud.google.com/ai-platform/prediction/docs/deploying-models) machine learning models. Once a model is deployed, you can use the [AI Platform Prediction service](https://cloud.google.com/ai-platform/prediction/docs). * Go in depth with an [advanced view](/tpu/docs/inception-v3-advanced) of Inception v3 on Cloud TPU. * Learn more about [`ctpu`](https://github.com/tensorflow/tpu/tree/master/tools/ctpu), including how to install it on a local machine. * Explore the [TPU tools in TensorBoard](/tpu/docs/cloud-tpu-tools){: track-type="gettingStarted" track-name="tutorialLink" track-metadata-position="nextSteps"}.