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 VM de TPU.
En este instructivo, se muestra cómo entrenar el modelo HuggingFace GPT2 en Cloud TPU.
Objetivos
- Crear una Cloud TPU
- Instala dependencias
- Ejecuta el trabajo de entrenamiento
Costos
En este documento, usarás 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.
Antes de comenzar
Antes de comenzar este instructivo, verifica que tu proyecto de Google Cloud esté configurado correctamente.
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
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.
Entrena HuggingFace GPT2 con Cloud TPU
Abre una ventana de Cloud Shell.
Crea una variable de entorno para el ID de tu proyecto.
export PROJECT_ID=your-project-id
Configura Google Cloud CLI para usar tu proyecto de Google Cloud en la que quieres crear una Cloud TPU.
gcloud config set project ${PROJECT_ID}
La primera vez que ejecutes este comando en una nueva VM de Cloud Shell, se Se muestra la página
Authorize Cloud Shell
. Haz clic enAuthorize
en la parte inferior de la página para permitir quegcloud
realice llamadas a la API de Google Cloud con tus credenciales de Google Cloud.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.
$ 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
Crear una Cloud TPU
Crea una VM de Cloud TPU con el comando
gcloud
. El siguiente comando crea una TPUv4-8
. También puedes crear una porción de pod de TPU configurando la marca--accelerator-type
en un tipo de porción de pod, por ejemplo,v4-32
.$ gcloud compute tpus tpu-vm create hf-gpt2 \ --zone=us-central2-b \ --accelerator-type=v4-8 \ --version=tpu-vm-tf-2.17.0-pjrt
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 VM de TPU mediante SSH. Cuando te conectes a la VM, el indicador de shell cambiará de
username@projectname
ausername@vm-name
:gcloud compute tpus tpu-vm ssh hf-gpt2 --zone=us-central2-b
Instala dependencias
Clona el repositorio de Transformers de HuggingFace:
(vm)$ cd /tmp (vm)$ git clone https://github.com/huggingface/transformers.git (vm)$ cd transformers
Instala las dependencias:
(vm)$ pip install . (vm)$ pip install -r examples/tensorflow/_tests_requirements.txt (vm)$ cd /tmp/transformers/examples/tensorflow/language-modeling (vm)$ pip install -r requirements.txt
Crea el directorio temporal:
(vm)$ mkdir /tmp/gpt2-wikitext
Cuando crees tu TPU, si configuras el parámetro
--version
en una versión que finaliza con-pjrt
, establece las siguientes variables de entorno para habilitar el entorno de ejecución de PJRT:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
Ejecuta la secuencia de comandos de entrenamiento
(vm)$ python3 run_clm.py \ --model_name_or_path distilgpt2 \ --max_train_samples 1000 \ --max_eval_samples 100 \ --num_train_epochs 1 \ --output_dir /tmp/gpt2-wikitext \ --dataset_name wikitext \ --dataset_config_name wikitext-103-raw-v1
Descripciones de las marcas de comandos
model_name_or_path
- El nombre del modelo que se entrenará.
max_train_samples
- Es la cantidad máxima de muestras que se usarán para el entrenamiento.
max_eval_samples
- La cantidad máxima de muestras que se usarán en la evaluación.
num_train_epochs
- La cantidad de ciclos de entrenamiento para entrenar el modelo.
output_dir
- El directorio de salida para la secuencia de comandos de entrenamiento.
dataset_name
- Es el nombre del conjunto de datos que se usará.
dataset_config_name
- El nombre de la configuración del conjunto de datos
Cuando se complete el entrenamiento, aparecerá un mensaje similar al siguiente:
125/125 [============================] - ETA: 0s - loss: 3.61762023-07-07 21:38:17.902850: W tensorflow/core/framework/dataset.cc:956] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations. 125/125 [============================] - 763s 6s/step - loss: 3.6176 - val_loss: 3.4233 Configuration saved in /tmp/gpt2-wikitext/config.json Configuration saved in /tmp/gpt2-wikitext/generation_config.json Model weights saved in /tmp/gpt2-wikitext/tf_model.h5 D0707 21:38:45.640973681 12027 init.cc:191] grpc_shutdown starts clean-up now
Limpia
Desconéctate de la instancia de VM de TPU:
(vm)$ exit
El mensaje ahora debería mostrar
username@projectname
, que indica que estás en Cloud Shell.Borra el recurso TPU.
$ gcloud compute tpus tpu-vm delete hf-gpt2 \ --zone=us-central2-b
¿Qué sigue?
Prueba uno de los otros modelos de referencia admitidos.