Ottimizzazione di BERT con Cloud TPU: attività di classificazione di frasi e coppie di frasi (TF 2.x)


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:

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. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Prima di iniziare

Questa sezione fornisce informazioni sulla configurazione del bucket Cloud Storage e di una VM Compute Engine.

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. Crea una variabile per l'ID del progetto.

    export PROJECT_ID=project-id
  3. Configura Google Cloud CLI in modo da utilizzare il progetto in cui vuoi creare Cloud TPU.

    gcloud config set project ${PROJECT_ID}
  4. 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
    
  5. 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).

  6. 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.
  7. Connettiti all'istanza VM TPU tramite SSH. Quando la connessione alla VM è attiva, il prompt shell passa da username@projectname a username@vm-name:

    gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b
  8. Crea una variabile di ambiente per il nome della TPU.

    (vm)$ export TPU_NAME=local

Prepara il set di dati

  1. Definisci il bucket di archiviazione necessario per archiviare il modello e il set di dati:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
  2. 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

  1. 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
      

  2. Installa i requisiti di TensorFlow.

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
  3. Imposta la variabile di ambiente PYTHONPATH

    (vm)$ export PYTHONPATH=/usr/share/tpu/models
  4. Passa alla directory in cui si trova il modello:

    (vm)$ cd /usr/share/tpu/models
  5. 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, o predict.
    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

  1. 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.

  2. Elimina le risorse Cloud TPU e Compute Engine.

    $ gcloud compute tpus tpu-vm delete bert-tutorial \
      --zone=us-central1-b
  3. 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
  4. 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.