Ottimizzazione 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 del modello Transformers (BERT) su Cloud TPU.

BERT è un metodo di preaddestramento delle rappresentazioni linguistiche. Il preaddestramento si riferisce a come il 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 vari modelli NLP tra circa 30 minuti.

Per ulteriori informazioni su BERT, consulta le risorse seguenti:

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 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. 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 di una VM di 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 per utilizzare il progetto in cui vuoi creare con 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:

    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 usi per creare una TPU gcloud compute tpus tpu-vm create configura le autorizzazioni predefinite per Account di servizio Cloud TPU 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 TPU (VM).

  6. Avvia una VM TPU utilizzando gcloud. Per ulteriori informazioni, consulta Riferimento 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, vedi Versioni 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 il checkpoint preaddestrato e i file di vocaboli 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 i valori dei vari parametri necessari 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. 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 è archiviato 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. Disconnettiti dall'istanza Compute Engine, se non l'hai già fatto. Fatto:

    (vm)$ exit
    

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

  2. Elimina le tue 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 comando seguente non devono 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 account Cloud Storage di sincronizzare la directory di una VM con un bucket.

    $ gcloud storage rm gs://bucket-name --recursive
    

Passaggi successivi

I tutorial su TensorFlow Cloud TPU in genere addestrano il modello utilizzando una un set di dati di esempio. I risultati di questo addestramento non sono utilizzabili per l'inferenza. A per l'inferenza, puoi addestrare i dati su una o il tuo set di dati. Modelli TensorFlow addestrati su Cloud TPU richiedono generalmente che i set di dati siano 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 e regolare gli iperparametri. Puoi trovare informazioni sugli iperparametri comuni a tutti Modelli supportati da TPU su GitHub. Puoi trovare informazioni sugli iperparametri specifici del modello nella fonte per ciascuno un modello di machine learning. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta la Panoramica delle ottimizzazione degli iperparametri e Tune e regolare gli iperparametri.

Inferenza

Una volta addestrato il modello, puoi utilizzarlo per l'inferenza (chiamato 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.