Entrena a un transformador en Cloud TPU (TF 2.x)

Si no estás familiarizado con Cloud TPU, te recomendamos que revises la guía de inicio rápido para obtener información sobre cómo crear una TPU y una VM de Compute Engine.

En este instructivo, se muestra cómo entrenar un modelo de transformación en Cloud TPU. Un transformador es una arquitectura de red neuronal que resuelve una secuencia para los problemas de la secuencia mediante mecanismos de atención. A diferencia de los modelos neuronales seq2seq tradicionales, Transformer no implica conexiones recurrentes. El mecanismo de atención aprende dependencias entre tokens en dos secuencias. Debido a que los pesos de atención se aplican a todos los tokens de las secuencias, el modelo Transformer puede capturar fácilmente dependencias de larga distancia.

La estructura general de Transformer sigue el patrón de codificador y decodificador estándar. El codificador usa la atención automática para calcular una representación de la secuencia de entrada. El decodificador genera la secuencia de salida de un token a la vez y toma los datos de salida del codificador y los anteriores generados por el decodificador como entradas.

El modelo también aplica incorporaciones en los tokens de entrada y salida, y agrega una codificación posicional constante. La codificación posicional agrega información sobre la posición de cada token.

Objetivos

  • Crear un bucket de Cloud Storage para almacenar el resultado de tu modelo y tu conjunto de datos
  • Descargar y procesar con anterioridad el conjunto de datos que se usa para entrenar el modelo
  • Ejecutar el trabajo de entrenamiento
  • Verificar los resultados de salida

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

  • Compute Engine
  • Cloud TPU

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

Antes de comenzar este instructivo, verifica que tu proyecto de Google Cloud esté configurado correctamente.

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  4. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  6. En esta explicación, se usan componentes facturables de Google Cloud. Consulta la página de precios de Cloud TPU para calcular los costos. Asegúrate de limpiar los recursos que crees cuando hayas terminado de usarlos para evitar cargos innecesarios.

Entrenamiento de dispositivos de una sola Cloud TPU

En esta sección, se proporciona información sobre la configuración del bucket de Cloud Storage, la VM y los recursos de Cloud TPU para el entrenamiento de un solo dispositivo.

  1. Abre una ventana de Cloud Shell.

    Abrir Cloud Shell

  2. Crea una variable para el ID de tu proyecto.

    export PROJECT_ID=project-id
  3. Configura la herramienta de línea de comandos de gcloud para usar el proyecto en el que deseas crear una Cloud TPU.

    gcloud config set project ${PROJECT_ID}

    La primera vez que ejecutes este comando en una VM nueva de Cloud Shell, se mostrará una página Authorize Cloud Shell. Haz clic en Authorize en la parte inferior de la página para permitir que gcloud realice llamadas a la API de GCP con tus credenciales.

  4. Crea una cuenta de servicio para el proyecto de Cloud TPU.

    Las cuentas de servicio permiten que el servicio de Cloud TPU acceda a otros servicios de Google Cloud Platform.

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

    El comando muestra una cuenta de servicio de Cloud TPU con el siguiente formato:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Crea un bucket de Cloud Storage con el siguiente comando:

    $ gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
    

    En este bucket de Cloud Storage se almacenan los datos que usas para entrenar tu modelo y los resultados del entrenamiento. El comando gcloud que se usó en este instructivo para configurar la TPU también configura permisos predeterminados para la cuenta de servicio de Cloud TPU que configuraste en el paso anterior. Si deseas obtener permisos más detallados, revisa los permisos de nivel de acceso.

Prepara el conjunto de datos

A fin de reducir los costos generales, te recomendamos que uses una VM de Compute Engine para realizar una descarga o procesamiento previo de tus datos de larga duración.

  1. Abre una ventana de Cloud Shell.

    Abra Cloud Shell

  2. Crear una VM de Compute Engine para descargar y preprocesar los datos

    gcloud compute tpus execution-groups create --name=transformer-tutorial \
      --disk-size=300 \
      --machine-type=n1-standard-8 \
      --zone=europe-west4-a \
      --tf-version=2.7.0 \
      --vm-only
  3. Si no estás conectado de forma automática a la instancia de Compute Engine, accede mediante la ejecución del siguiente comando de ssh. Cuando accedes a la VM, la solicitud de shell cambia de username@projectname a username@vm-name:

    gcloud compute ssh transformer-tutorial --zone=europe-west4-a

    A medida que continúas con estas instrucciones, ejecuta cada comando que comience con (vm)$ en tu instancia de Compute Engine.

  4. Exporta variables de configuración de TPU

    Exporta el ID del proyecto, el nombre que deseas usar para tus recursos de TPU y la zona en la que entrenarás el modelo y almacenarás todos los datos relacionados con el entrenamiento.

    $ export TPU_NAME=transformer-tutorial
    $ export ZONE=europe-west4-a

  5. Exporta las variables del bucket de Cloud Storage. Reemplaza bucket-name por el nombre de tu depósito:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export GCS_DATA_DIR=${STORAGE_BUCKET}/data/transformer
    (vm)$ export DATA_DIR=${HOME}/transformer/data
    
  6. Instala los requisitos de TensorFlow y configura la variable de entorno PYTHONPATH.

    (vm)$ pip3 install -r /usr/share/models/official/requirements.txt
    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  7. Ve al directorio en el que se almacena el modelo:

    (vm)$ cd /usr/share/models/official/nlp/transformer
  8. Descarga y procesa de forma previa los conjuntos de datos

    (vm)$ python3 data_download.py --data_dir=${DATA_DIR}
    (vm)$ gsutil cp -r ${DATA_DIR} ${GCS_DATA_DIR}
    

    data_download.py descarga y procesa de manera previa los conjuntos de datos de entrenamiento y evaluación de WMT. Después de descargar y extraer los datos, los datos de entrenamiento se usan para generar un vocabulario de subtokens. Se asignan tokens a las strings de evaluación y entrenamiento, y los datos resultantes se fragmentan, se mezclan y se guardan como TFRecords.

    Se descargan 1.75 GB de datos comprimidos. En total, los archivos sin procesar (archivos comprimidos, extraídos y combinados) ocupan 8.4 GB de espacio en disco. Los archivos TFRecord y de vocabulario resultantes son 722 MB. La secuencia de comandos guarda 460,000 casos y tarda unos 40 minutos en ejecutarse.

  9. Limpia los recursos de VM

    Una vez que el conjunto de datos se haya convertido en TFRecords y se haya copiado en DATA_DIR en tu bucket de Cloud Storage, puedes borrar la instancia de Compute Engine.

    Desconéctate de la instancia de Compute Engine:

    (vm)$ exit
    

    El mensaje ahora debería ser username@projectname, lo que indica que estás de vuelta en Cloud Shell.

  10. Borra tu instancia de Compute Engine.

    $ gcloud compute instances delete transformer-tutorial \
        --zone=europe-west4-a

Entrena un modelo de traducción inglés-alemán en un solo Cloud TPU

  1. Inicia una VM de Compute Engine y Cloud TPU con el comando gcloud. El comando que uses dependerá de si usas VM o nodos TPU. Para obtener más información sobre la arquitectura de las dos VM, consulta Arquitectura del sistema.

    VM de TPU

    $ gcloud alpha compute tpus tpu-vm create transformer-tutorial \
     --zone=europe-west4-a \
     --accelerator-type=v3-8 \
     --version=tpu-vm-tf-2.7.0
    

    Descripciones de las marcas de comandos

    zone
    La zona en la que planeas crear tu Cloud TPU.
    accelerator-type
    El tipo de Cloud TPU que se creará.
    version
    La versión del entorno de ejecución de Cloud TPU.

    Nodo TPU

    $ gcloud compute tpus execution-groups create \
    --name=transformer-tutorial \
    --disk-size=300 \
    --machine-type=n1-standard-8 \
    --zone=europe-west4-a \
    --tf-version=2.7.0
    

    Descripciones de las marcas de comandos

    disk-size
    El tamaño del disco de la VM en GB.
    machine_type
    El tipo de máquina de la VM que crea el comando gcloud.
    tf-version
    La versión de gcloud compute tpus execution-groups de TensorFlow se instala en la VM.
  2. Si no accedes automáticamente a la instancia de Compute Engine, accede mediante la ejecución del siguiente comando de ssh.

    VM de TPU

    gcloud alpha compute tpus tpu-vm ssh transformer-tutorial --zone=europe-west4-a
    

    Nodo TPU

    gcloud compute ssh transformer-tutorial --zone=europe-west4-a
    
  3. Exporta las variables de almacenamiento de datos.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export GCS_DATA_DIR=${STORAGE_BUCKET}/data/transformer
    (vm)$ export DATA_DIR=${HOME}/transformer/data
    (vm)$ export PARAM_SET=big
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET}
    
  4. Instala los requisitos de TensorFlow.

    VM de TPU

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
    (vm)$  export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
    

    Nodo TPU

    (vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
    (vm)$ export PYTHONPATH="/usr/share/models:$PYTHONPATH"
    
  5. Exporta una variable de Cloud TPU.

    VM de TPU

    (vm)$ export TPU_NAME=local

    Nodo TPU

    (vm)$ export TPU_NAME=transformer-tutorial

  6. Cambia al directorio de entrenamiento.

    VM de TPU

    (vm)$ cd /usr/share/tpu/models/official/nlp/transformer

    Nodo TPU

    (vm)$ cd /usr/share/models/official/nlp/transformer
  7. Ejecuta la secuencia de comandos de entrenamiento:

    (vm)$ python3 transformer_main.py \
        --tpu=${TPU_NAME} \
        --model_dir=${MODEL_DIR} \
        --data_dir=${GCS_DATA_DIR} \
        --vocab_file=${GCS_DATA_DIR}/vocab.ende.32768 \
        --bleu_source=${GCS_DATA_DIR}/newstest2014.en \
        --bleu_ref=${GCS_DATA_DIR}/newstest2014.de \
        --batch_size=6144 \
        --train_steps=2000 \
        --static_batch=true \
        --use_ctl=true \
        --param_set=big \
        --max_length=64 \
        --decode_batch_size=32 \
        --decode_max_length=97 \
        --padded_decode=true \
        --distribution_strategy=tpu
    

    Descripciones de las marcas de comandos

    tpu
    El nombre de Cloud TPU. Para ello, especifica la variable de entorno (TPU_NAME).
    model_dir
    El bucket de Cloud Storage en el que se almacenan los puntos de control y los resúmenes durante el entrenamiento. Puedes usar una carpeta existente para cargar puntos de control generados con anterioridad en una TPU del mismo tamaño y con la misma versión de TensorFlow.
    data_dir
    La ruta de entrada de entrenamiento en Cloud Storage. En este ejemplo, se establece como el conjunto de datos fake_imagenet.
    vocab_file
    Archivo que contiene el vocabulario para traducir.
    bleu_source
    Archivo que contiene oraciones de origen para traducir.
    bleu_ref
    Archivo que contiene la referencia para las oraciones de traducción.
    train_steps
    La cantidad de pasos para entrenar el modelo. Un paso procesa un lote de datos. Esto incluye un paso hacia delante y una propagación inversa.
    batch_size
    El tamaño del lote de entrenamiento.
    static_batch
    Especifica si los lotes en el conjunto de datos tienen formas estáticas.
    use_ctl
    Especifica si la secuencia de comandos se ejecuta con un bucle de entrenamiento personalizado.
    param_set
    El parámetro configurado para usar cuando se crea y entrena el modelo. Los parámetros definen la forma de entrada, la configuración del modelo y otras opciones de configuración.
    max_length
    La longitud máxima de un ejemplo en el conjunto de datos.
    decode_batch_size
    El tamaño del lote global que se usa para la decodificación de regresión automática de transformaciones en una Cloud TPU.
    decode_max_length
    El largo máximo de la secuencia de los datos de decodificación y evaluación. La usa la decodificación de regresión automática de un transformador en una Cloud TPU para minimizar la cantidad de relleno de datos requerido.
    padded_decode
    Especifica si la decodificación de regresión automática se ejecuta con datos de entrada agregados a decode_max_length. Para las ejecuciones de TPU/XLA-GPU, esta marca debe estar configurada debido al requisito de forma estática.
    distribution_strategy
    Para entrenar el modelo ResNet en una Cloud TPU, establece distribution_strategy en tpu.

    De forma predeterminada, el modelo se evaluará después de cada 2,000 pasos. Para entrenarse en la convergencia, cambia train_steps a 200,000. Puedes aumentar la cantidad de pasos de entrenamiento o especificar la frecuencia con la que se ejecutan las evaluaciones mediante la configuración de estos parámetros:

    • --train_steps: Configura la cantidad total de pasos de entrenamiento que se deben ejecutar.
    • --steps_between_evals: Cantidad de pasos de entrenamiento que se deben ejecutar entre las evaluaciones.

    El entrenamiento y la evaluación toman aproximadamente 7 minutos en Cloud TPU v3-8. Cuando se completan el entrenamiento y la evaluación, aparece un mensaje similar al siguiente:

    INFO:tensorflow:Writing to file /tmp/tmpej76vasn
    I0218 20:07:26.020797 140707963950912 translate.py:184] Writing to file /tmp/tmpej76vasn
    I0218 20:07:35.099256 140707963950912 transformer_main.py:118] Bleu score (uncased): 0.99971704185009
    I0218 20:07:35.099616 140707963950912 transformer_main.py:119] Bleu score (cased): 0.9768599644303322
    

    Ya completaste el entrenamiento para un solo dispositivo. Sigue estos pasos para borrar tus recursos de TPU de dispositivo único.

  8. Desconéctate de la instancia de Compute Engine:

    (vm)$ exit
    

    El mensaje ahora debería mostrar username@projectname, que indica que estás en Cloud Shell.

  9. Borra el recurso TPU.

    VM de TPU

    $ gcloud alpha compute tpus tpu-vm delete transformer-tutorial \
    --zone=europe-west4-a
    

    Descripciones de las marcas de comandos

    zone
    La zona en la que residió tu Cloud TPU.

    Nodo TPU

    $ gcloud compute tpus execution-groups delete transformer-tutorial \
    --zone=europe-west4-a
    

    Descripciones de las marcas de comandos

    tpu-only
    Borra solo Cloud TPU. La VM permanece disponible.
    zone
    La zona que contiene la TPU que se borrará.

En este punto, puedes finalizar este instructivo y limpiar, o puedes continuar y explorar la ejecución del modelo en los pods de Cloud TPU.

Escala tu modelo con pods de Cloud TPU

En las siguientes instrucciones, se supone que ya abriste Cloud Shell, configuraste tu proyecto de TPU y creaste un bucket de Cloud Storage como se explica al comienzo de este instructivo.

Entrenamiento de pods de TPU

  1. Abre una ventana de Cloud Shell.

    Abrir Cloud Shell

  2. Crea una variable para el ID de tu proyecto.

    export PROJECT_ID=project-id
    
  3. Configura la herramienta de línea de comandos de gcloud para usar el proyecto en el que deseas crear una Cloud TPU.

    gcloud config set project ${PROJECT_ID}
    

    La primera vez que ejecutes este comando en una VM nueva de Cloud Shell, se mostrará una página Authorize Cloud Shell. Haz clic en Authorize en la parte inferior de la página para permitir que gcloud realice llamadas a la API de GCP con tus credenciales.

  4. Crea una cuenta de servicio para el proyecto de Cloud TPU.

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

    El comando muestra una cuenta de servicio de Cloud TPU con el siguiente formato:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Crea un bucket de Cloud Storage mediante el siguiente comando o usa un bucket que hayas creado antes para el proyecto:

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

    Este bucket de Cloud Storage almacena los datos que usas para entrenar tu modelo y los resultados del entrenamiento. El comando gcloud que se usa en este instructivo configura los permisos predeterminados para la cuenta de servicio de Cloud TPU que configuraste en el paso anterior. Si deseas obtener permisos más detallados, revisa los permisos de nivel de acceso.

Inicia los recursos de la VM de TPU.

  1. Inicia un Pod de VM de TPU con el comando gcloud. En este instructivo, se especifica un pod v3-32. Para conocer otras opciones de pods, consulta la página de tipos de TPU disponibles.

    VM de TPU

    $ gcloud alpha compute tpus tpu-vm create transformer-tutorial \
    --zone=europe-west4-a \
    --accelerator-type=v3-32 \
    --version=tpu-vm-tf-2.7.0-pod
    

    Descripciones de las marcas de comandos

    zone
    La zona en la que planeas crear tu Cloud TPU.
    accelerator-type
    El tipo de Cloud TPU que se creará.
    version
    La versión del entorno de ejecución de Cloud TPU.

    Nodo TPU

    (vm)$ gcloud compute tpus execution-groups create \
    --name=transformer-tutorial \
    --accelerator-type=v3-32 \
    --zone=europe-west4-a \
    --tf-version=2.7.0
    

    Descripciones de las marcas de comandos

    tpu-only
    Crea una Cloud TPU sola. De forma predeterminada, el comando gcloud compute tpus execution-groups crea una VM y una Cloud TPU.
    accelerator-type
    El tipo de Cloud TPU que se creará.
    zone
    Es la zona en la que deseas crear la Cloud TPU. Debe ser la misma zona que usaste para la VM de Compute Engine. Por ejemplo:europe-west4-a
    tf-version
    La versión de gcloud de TensorFlow se instala en la VM.
    name
    El nombre de la Cloud TPU que se creará.
  2. Si no accedes automáticamente a la instancia de Compute Engine, accede mediante la ejecución del siguiente comando de ssh. Cuando accedes a la VM, la solicitud de shell cambia de username@projectname a username@vm-name:

    VM de TPU

    gcloud alpha compute tpus tpu-vm ssh transformer-tutorial --zone=europe-west4-a
    

    Nodo TPU

    gcloud compute ssh transformer-tutorial --zone=europe-west4-a
    

Instala TensorFlow y dependencias

  1. Instala los requisitos de TensorFlow.

      (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
      (vm)$  export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
      

  2. Exporta la variable PYTHONPATH.

    VM de TPU

    
    (vm)$ PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"

    Nodo TPU

    (vm)$ export PYTHONPATH="/usr/share/models:$PYTHONPATH"

Configura y, luego, inicia el entrenamiento del pod

  1. Exporta las variables de configuración de Cloud TPU:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export GCS_DATA_DIR=${STORAGE_BUCKET}/data/transformer
    (vm)$ export DATA_DIR=${HOME}/transformer/data
    (vm)$ export PARAM_SET=big
    (vm)$ export TPU_LOAD_LIBRARY=0
    (vm)$ export RESNET_PRETRAIN_DIR=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET}_pod
    (vm)$ export TPU_NAME=transformer-tutorial
    
  2. Cambie al directorio de entrenamiento:

    VM de TPU

    (vm)$ cd /usr/share/tpu/models/official/nlp/transformer

    Nodo TPU

    (vm)$ cd /usr/share/models/official/nlp/transformer
  3. Ejecuta la secuencia de comandos de entrenamiento:

    (vm)$ python3 transformer_main.py \
        --tpu=${TPU_NAME} \
        --model_dir=${MODEL_DIR} \
        --data_dir=${GCS_DATA_DIR} \
        --vocab_file=${GCS_DATA_DIR}/vocab.ende.32768 \
        --bleu_source=${GCS_DATA_DIR}/newstest2014.en \
        --bleu_ref=${GCS_DATA_DIR}/newstest2014.de \
        --batch_size=6144 \
        --train_steps=2000 \
        --static_batch=true \
        --use_ctl=true \
        --param_set=big \
        --max_length=64 \
        --decode_batch_size=32 \
        --decode_max_length=97 \
        --padded_decode=true \
        --distribution_strategy=tpu

    Descripciones de las marcas de comandos

    tpu
    El nombre de Cloud TPU. Para ello, especifica la variable de entorno (TPU_NAME).

     <dt><code>model_dir</code></dt>
     <dd>The Cloud Storage bucket where checkpoints and summaries are
       stored during training. You can use an existing folder to load previously
       generated checkpoints created on a TPU of the same size and
       TensorFlow version.</dd>
    
     <dt><code>data_dir</code></dt>
     <dd>The Cloud Storage path of training input. It is set to the
       fake_imagenet dataset in this example.</dd>
    
     <dt><code>vocab_file</code></dt>
     <dd>A file that contains the vocabulary for translation.</dd>
    
     <dt><code>bleu_source</code></dt>
     <dd>A file that contains source sentences for translation.</dd>
    
     <dt><code>bleu_ref</code></dt>
     <dd>A file that contains the reference for the translation sentences.</dd>
    
     <dt><code>train_steps</code></dt>
     <dd>The number of steps to train the model. One step processes one batch
       of data. This includes both a forward pass and back propagation.</dd>
    
     <dt><code>batch_size</code></dt>
     <dd>The training batch size.</dd>
    
     <dt><code>static_batch</code></dt>
     <dd>Specifies whether the batches in the dataset has static shapes.</dd>
    
     <dt><code>use_ctl</code></dt>
     <dd>Specifies whether the script runs with a custom training loop.</dd>
    
     <dt><code>param_set</code></dt>
     <dd>The parameter set to use when creating and training the model. The
      parameters define the input shape, model configuration, and other
      settings.</dd>
    
     <dt><code>max_length</code></dt>
     <dd>The maximum length of an example in the dataset.</dd>
    
     <dt><code>decode_batch_size</code></dt>
     <dd>The global batch size used for Transformer auto-regressive decoding
       on a Cloud TPU.</dd>
    
     <dt><code>decode_max_length</code></dt>
     <dd>The maximum sequence length of the decode/eval data. This is used by
       the Transformer auto-regressive decoding on a Cloud TPU to minimize
       the amount of required data padding.</dd>
    
     <dt><code>padded_decode</code></dt>
     <dd>Specifies whether the auto-regressive decoding runs with input data
       padded to the decode_max_length. Tor TPU/XLA-GPU runs, this flag must
       be set due to the static shape requirement.</dd>
    
     <dt><code>distribution_strategy</code></dt>
     <dd>To train the ResNet model on a Cloud TPU, set <code>distribution_strategy</code>
       to <code>tpu</code>.</dd>
    </dl>
    

De forma predeterminada, el modelo se evaluará después de cada 2,000 pasos. Para entrenarse en la convergencia, cambia train_steps a 200,000. Puedes aumentar la cantidad de pasos de entrenamiento o especificar la frecuencia con la que se ejecutan las evaluaciones mediante la configuración de estos parámetros:

  • --train_steps: Configura la cantidad total de pasos de entrenamiento que se deben ejecutar.
  • --steps_between_evals: Cantidad de pasos de entrenamiento que se deben ejecutar entre las evaluaciones.

El entrenamiento y la evaluación tardan alrededor de 7 minutos en una Cloud TPU v3-32. Cuando se completan el entrenamiento y la evaluación, aparecen mensajes similares a los siguientes:

I0415 00:28:33.108577 140097002981184 transformer_main.py:311] Train Step: 2000/2000 / loss = 5.139615058898926
I0415 00:28:33.108953 140097002981184 keras_utils.py:148] TimeHistory: 120.39 seconds, 102065.86 examples/second between steps 0 and 2000
.
.
.
I0415 00:32:01.785520 140097002981184 transformer_main.py:116] Bleu score (uncased): 0.8316259831190109
I0415 00:32:01.786150 140097002981184 transformer_main.py:117] Bleu score (cased): 0.7945530116558075

Esta secuencia de comandos de entrenamiento entrena para 2,000 pasos y ejecuta la evaluación cada 2,000 pasos. Este entrenamiento y evaluación en particular tardan alrededor de 8 minutos en un pod de Cloud TPU v3-32. Cuando se completan el entrenamiento y la evaluación, aparece un mensaje similar al siguiente:

INFO:tensorflow:Writing to file /tmp/tmpdmlanxcf
I0218 21:09:19.100718 140509661046592 translate.py:184] Writing to file /tmp/tmpdmlanxcf
I0218 21:09:28.043537 140509661046592 transformer_main.py:118] Bleu score (uncased): 1.799112930893898
I0218 21:09:28.043911 140509661046592 transformer_main.py:119] Bleu score (cased): 1.730366237461567

Para entrenar la convergencia, cambia train_steps a 200,000. Puedes aumentar la cantidad de pasos de entrenamiento o especificar la frecuencia con la que se ejecutan las evaluaciones mediante la configuración de estos parámetros:

  • --train_steps: Configura la cantidad total de pasos de entrenamiento que se deben ejecutar.
  • --steps_between_evals: Cantidad de pasos de entrenamiento para ejecutar entre evaluaciones.

Cuando se completan el entrenamiento y la evaluación, aparece un mensaje similar al siguiente:

0509 00:27:59.984464 140553148962624 translate.py:184] Writing to file /tmp/tmp_rk3m8jp
I0509 00:28:11.189308 140553148962624 transformer_main.py:119] Bleu score (uncased): 1.3239131309092045
I0509 00:28:11.189623 140553148962624 transformer_main.py:120] Bleu score (cased): 1.2855342589318752

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

  1. Desconéctate de la instancia de Compute Engine, si aún no lo hiciste:

    (vm)$ exit
    

    El mensaje ahora debería mostrar username@projectname, que indica que estás en Cloud Shell.

  2. Borra los recursos de Cloud TPU y Compute Engine. El comando que uses para borrar tus recursos depende de si usas VM de TPU o nodos TPU. Para obtener más información, consulta Arquitectura del sistema.

    VM de TPU

    $ gcloud alpha compute tpus tpu-vm delete transformer-tutorial \
    --zone=europe-west4-a
    

    Nodo TPU

    $ gcloud compute tpus execution-groups delete transformer-tutorial \
    --zone=europe-west4-a
    
  3. Ejecuta gsutil como se muestra y reemplaza bucket-name por el nombre del depósito de Cloud Storage que creaste para este instructivo:

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

¿Qué sigue?

Por lo general, los instructivos de TensorFlow para Cloud TPU entrenan el modelo mediante un conjunto de datos de muestra. En la mayoría de los casos, los resultados de este entrenamiento no se pueden usar para la inferencia. Si quieres usar un modelo para la inferencia, puedes entrenar los datos en un conjunto de datos disponible públicamente o en tu propio conjunto de datos. Por lo general, los modelos de TensorFlow entrenados en Cloud TPU requieren que los conjuntos de datos estén en formato TFRecord.

Puedes usar la muestra de la herramienta de conversión de conjuntos de datos para convertir un conjunto de datos de clasificación de imágenes en formato TFRecord. Si no usas un modelo de clasificación de imágenes, deberás convertir tú mismo el conjunto de datos en formato TFRecord. Para obtener más información, consulta TFRecord y tf.Example.

Ajuste de hiperparámetros

Para mejorar el rendimiento del modelo con tu conjunto de datos, puedes ajustar los hiperparámetros del modelo. Puedes encontrar información sobre los hiperparámetros comunes para todos los modelos compatibles con TPU en GitHub. La información sobre los hiperparámetros específicos de modelos se puede encontrar en el código fuente para cada modelo. Para obtener más información sobre el ajuste de hiperparámetros, consulta Descripción general del ajuste de hiperparámetros ,Usa el servicio de ajuste de hiperparámetros yAjusta los hiperparámetros ,

Inferencia

Una vez que hayas entrenado tu modelo, puedes usarlo para la inferencia (también llamado predicción). AI Platform es una solución basada en la nube para desarrollar, entrenar y implementar el aprendizaje automático modelos. Una vez implementado un modelo, puedes usar el servicio de AI Platform Prediction.