En este instructivo, se muestra cómo entrenar previamente el RoBERTa de FairSeq en una Cloud TPU. Específicamente sigue el instructivo de FairSeq, que antes entrena el modelo en el conjunto de datos público wikitext-103.
Objetivos
- Crea y configura el entorno PyTorch
- Prepara el conjunto de datos
- Ejecuta el trabajo de entrenamiento
- Verifica que puedes ver los resultados
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.
Configura una instancia de Compute Engine
Abra 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 deseas crear Cloud TPU.
gcloud config set project ${PROJECT_ID}
La primera vez que ejecutes este comando en una VM de Cloud Shell nueva, se mostrará 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.Desde Cloud Shell, inicia el recurso de Compute Engine necesario para este instructivo.
gcloud compute instances create roberta-tutorial \ --zone=us-central1-a \ --machine-type=n1-standard-16 \ --image-family=torch-xla \ --image-project=ml-images \ --boot-disk-size=200GB \ --scopes=https://www.googleapis.com/auth/cloud-platform
Conéctate a la instancia nueva de Compute Engine.
gcloud compute ssh roberta-tutorial --zone=us-central1-a
Inicia un recurso de Cloud TPU
En la máquina virtual de Compute Engine, inicia un recurso de Cloud TPU con el siguiente comando:
(vm) $ gcloud compute tpus create roberta-tutorial \ --zone=us-central1-a \ --network=default \ --version=pytorch-2.0 \ --accelerator-type=v3-8
Identifica la dirección IP para el recurso Cloud TPU.
(vm) $ gcloud compute tpus describe --zone=us-central1-a roberta-tutorial
Crea y configura el entorno PyTorch
Inicia un entorno
conda
.(vm) $ conda activate torch-xla-2.0
Configura variables de entorno para el recurso de Cloud TPU.
(vm) $ export TPU_IP_ADDRESS=ip-address
(vm) $ export XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"
Configura los datos
Instala FairSeq mediante la siguiente ejecución:
(vm) $ pip install --editable /usr/share/torch-xla-2.0/tpu-examples/deps/fairseq
Crea un directorio, pytorch-tutorial-data, para almacenar los datos del modelo.
(vm) $ mkdir $HOME/pytorch-tutorial-data (vm) $ cd $HOME/pytorch-tutorial-data
Sigue las instrucciones de la sección “Preprocesar los datos” de README de RoBERTa de FairSeq. Preparar el conjunto de datos demora aproximadamente 10 minutos.
Entrena el modelo
Para entrenar el modelo, primero configura algunas variables de entorno:
(vm) $ export TOTAL_UPDATES=125000 # Total number of training steps (vm) $ export WARMUP_UPDATES=10000 # Warmup the learning rate over this many updates (vm) $ export PEAK_LR=0.0005 # Peak learning rate, adjust as needed (vm) $ export TOKENS_PER_SAMPLE=512 # Max sequence length (vm) $ export UPDATE_FREQ=16 # Increase the batch size 16x (vm) $ export DATA_DIR=${HOME}/pytorch-tutorial-data/data-bin/wikitext-103
Luego, ejecute la siguiente secuencia de comandos:
(vm) $ python3 \
/usr/share/torch-xla-pytorch-2.0/tpu-examples/deps/fairseq/train.py $DATA_DIR \
--task=masked_lm --criterion=masked_lm \
--arch=roberta_base --sample-break-mode=complete \
--tokens-per-sample=512 \
--optimizer=adam \
--adam-betas='(0.9,0.98)' \
--adam-eps=1e-6 \
--clip-norm=0.0 \
--lr-scheduler=polynomial_decay \
--lr=0.0005 \
--warmup-updates=10000 \
--dropout=0.1 \
--attention-dropout=0.1 \
--weight-decay=0.01 \
--update-freq=16 \
--train-subset=train \
--valid-subset=valid \
--num_cores=8 \
--metrics_debug \
--save-dir=checkpoints \
--log_steps=30 \
--log-format=simple \
--skip-invalid-size-inputs-valid-test \
--suppress_loss_report \
--input_shapes 16x512 18x480 21x384 \
--max-epoch=1
La secuencia de comandos de entrenamiento se ejecuta durante aproximadamente 15 minutos y, cuando finaliza, genera un mensaje similar al siguiente:
saved checkpoint /home/user/checkpoints/checkpoint1.pt (epoch 1 @ 119 updates) (writing took 25.19265842437744 seconds) | done training in 923.8 seconds
Verifica resultados de salida
Una vez que se completa el trabajo de entrenamiento, puedes encontrar los puntos de control del modelo en el siguiente directorio:
$HOME/checkpoints
Realiza una limpieza
Realiza una limpieza para evitar incurrir en cargos innecesarios en tu cuenta después de usar los recursos que creaste:
Desconéctate de la instancia de Compute Engine, si aún no lo hiciste:
(vm) $ exit
El mensaje ahora debería mostrar
user@projectname
, que indica que estás en Cloud Shell.En Cloud Shell, usa Google Cloud CLI para borrar la instancia de Compute Engine.
$ gcloud compute instances delete roberta-tutorial --zone=us-central1-a
Usa Google Cloud CLI para borrar el recurso de Cloud TPU.
$ gcloud compute tpus delete roberta-tutorial --zone=us-central1-a
¿Qué sigue?
Prueba los siguientes colaboradores de PyTorch:
- Comienza a usar PyTorch en Cloud TPU
- Entrenamiento de MNIST en TPU
- Entrenamiento de ResNet18 en TPU con el conjunto de datos de Cifar10
- Inferencia con el modelo ResNet50 previamente entrenado
- Transferencia de estilo neuronal rápida
- Capacitación de varios núcleos de AlexCre en Fashion MNIST
- Capacitación de núcleo único de AlexNet en Fashion MNIST