Addestramento su Transformer su Cloud TPU (TF 2.x)


Se non hai dimestichezza con Cloud TPU, consulta le guide introduttive di TPU.

Questo tutorial mostra come addestrare un modello Transformer su Cloud TPU. Transformer è un'architettura di rete neurale che risolve da sequenza a sequenza problemi usando i meccanismi di attenzione. A differenza dei tradizionali modelli seq2seq neurali, Il trasformatore non prevede connessioni ricorrenti. Il meccanismo di attenzione apprende le dipendenze tra i token in due sequenze. Poiché l'attenzione viene ponderata applicabili a tutti i token nelle sequenze, il modello Transformer è in grado di e acquisire dipendenze a lunga distanza.

La struttura complessiva del trasformatore segue il pattern encoder-decoder standard. L'encoder usa l'auto-attenzione per calcolare una rappresentazione dell'input sequenza. Il decoder genera la sequenza di output un token alla volta, utilizzando come input l'output dell'encoder e i token di output del decoder precedenti.

Il modello applica anche gli incorporamenti ai token di input e di output e aggiunge un'codifica posizionale costante. La codifica posizionale aggiunge informazioni sulla posizione di ogni token.

Obiettivi

  • Crea un bucket Cloud Storage in cui conservare il set di dati e l'output del modello.
  • Scarica e pre-elabora il set di dati utilizzato per addestrare il 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

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

Prima di iniziare questo tutorial, verifica che il tuo progetto Google Cloud sia corretto configurazione.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Questa procedura dettagliata utilizza i componenti fatturabili di Google Cloud. Consulta la pagina Prezzi per Cloud TPU per stimare i costi. Assicurati di pulire che crei una volta terminato per evitare inutili addebiti.

Addestramento con un singolo dispositivo Cloud TPU

.

Questa sezione fornisce informazioni sulla configurazione di un bucket Cloud Storage una VM TPU per l'addestramento di un singolo dispositivo.

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. Crea una variabile di ambiente per l'ID progetto.

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

    gcloud config set project ${PROJECT_ID}

    La prima volta che esegui questo comando in una nuova VM Cloud Shell, viene visualizzata una pagina Authorize Cloud Shell. Fai clic su Authorize nella parte inferiore della pagina per consentire a Authorize di effettuare chiamate alle API Google Cloud con le tue credenziali.

  4. Crea un account di servizio per il progetto Cloud TPU.

    Gli account di servizio consentono al servizio Cloud TPU di accedere ad altri servizi Google Cloud i servizi di machine learning.

    $ 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-central2

    Questo bucket Cloud Storage archivia i dati che utilizzi per addestrare il modello e i risultati dell'addestramento. Il comando gcloud utilizzato in questo tutorial per impostare La TPU configura anche le autorizzazioni predefinite per il servizio Cloud TPU Account che hai configurato nel passaggio precedente. Se vuoi autorizzazioni più granulari, esamina le autorizzazioni a livello di accesso.

Addestra il modello Transformer su una singola Cloud TPU

  1. Avvia una VM Cloud TPU utilizzando il comando gcloud.

      $ gcloud compute tpus tpu-vm create transformer-tutorial \
         --zone=us-central2-b \
         --accelerator-type=v4-8 \
         --version=tpu-vm-tf-2.17.0-pjrt

    Descrizioni dei flag dei comandi

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

    gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
  3. Esporta le variabili di ambiente.

      (vm)$ export STORAGE_BUCKET=gs://bucket-name
      (vm)$ export SENTENCEPIECE_MODEL=sentencepiece
      (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model
      (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds
      (vm)$ export PARAM_SET=big
      (vm)$ export TPU_NAME=local
      (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET}
      (vm)$  export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
  4. Quando crei la TPU, se imposti il parametro --version su una versione che termina con -pjrt, imposta le seguenti variabili di ambiente per attivare il runtime PJRT:

      (vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true
      (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
  5. Installa i requisiti di TensorFlow.

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
  6. Scaricare e pre-elaborare il set di dati

     (vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)"
      (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
  7. Copia il set di dati nel bucket Cloud Storage

      (vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET}
      (vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET}
      (vm)$ gcloud storage cp tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate --recursive
  8. Vai alla directory di addestramento

    (vm)$ cd /usr/share/tpu/models/
  9. Esegui lo script di addestramento

    (vm)$ python3 official/nlp/train.py \
      --tpu=${TPU_NAME} \
      --experiment=wmt_transformer/large \
      --mode=train_and_eval \
      --model_dir=${MODEL_DIR} \
      --params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"

    Descrizioni dei flag dei comandi

    tpu
    Il nome della Cloud TPU. Questo viene impostato specificando la variabile di ambiente (TPU_NAME).
    experiment
    Il modello da addestrare.
    mode
    La modalità di esecuzione dello script.
    model_dir
    Il bucket Cloud Storage in cui vengono visualizzati i punti di controllo e i riepiloghi archiviati durante l'addestramento. Puoi utilizzare una cartella esistente per caricare i checkpoint generati in precedenza creati su una TPU delle stesse dimensioni e della stessa versione di TensorFlow.
    params_override
    Imposta i parametri del modello.

    Per impostazione predefinita, il modello viene valutato dopo ogni 10.000 passaggi. Puoi aumenta il numero di passaggi di addestramento o specifica la frequenza di esecuzione delle valutazioni impostando questi parametri:

    • train.train_steps: il numero totale di passaggi di addestramento da eseguire.
    • trainer.validation_interval: il numero di passaggi di addestramento da eseguire tra una valutazione e l'altra.

    L'addestramento e la valutazione richiedono circa 20 minuti su una versione v4-8 con Cloud TPU. Al termine dell'addestramento e della valutazione, viene visualizzato un messaggio simile al seguente:

    I0208 20:57:19.309512 140039467895872 controller.py:310]  eval | step:  10000 | eval time:   69.2 sec | output:
    {'bleu_score': 19.204771518707275,
     'sacrebleu_score': 18.307039308307356,
     'validation_loss': 2.0654342}
     eval | step:  10000 | eval time:   69.2 sec | output:
    {'bleu_score': 19.204771518707275,
     'sacrebleu_score': 18.307039308307356,
     'validation_loss': 2.0654342}
    

    Hai completato la formazione con un solo dispositivo. Segui i passaggi riportati di seguito per eliminare le risorse TPU per singolo dispositivo.

  10. Disconnettiti dall'istanza Compute Engine:

    (vm)$ exit

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

  11. Elimina la risorsa TPU.

    $ gcloud compute tpus tpu-vm delete transformer-tutorial \
    --zone=us-central2-b

    Descrizioni dei flag dei comandi

    zone
    La zona in cui si trovava Cloud TPU.

A questo punto, puoi concludere questo tutorial ed eseguire le operazioni di pulizia oppure continuare ed esplorare l'esecuzione del modello sui pod Cloud TPU.

Scala il tuo modello con i pod di Cloud TPU

L'addestramento del modello sui pod di Cloud TPU può richiedere alcune modifiche lo script di addestramento. Per informazioni, consulta Addestramento sui pod TPU.

Addestramento dei pod di TPU

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. Crea una variabile per l'ID progetto.

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

    gcloud config set project ${PROJECT_ID}

    La prima volta che esegui questo comando in una nuova VM Cloud Shell, viene visualizzata una pagina Authorize Cloud Shell. Fai clic su Authorize nella parte inferiore della pagina per consentire a gcloud di effettuare chiamate API con le tue credenziali.

  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 o un bucket che hai creato in precedenza per il tuo progetto:

    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 gcloud utilizzato in questo tutorial configura le autorizzazioni predefinite per l'account di servizio Cloud TPU passaggio precedente. Per ulteriori informazioni sulle autorizzazioni granulari, consulta autorizzazioni a livello di accesso.

Lancia le risorse VM TPU

  1. Avvia un pod di VM TPU utilizzando il comando gcloud. Questo tutorial specifica un pod v4-32. Per altre opzioni di pod, consulta la pagina dei tipi di TPU disponibili.

    $ gcloud compute tpus tpu-vm create transformer-tutorial \
      --zone=us-central2-b \
      --accelerator-type=v3-32 \
      --version=tpu-vm-tf-2.17.0-pod-pjrt

    Descrizioni dei flag dei comandi

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

    gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
  3. Installa i requisiti di TensorFlow.

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt

Configura e avvia l'addestramento del pod

  1. Esporta le variabili di configurazione di Cloud TPU:

    (vm)$ export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export SENTENCEPIECE_MODEL=sentencepiece
    (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model
    (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds
    (vm)$ export TPU_NAME=transformer-tutorial
    (vm)$ export PARAM_SET=big
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET}
    (vm)$ export TPU_LOAD_LIBRARY=0
  2. Scarica il set di dati

    (vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)"
    (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
  3. Copia il set di dati nel bucket Cloud Storage

    (vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET}
    (vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET}
    (vm)$ gcloud storage cp tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate --recursive
  4. Passa alla directory di addestramento:

    (vm)$ cd /usr/share/tpu/models/
  5. Esegui lo script di addestramento:

    (vm)$ python3 official/nlp/train.py \
    --tpu=${TPU_NAME} \
    --experiment=wmt_transformer/large \
    --mode=train_and_eval \
    --model_dir=${MODEL_DIR} \
    --params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"

    Descrizioni flag di comando

    tpu
    Il nome della Cloud TPU. Questo viene impostato specificando la variabile di ambiente (TPU_NAME).
    experiment
    Il modello da addestrare.
    mode
    La modalità di esecuzione dello script.
    model_dir
    Il bucket Cloud Storage in cui vengono visualizzati i punti di controllo e i riepiloghi archiviati durante l'addestramento. Puoi utilizzare una cartella esistente per caricare i checkpoint generati in precedenza creati su una TPU delle stesse dimensioni e della stessa versione di TensorFlow.
    params_override
    Imposta i parametri del modello.

Per impostazione predefinita, il modello viene valutato dopo 10.000 passi. Per eseguire il training fino alla convergenza, modifica train_steps in 200000. Puoi aumentare il numero di passaggi di addestramento o specificare la frequenza di esecuzione delle valutazioni impostando questi parametri:

  • trainer.train_steps: imposta il numero totale di passaggi di addestramento da eseguire.
  • trainer.validation_interval: imposta il numero di passaggi di addestramento da eseguire tra le valutazioni.

L'addestramento e la valutazione richiedono circa 14 minuti su una Cloud TPU v4-32. Al termine dell'addestramento e della valutazione, simili ai seguenti:

I0209 22:19:49.143219 139751309618240 controller.py:310]  eval | step:  10000 | eval time:   73.6 sec | output:
    {'bleu_score': 19.401752948760986,
     'sacrebleu_score': 18.442741330886378,
     'validation_loss': 2.0558002}
 eval | step:  10000 | eval time:   73.6 sec | output:
    {'bleu_score': 19.401752948760986,
     'sacrebleu_score': 18.442741330886378,
     'validation_loss': 2.0558002}

Questo script di addestramento esegue l'addestramento per 20000 passaggi ed esegue la valutazione ogni 2000 passaggi. Questo addestramento e valutazione richiede circa 8 minuti su una versione v3-32 di pod di Cloud TPU. Al termine dell'addestramento e della valutazione, viene visualizzato un messaggio simile al seguente:

INFO:tensorflow:Writing to file /tmp/tmpdmlanxcf
I0218 21:09:19.100718 140509661046592 translate.py:184] Writing to file /tmp/tmpdmlanxcf
I0218 21:09:28.043537 140509661046592 transformer_main.py:118] Bleu score (uncased): 1.799112930893898
I0218 21:09:28.043911 140509661046592 transformer_main.py:119] Bleu score (cased): 1.730366237461567

Per eseguire l'addestramento fino alla convergenza, modifica train_steps in 200000. Puoi aumentare il numero di passaggi di addestramento o specificare la frequenza con cui eseguire le valutazioni impostando questi parametri:

  • --train_steps: imposta il numero totale di passaggi di addestramento da eseguire.
  • --steps_between_evals: numero di passaggi di addestramento da eseguire tra le valutazioni.

Al termine dell'addestramento e della valutazione, viene visualizzato un messaggio simile al seguente: dell'immagine:

0509 00:27:59.984464 140553148962624 translate.py:184] Writing to file /tmp/tmp_rk3m8jp
I0509 00:28:11.189308 140553148962624 transformer_main.py:119] Bleu score (uncased): 1.3239131309092045
I0509 00:28:11.189623 140553148962624 transformer_main.py:120] Bleu score (cased): 1.2855342589318752

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  1. Disconnettiti dall'istanza Compute Engine, se non lo 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 risorse Cloud TPU e Compute Engine.

    $ gcloud compute tpus tpu-vm delete transformer-tutorial \
      --zone=us-central2-b
  3. Esegui gcloud CLI come mostrato, sostituendo bucket-name con il nome del bucket Cloud Storage creato per questo tutorial:

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