En este instructivo, se muestra cómo entrenar el modelo "Representaciones de codificador bidireccional de transformadores" (BERT) en Cloud TPU.
BERT es un método para realizar un entrenamiento previo de representaciones lingüísticas. El entrenamiento previo se refiere a la manera en que BERT se entrena primero en una gran fuente de texto, como Wikipedia. A continuación, puedes aplicar los resultados del entrenamiento a otras tareas de procesamiento de lenguaje natural (PLN), como respuesta a preguntas y análisis de opiniones. Con BERT y Cloud TPU, puedes entrenar una variedad de modelos de PLN en alrededor de 30 minutos.
Para obtener más información sobre BERT, consulta los siguientes recursos:
- Código abierto de BERT: Entrenamiento previo de vanguardia para procesamiento de lenguaje natural
- BERT: Entrenamiento previo de transformadores bidireccionales profundos para comprensión de lenguaje
Objetivos
- Crear un bucket de Cloud Storage para almacenar el resultado de tu modelo y tu conjunto de datos
- Ejecutar el trabajo de entrenamiento
- Verificar los resultados de salida
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Compute Engine
- Cloud TPU
- Cloud Storage
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
En esta sección, se proporciona información sobre cómo configurar el bucket de Cloud Storage y una VM de Compute Engine.
Abre una ventana de Cloud Shell.
Crea una variable para el ID de tu proyecto.
export PROJECT_ID=project-id
Configura Google Cloud CLI para usar el proyecto en el que quieres crear Cloud TPU
gcloud config set project ${PROJECT_ID}
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
Crea un bucket de Cloud Storage con el siguiente comando:
gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central1
En este bucket de Cloud Storage se almacenan los datos que usas para entrenar tu modelo y los resultados del entrenamiento. El comando que usas para crear una TPU
gcloud compute tpus tpu-vm create
configura los permisos predeterminados para La cuenta de servicio de Cloud TPU que configuraste en el paso anterior. Si quieres contar con permisos más detallados, revisa los permisos de nivel de acceso.La ubicación del bucket debe estar en la misma región que la TPU (VM).
Inicia una VM de TPU con
gcloud
. Para obtener más información, consulta la Referencia de gcloud.$ gcloud compute tpus tpu-vm create bert-tutorial \ --zone=us-central1-b \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.17.0-se
Descripciones de las marcas de comandos
zone
- Es la zona en la que deseas crear la Cloud TPU.
accelerator-type
- El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
version
- La versión de software de Cloud TPU.
Conéctate a la instancia de VM de TPU mediante SSH. Cuando te conectas a la VM, El símbolo del sistema de shell cambia de
username@projectname
ausername@vm-name
:gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b
Crea una variable de entorno para el nombre de la TPU.
(vm)$ export TPU_NAME=local
Prepara el conjunto de datos
Define el bucket de almacenamiento necesario para almacenar el modelo y el conjunto de datos:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
Copia los archivos de punto de control y vocabulario previamente entrenados en tu bucket de almacenamiento:
(vm)$ curl https://storage.googleapis.com/tf_model_garden/nlp/bert/v3/uncased_L-12_H-768_A-12.tar.gz -o uncased_L-12_H-768_A-12.tar.gz (vm)$ mkdir -p uncased_L-12_H-768_A-12 (vm)$ tar -xvf uncased_L-12_H-768_A-12.tar.gz (vm)$ gcloud storage cp uncased_L-12_H-768_A-12 ${STORAGE_BUCKET} --recursive
Entrena el modelo
Define varios valores de parámetros que se requieren cuando entrenas y evalúas el modelo:
(vm)$ export INIT_CHECKPOINT=${STORAGE_BUCKET}/uncased_L-12_H-768_A-12/bert_model.ckpt (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export VOCAB_FILE=${STORAGE_BUCKET}/uncased_L-12_H-768_A-12/vocab.txt (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/bert-output (vm)$ export TASK=mnli
Instala los requisitos de TensorFlow.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Configura la variable de entorno
PYTHONPATH
.(vm)$ export PYTHONPATH=/usr/share/tpu/models
Ve al directorio en el que se almacena el modelo:
(vm)$ cd /usr/share/tpu/models
Ejecuta la secuencia de comandos de entrenamiento:
(vm)$ python3 official/nlp/train.py \ --tpu=${TPU_NAME} \ --experiment=bert/sentence_prediction_text \ --mode=train_and_eval \ --model_dir=${MODEL_DIR} \ --config_file=official/nlp/configs/experiments/glue_mnli_text.yaml \ --params_override="runtime.distribution_strategy=tpu, task.init_checkpoint=${INIT_CHECKPOINT}, task.train_data.tfds_data_dir=${TFDS_DIR}, task.train_data.vocab_file=${VOCAB_FILE}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.vocab_file=${VOCAB_FILE}, trainer.train_steps=2000"
Descripciones de las marcas de comandos
tpu
- El nombre de Cloud TPU que se usará para el entrenamiento.
mode
- Uno de
train
,eval
,train_and_eval
opredict
. model_dir
- La ruta de acceso de Cloud Storage en la que se almacenan puntos de control y resúmenes durante el entrenamiento de modelos. Puedes reutilizar una carpeta existente para cargar puntos de control generados con anterioridad y almacenar puntos de control adicionales siempre que los puntos de control anteriores se hayan creado mediante una Cloud TPU del mismo tamaño y versión de TensorFlow.
La secuencia de comandos se entrena para 2,000 pasos y, luego, ejecuta 307 pasos de evaluación. En una TPU v3-8, después de aproximadamente 5 minutos, la secuencia de comandos de entrenamiento debería completarse y mostrar resultados similares a los siguientes:
I0719 00:47:52.683979 140297079573568 controller.py:457] train | step: 2000 | steps/sec: 26.3 | output: {'cls_accuracy': 0.7249375, 'learning_rate': 1.4670059e-05, 'training_loss': 0.6740678} train | step: 2000 | steps/sec: 26.3 | output: {'cls_accuracy': 0.7249375, 'learning_rate': 1.4670059e-05, 'training_loss': 0.6740678} I0719 00:47:53.184051 140297079573568 controller.py:277] eval | step: 2000 | running 307 steps of evaluation... eval | step: 2000 | running 307 steps of evaluation...
Limpia
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.Borra tus recursos de Cloud TPU y Compute Engine.
$ gcloud compute tpus tpu-vm delete bert-tutorial \ --zone=us-central1-b
Ejecuta
gcloud compute tpus tpu-vm list
para verificar que los recursos se hayan borrado. La eliminación puede tardar varios minutos. El resultado del siguiente comando no debe incluir ninguno de los recursos creados en este instructivo:$ gcloud compute tpus tpu-vm list --zone=us-central1-b
Borra el bucket de Cloud Storage con gcloud CLI como se muestra a continuación en el siguiente ejemplo. Reemplaza bucket-name por el nombre de tu bucket de Cloud Storage.
$ gcloud storage rm gs://bucket-name --recursive
¿Qué sigue?
Los instructivos de TensorFlow Cloud TPU suelen entrenar el modelo con un conjunto de datos de muestra. Los resultados de este entrenamiento no se pueden usar para la inferencia. Para usar un modelo para inferencia, puedes entrenar los datos en un modelo conjunto de datos o uno propio. Modelos de TensorFlow entrenados con Cloud TPU generalmente requieren que los conjuntos de datos estén 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 una imagen de clasificación de datos, tendrás que convertir tu conjunto de datos a Formato TFRecord tú mismo. 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 hiperparámetros comunes para todos los modelos compatibles con TPU en GitHub. La información sobre los hiperparámetros específicos del modelo se puede encontrar en la fuente de la aplicación para cada un modelo de responsabilidad compartida. Para obtener más información sobre el ajuste de hiperparámetros, consulta Descripción general de ajuste de hiperparámetros y ajustes hiperparámetros.
Inferencia
Una vez que entrenaste tu modelo, puedes usarlo para la inferencia (también llamada predicción). Puedes usar el conversor de inferencia de Cloud TPU de desarrollo de software para preparar y optimizar un Modelo de TensorFlow para inferencias en Cloud TPU v5e. Para obtener más información sobre la inferencia en Cloud TPU v5e, consulta la Introducción a la inferencia de Cloud TPU v5e.
- Explora las herramientas de TPU en TensorBoard.