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

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo tutorial ti mostra come addestrare il modello di rappresentazione bidirezionale dei codificatori da Trasformatori (BERT) su Cloud TPU.

BERT è un metodo per rappresentare il linguaggio prima dell'addestramento. Il pre-addestramento si riferisce al modo in cui BERT viene addestrato per la prima volta 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 una varietà di modelli NLP in circa 30 minuti.

Per ulteriori informazioni su BERT, consulta le seguenti risorse:

Obiettivi

  • Crea un bucket Cloud Storage per conservare l'output del set di dati e del modello.
  • Eseguire il job di addestramento.
  • Verifica i risultati.

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono beneficiare di una prova gratuita.

Prima di iniziare

Questa sezione fornisce informazioni sulla configurazione di un 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. 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
    
  5. 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 che utilizzi per l'addestramento del modello e i risultati dell'addestramento. Il comando che utilizzi per creare una TPU (gcloud compute tpus execution-groups create per l'architettura del nodo TPU o gcloud compute tpus tpu-vm create per l'architettura VM TPU) configura le autorizzazioni predefinite per l'account di servizio Cloud TPU che hai configurato nel passaggio precedente. Se vuoi autorizzazioni più granulari, esamina le autorizzazioni a livello di accesso.

    La località del bucket deve essere nella stessa regione della VM di Compute Engine e del nodo Cloud TPU.

  6. Avvia una VM di Compute Engine e Cloud TPU utilizzando il comando gcloud. Il comando da utilizzare dipende dal fatto che tu stia utilizzando una VM TPU o un nodo TPU. Per ulteriori informazioni sull'architettura delle due VM, consulta Architettura di sistema. Per ulteriori informazioni sul comando gcloud, consulta la documentazione di riferimento su gcloud.

    VM TPU

    $ gcloud compute tpus tpu-vm create bert-tutorial \
    --zone=us-central1-b \
    --accelerator-type=v3-8 \
    --version=tpu-vm-tf-2.10.0

    Descrizioni flag comando

    zone
    La zona in cui intendi creare la Cloud TPU.
    accelerator-type
    Il tipo di Cloud TPU da creare.
    version
    La versione del software Cloud TPU.

    Nodo TPU

    $ gcloud compute tpus execution-groups create \
      --name=bert-tutorial \
      --zone=us-central1-b \
      --tf-version=2.10.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 intendi 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.
  7. Se non hai eseguito automaticamente l'accesso all'istanza di Compute Engine, accedi eseguendo il comando ssh seguente. Dopo aver eseguito l'accesso alla VM, il prompt di Cloud Shell passa da username@projectname a username@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 queste istruzioni, esegui ogni comando che inizia con (vm)$ nella finestra della sessione VM.

  8. Crea una variabile di ambiente per il nome TPU.

    VM TPU

    (vm)$ export TPU_NAME=local
    

    Nodo TPU

    (vm)$ export TPU_NAME=bert-tutorial
    

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 checkpoint e vocab 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)$ mv tmp/temp_dir/raw/* uncased_L-12_H-768_A-12
      (vm)$ gsutil -m cp -R uncased_L-12_H-768_A-12 gs://bucket-name 

Addestra il modello

  1. Definisci diversi valori dei parametri obbligatori 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
      

  2. Installare i requisiti di TensorFlow.

    Il comando da utilizzare dipende dal fatto 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
    
  3. Imposta la variabile di ambiente PYTHONPATH

    VM TPU

    (vm)$ export PYTHONPATH=/usr/share/tpu/models
    

    Nodo TPU

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  4. Passa alla directory in cui viene memorizzato il modello:

    VM TPU

    (vm)$ cd /usr/share/tpu/models
    

    Nodo TPU

    (vm)$ cd /usr/share/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 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 Cloud Storage in cui sono archiviati punti di controllo e riepiloghi durante l'addestramento del modello. Puoi riutilizzare una cartella esistente per caricare i punti di controllo generati in precedenza e per archiviare punti di controllo aggiuntivi, purché i punti di controllo precedenti siano stati creati utilizzando una Cloud TPU della stessa dimensione e della 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 dovrebbe essere completato e mostrare risultati simili al seguente:

    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. Disconnettiti dall'istanza di Compute Engine, se non lo hai già fatto:

    (vm)$ exit
    

    Il tuo prompt dovrebbe ora essere username@projectname, a indicare che ti trovi in Cloud Shell.

  2. Elimina le risorse Cloud TPU e Compute Engine. Il comando utilizzato per eliminare le risorse dipende dal fatto che tu stia utilizzando VM TPU o nodi TPU. Per ulteriori informazioni, consulta la sezione Architettura del 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
    
  3. Verifica che le risorse siano state eliminate eseguendo gcloud compute tpus execution-groups list. L'eliminazione può richiedere alcuni minuti. L'output del comando seguente non deve includere alcuna risorsa creata 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
  4. Elimina il tuo bucket Cloud Storage utilizzando gsutil come mostrato di seguito. Sostituisci bucket-name con il nome del tuo bucket Cloud Storage.

    $ gsutil rm -r gs://bucket-name
    

Passaggi successivi

In genere, i tutorial di TensorFlow Cloud TPU addestrano il modello utilizzando un set di dati di esempio. I risultati di questo corso di formazione non possono essere utilizzati per 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. In genere, i modelli TensorFlow addestrati su Cloud TPU richiedono un set di dati 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 in formato TFRecord. Se non utilizzi un modello di classificazione delle immagini, dovrai convertire 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 tuo set di dati, puoi ottimizzare gli iperparametri del modello. Puoi trovare informazioni sugli iperparametri comuni per tutti i modelli supportati da TPU su GitHub. Puoi trovare informazioni sugli iperparametri specifici del modello nel codice sorgente di ciascun modello. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta le sezioni Panoramica dell'ottimizzazione degli iperparametri, Utilizzo del servizio di ottimizzazione degli iperparametri e Iperparametri di iperparametri.

Inferenza

Dopo aver addestrato il modello, puoi utilizzarlo per l'inferenza (chiamata anche previsione). AI Platform è una soluzione basata su cloud per lo sviluppo, la formazione e il deployment di modelli di machine learning. Dopo aver eseguito il deployment di un modello, puoi utilizzare il servizio AI Platform Prediction.