Questo tutorial mostra come addestrare le rappresentazioni con codifica bidirezionale dal modello Transformers (BERT) su Cloud TPU.
BERT è un metodo di preaddestramento delle rappresentazioni linguistiche. Il preaddestramento si riferisce al modo in cui BERT viene addestrato inizialmente su una grande fonte di testo, come Wikipedia. Puoi e poi applicare i risultati dell'addestramento ad altre attività di elaborazione del linguaggio naturale (NLP), come risposta alle domande e analisi del sentiment. Con BERT e Cloud TPU, puoi addestrare una serie di modelli di IA linguistica in circa 30 minuti.
Per ulteriori informazioni su BERT, consulta le seguenti risorse:
- BERT Open Sourcing: pre-addestramento all'avanguardia per l'elaborazione del linguaggio naturale
- BERT: pre-addestramento di trasformatori bidirezionali profondi per la comprensione del linguaggio
Obiettivi
- Crea un bucket Cloud Storage in cui conservare il set di dati e l'output del modello.
- Esegui il job di addestramento.
- Verifica i risultati dell'output.
Costi
In questo documento utilizzi 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 del 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 in modo da utilizzare il progetto in cui vuoi creare Cloud TPU.
gcloud config set project ${PROJECT_ID}
Crea 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:
gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central1
Questo bucket Cloud Storage archivia i dati che utilizzi per addestrare il modello e i risultati dell'addestramento. Il comando che utilizzi per creare una TPU,
gcloud compute tpus tpu-vm create
, configura le autorizzazioni predefinite per l'account di servizio Cloud TPU configurato nel passaggio precedente. Se vuoi autorizzazioni più granulari, rivedi le autorizzazioni a livello di accesso.La posizione del bucket deve trovarsi nella stessa regione della TPU (VM).
Avvia una VM TPU utilizzando
gcloud
. Per ulteriori informazioni, consulta la documentazione di riferimento di 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
Descrizioni flag di comando
zone
- La zona in cui prevedi di creare la tua Cloud TPU.
accelerator-type
- Il tipo di acceleratore specifica la versione e le dimensioni della Cloud TPU che vuoi creare. Per ulteriori informazioni sui tipi di acceleratori supportati per ogni versione di TPU, consulta Versioni di TPU.
version
- La versione software di Cloud TPU.
Connettiti all'istanza VM TPU tramite SSH. Quando la connessione alla VM è attiva, il prompt shell passa da
username@projectname
ausername@vm-name
:gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b
Crea una variabile di ambiente per il nome della TPU.
(vm)$ export TPU_NAME=local
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 vocabolario e checkpoint preaddestrati nel tuo 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)$ gcloud storage cp uncased_L-12_H-768_A-12 ${STORAGE_BUCKET} --recursive
Addestra il modello
Definisci diversi valori di parametro obbligatori quando addestri e valuti 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.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Imposta la variabile di ambiente
PYTHONPATH
(vm)$ export PYTHONPATH=/usr/share/tpu/models
Passa alla directory in cui si trova il modello:
(vm)$ cd /usr/share/tpu/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 di comando
tpu
- Il nome della Cloud TPU da utilizzare per l'addestramento.
mode
- Una tra
train
,eval
,train_and_eval
, opredict
. model_dir
- Il percorso di Cloud Storage in cui sono archiviati checkpoint e riepiloghi durante l'addestramento del modello. Puoi riutilizzare una cartella esistente per caricarla in precedenza i checkpoint generati e archiviare ulteriori checkpoint, purché i checkpoint precedenti sono stati creati utilizzando una Cloud TPU e la stessa versione di TensorFlow.
Lo script viene addestrato per 2000 passaggi, quindi esegue 307 passaggi di valutazione. Su una TPU v3-8, dopo circa 5 minuti lo script di addestramento completi e verranno visualizzati risultati simili a questi:
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
Se non l'hai ancora fatto, disconnetti dall'istanza Compute Engine:
(vm)$ exit
Il tuo prompt ora dovrebbe essere
username@projectname
, a indicare che ti trovi in in Cloud Shell.Elimina le risorse Cloud TPU e Compute Engine.
$ gcloud compute tpus tpu-vm delete bert-tutorial \ --zone=us-central1-b
Verifica che le risorse siano state eliminate eseguendo
gcloud compute tpus tpu-vm list
. La l'eliminazione potrebbe richiedere diversi minuti. L'output del seguente comando non deve includere nessuna delle risorse create in questo tutorial:$ gcloud compute tpus tpu-vm list --zone=us-central1-b
Elimina il bucket Cloud Storage utilizzando gcloud CLI come mostrato nell'esempio che segue. Sostituisci bucket-name con il nome del tuo bucket Cloud Storage.
$ gcloud storage rm gs://bucket-name --recursive
Passaggi successivi
I tutorial di TensorFlow Cloud TPU generalmente 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 su Cloud TPU generalmente richiedono che i set di dati siano in formato TFRecord.
Puoi utilizzare lo strumento di conversione dei set di dati sample per convertire un'immagine in formato TFRecord. Se non utilizzi un'immagine di classificazione, dovrai convertire il tuo set di dati in Formato TFRecord per te. Per ulteriori informazioni, vedi TFRecord e tf.Example.
Ottimizzazione degli iperparametri
Per migliorare le prestazioni del modello con il tuo set di dati, puoi ottimizzare i suoi parametri iperbolici. Puoi trovare informazioni sugli iperparametri comuni a tutti i modelli supportati da TPU su GitHub. Le informazioni sugli iperparametri specifici del modello sono disponibili nel codice fonte di ciascun modello. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta la Panoramica dell'ottimizzazione degli iperparametri e Ottimizzare gli iperparametri.
Inferenza
Una volta addestrato il modello, puoi utilizzarlo per l'inferenza (chiamata anche previsione). Puoi utilizzare il convertitore di inferenza di Cloud TPU strumento per preparare e ottimizzare Modello TensorFlow per l'inferenza su Cloud TPU v5e. Per maggiori informazioni informazioni sull'inferenza su Cloud TPU v5e, consulta Inferenza di Cloud TPU v5e introduzione.
- Esplora gli strumenti TPU in TensorBoard.