Questo tutorial mostra come addestrare le rappresentazioni di encoder bidirezionale dal modello BERT (Transformers) su Cloud TPU.
BERT è un metodo di preaddestramento delle rappresentazioni dei linguaggi. Preaddestramento si riferisce a come BERT viene addestrato inizialmente su una grande fonte di testo, come Wikipedia. Puoi quindi applicare i risultati dell'addestramento ad altre attività di elaborazione del linguaggio naturale (NLP), come la risposta alle domande e l'analisi del sentiment. Con BERT e Cloud TPU, puoi addestrare un'ampia gamma di modelli NLP in circa 30 minuti.
Per maggiori informazioni su BERT, consulta le seguenti risorse:
- BERT Open Sourcing: pre-corso di formazione all'avanguardia per l'elaborazione del linguaggio naturale
- BERT: preaddestramento dei trasformatori profondi bidirezionale per la comprensione del linguaggio
Obiettivi
- Crea un bucket Cloud Storage in cui inserire il set di dati e l'output del modello.
- Esegui il job di addestramento.
- Verifica i risultati dell'output.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cloud TPU
- Cloud Storage
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
Questa sezione fornisce informazioni sulla configurazione di un bucket Cloud Storage e di una VM Compute Engine.
Apri una finestra di Cloud Shell.
Crea una variabile per l'ID del progetto.
export PROJECT_ID=project-id
Configura Google Cloud CLI per utilizzare il progetto in cui vuoi creare Cloud TPU.
gcloud config set project ${PROJECT_ID}
Creare un account di servizio per il progetto Cloud TPU.
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
Il comando restituisce un account di servizio Cloud TPU con il seguente formato:
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
Crea un bucket Cloud Storage utilizzando il comando seguente:
gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 gs://bucket-name
Questo bucket Cloud Storage archivia i dati utilizzati per addestrare il modello e i risultati dell'addestramento. Il comando che utilizzi per creare una TPU (
gcloud compute tpus execution-groups create
per l'architettura dei nodi TPU ogcloud compute tpus tpu-vm create
per l'architettura delle VM TPU) configura le autorizzazioni predefinite per l'account di servizio Cloud TPU che hai configurato nel passaggio precedente. Se vuoi autorizzazioni più granulari, rivedi le autorizzazioni a livello di accesso.La località del bucket deve trovarsi nella stessa regione della VM (Compute Engine) e del nodo Cloud TPU.
Avvia una VM di Compute Engine e Cloud TPU utilizzando il comando
gcloud
. Il comando da utilizzare dipende dall'utilizzo di una VM TPU o di un nodo TPU. Per ulteriori informazioni sull'architettura delle due VM, consulta Architettura di sistema. Per maggiori informazioni sul comandogcloud
, consulta la sezione Riferimento gcloud.VM TPU
$ gcloud compute tpus tpu-vm create bert-tutorial \ --zone=us-central1-b \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.16.1-se
Descrizioni flag comando
zone
- La zona in cui prevedi di creare la Cloud TPU.
accelerator-type
- Il tipo di acceleratore specifica la versione e le dimensioni della Cloud TPU che vuoi creare. Per maggiori informazioni sui tipi di acceleratori supportati per ogni versione di TPU, consulta Versioni TPU.
version
- La versione software di Cloud TPU.
Nodo TPU
$ gcloud compute tpus execution-groups create \ --name=bert-tutorial \ --zone=us-central1-b \ --tf-version=2.12.0 \ --machine-type=n1-standard-1 \ --accelerator-type=v3-8
Descrizioni flag comando
name
- Il nome della Cloud TPU da creare.
zone
- La zona in cui prevedi di creare la Cloud TPU.
tf-version
- La versione di Tensorflow
ctpu
viene installata sulla VM. machine-type
- Il tipo di macchina della VM di Compute Engine da creare.
accelerator type
- Il tipo di Cloud TPU da creare.
Se non hai eseguito automaticamente l'accesso all'istanza di Compute Engine, accedi eseguendo il comando
ssh
riportato di seguito. Quando hai eseguito l'accesso alla VM, il prompt della shell cambia dausername@projectname
ausername@vm-name
:VM TPU
gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b
Nodo TPU
gcloud compute ssh bert-tutorial --zone=us-central1-b
Mentre continui con queste istruzioni, esegui ogni comando che inizia con
(vm)$
nella finestra della sessione VM.Crea una variabile di ambiente per il nome della TPU.
VM TPU
(vm)$ export TPU_NAME=local
Nodo TPU
(vm)$ export TPU_NAME=bert-tutorial
Prepara il set di dati
Definisci il bucket di archiviazione necessario per archiviare il modello e il set di dati:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
Copia i file di vocab e checkpoint preaddestrati nel bucket di archiviazione:
(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)$ gsutil -m cp -R uncased_L-12_H-768_A-12 ${STORAGE_BUCKET}
Addestra il modello
Definisci i valori dei parametri richiesti per addestrare e valutare il modello:
(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
Installa i requisiti di TensorFlow.
Il comando da utilizzare varia a seconda che tu stia utilizzando una VM TPU o un nodo TPU.
VM TPU
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Nodo TPU
(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt (vm)$ pip3 install tensorflow-datasets==4.6.0
Imposta la variabile di ambiente
PYTHONPATH
VM TPU
(vm)$ export PYTHONPATH=/usr/share/tpu/models
Nodo TPU
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
Passa alla directory in cui è archiviato il modello:
VM TPU
(vm)$ cd /usr/share/tpu/models
Nodo TPU
(vm)$ cd /usr/share/models
Esegui lo script di addestramento:
(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"
Descrizioni flag comando
tpu
- Il nome della Cloud TPU da utilizzare per l'addestramento.
mode
- Uno tra
train
,eval
,train_and_eval
opredict
. model_dir
- Il percorso di Cloud Storage in cui vengono archiviati i checkpoint e i riepiloghi durante l'addestramento del modello. Puoi riutilizzare una cartella esistente per caricare i checkpoint generati in precedenza e per archiviare checkpoint aggiuntivi, a condizione che questi siano stati creati utilizzando una Cloud TPU delle stesse dimensioni e della stessa versione di TensorFlow.
Lo script viene addestrato per 2000 passaggi e poi esegue 307 passaggi di valutazione. Su una TPU v3-8, dopo circa 5 minuti lo script di addestramento dovrebbe completare e visualizzare risultati simili a questo:
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...
Esegui la pulizia
Disconnettiti dall'istanza di Compute Engine, se non lo hai già fatto:
(vm)$ exit
Il prompt ora dovrebbe essere
username@projectname
, a indicare che ti trovi in Cloud Shell.Elimina le risorse Cloud TPU e Compute Engine. Il comando da utilizzare per eliminare le risorse dipende dall'utilizzo di VM TPU o nodi TPU. Per ulteriori informazioni, consulta Architettura di sistema.
VM TPU
$ gcloud compute tpus tpu-vm delete bert-tutorial \ --zone=us-central1-b
Nodo TPU
$ gcloud compute tpus execution-groups delete bert-tutorial \ --zone=us-central1-b
Verifica che le risorse siano state eliminate eseguendo
gcloud compute tpus execution-groups list
. L'eliminazione potrebbe richiedere diversi minuti. L'output del comando seguente non deve includere nessuna delle risorse create in questo tutorial:VM TPU
$ gcloud compute tpus tpu-vm list --zone=us-central1-b
Nodo TPU
$ gcloud compute tpus execution-groups list --zone=us-central1-b
Elimina il bucket Cloud Storage utilizzando
gsutil
, come illustrato di seguito. Sostituisci bucket-name con il nome del tuo bucket Cloud Storage.$ gsutil rm -r gs://bucket-name
Passaggi successivi
I tutorial su TensorFlow Cloud TPU in genere addestrano il modello utilizzando un set di dati di esempio. I risultati di questo addestramento non sono utilizzabili per l'inferenza. Per utilizzare un modello per l'inferenza, puoi addestrare i dati su un set di dati disponibile pubblicamente o sul tuo set di dati. I modelli TensorFlow addestrati sulle Cloud TPU in genere richiedono che i set di dati siano in formato TFRecord.
Puoi utilizzare l'esempio dello strumento di conversione del set di dati per convertire un set di dati di classificazione delle immagini nel formato TFRecord. Se non utilizzi un modello di classificazione delle immagini, dovrai convertire manualmente il set di dati nel formato TFRecord. Per ulteriori informazioni, consulta TFRecord e tf.Example.
Ottimizzazione degli iperparametri
Per migliorare le prestazioni del modello con il set di dati, puoi ottimizzare gli iperparametri del modello. Puoi trovare informazioni sugli iperparametri comuni a tutti i modelli supportati da TPU su GitHub. Puoi trovare informazioni sugli iperparametri specifici nel codice sorgente di ciascun modello. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta Panoramica dell'ottimizzazione degli iperparametri e degli iperparametri.
Inferenza
Una volta addestrato il modello, puoi utilizzarlo per l'inferenza (detta anche previsione). Puoi utilizzare lo strumento di conversione di inferenza Cloud TPU per preparare e ottimizzare un modello TensorFlow per l'inferenza su Cloud TPU v5e. Per ulteriori informazioni sull'inferenza su Cloud TPU v5e, consulta l'introduzione all'inferenza di Cloud TPU v5e.
- Esplora gli strumenti TPU in TensorBoard.