FairSeq RoBERTa prima dell'addestramento su Cloud TPU con PyTorch


Questo tutorial mostra come addestrare RoBERTa di FairSeq su Cloud TPU. In particolare, segue il tutorial di FaiSeSeq, che precede il modello nel set di dati pubblico wikitext-103.

Obiettivi

  • Crea e configura l'ambiente PyTorch
  • Prepara il set di dati
  • Eseguire il job di addestramento
  • Verificare di poter visualizzare i risultati di output

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

  • Compute Engine
  • Cloud TPU

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Prima di iniziare

Prima di iniziare questo tutorial, verifica che il tuo progetto Google Cloud sia configurato correttamente.

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Questa procedura dettagliata utilizza i componenti fatturabili di Google Cloud. Controlla la pagina dei prezzi di Cloud TPU per una stima dei costi. Al termine, pulisci le risorse che crei per evitare addebiti inutili.

Configura un'istanza di Compute Engine

  1. Apri una finestra di Cloud Shell.

    Apri v

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

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

    gcloud config set project ${PROJECT_ID}
    

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

  4. Da Cloud Shell, avvia la risorsa Compute Engine richiesta per questo tutorial.

    gcloud compute instances create roberta-tutorial \
    --zone=us-central1-a \
    --machine-type=n1-standard-16  \
    --image-family=torch-xla \
    --image-project=ml-images  \
    --boot-disk-size=200GB \
    --scopes=https://www.googleapis.com/auth/cloud-platform
    
  5. Connettiti alla nuova istanza di Compute Engine.

    gcloud compute ssh roberta-tutorial --zone=us-central1-a
    

Avvia una risorsa Cloud TPU

  1. Dalla macchina virtuale Compute Engine, avvia una risorsa Cloud TPU utilizzando il seguente comando:

    (vm) $ gcloud compute tpus create roberta-tutorial \
    --zone=us-central1-a \
    --network=default \
    --version=pytorch-2.0  \
    --accelerator-type=v3-8
    
  2. Identificare l'indirizzo IP della risorsa Cloud TPU.

    (vm) $ gcloud compute tpus describe --zone=us-central1-a roberta-tutorial
    

Crea e configura l'ambiente PyTorch

  1. Avvia un ambiente conda.

    (vm) $ conda activate torch-xla-2.0
    
  2. Configura le variabili di ambiente per la risorsa Cloud TPU.

    (vm) $ export TPU_IP_ADDRESS=ip-address
    
    (vm) $ export XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"
    

Configurare i dati

  1. Installa FairSeq eseguendo:

    (vm) $ pip install --editable /usr/share/torch-xla-2.0/tpu-examples/deps/fairseq
    
  2. Creare una directory, pytorch-tutorial-data per archiviare i dati del modello.

    (vm) $ mkdir $HOME/pytorch-tutorial-data
    (vm) $ cd $HOME/pytorch-tutorial-data
    
  3. Segui le istruzioni sulla sezione "PRE-elabora i dati" di FairSeq RoBERTa. La preparazione del set di dati richiede circa 10 minuti.

Addestra il modello

Per addestrare il modello, innanzitutto configura alcune variabili di ambiente:

(vm) $ export TOTAL_UPDATES=125000    # Total number of training steps
(vm) $ export WARMUP_UPDATES=10000    # Warmup the learning rate over this many updates
(vm) $ export PEAK_LR=0.0005          # Peak learning rate, adjust as needed
(vm) $ export TOKENS_PER_SAMPLE=512   # Max sequence length
(vm) $ export UPDATE_FREQ=16          # Increase the batch size 16x
(vm) $ export DATA_DIR=${HOME}/pytorch-tutorial-data/data-bin/wikitext-103

Quindi, esegui lo script seguente:

(vm) $ python3 \
      /usr/share/torch-xla-pytorch-2.0/tpu-examples/deps/fairseq/train.py $DATA_DIR \
      --task=masked_lm --criterion=masked_lm \
      --arch=roberta_base --sample-break-mode=complete \
      --tokens-per-sample=512 \
      --optimizer=adam \
      --adam-betas='(0.9,0.98)' \
      --adam-eps=1e-6 \
      --clip-norm=0.0 \
      --lr-scheduler=polynomial_decay \
      --lr=0.0005 \
      --warmup-updates=10000 \
      --dropout=0.1 \
      --attention-dropout=0.1 \
      --weight-decay=0.01 \
      --update-freq=16 \
      --train-subset=train \
      --valid-subset=valid \
      --num_cores=8 \
      --metrics_debug \
      --save-dir=checkpoints \
      --log_steps=30 \
      --log-format=simple \
      --skip-invalid-size-inputs-valid-test \
      --suppress_loss_report \
      --input_shapes 16x512 18x480 21x384 \
      --max-epoch=1

Lo script di addestramento viene eseguito per circa 15 minuti e, al termine, genera un messaggio simile al seguente:

saved checkpoint /home/user/checkpoints/checkpoint1.pt
(epoch 1 @ 119 updates) (writing took 25.19265842437744 seconds)
| done training in 923.8 seconds

Verifica i risultati di output

Al termine del job di addestramento, puoi trovare i checkpoint del modello nella seguente directory:

$HOME/checkpoints

Esegui la pulizia

Esegui una pulizia per evitare che al tuo account vengano addebitati costi inutili dopo aver utilizzato le risorse create:

  1. Disconnettiti dall'istanza Compute Engine, se non lo hai già fatto:

    (vm) $ exit
    

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

  2. In Cloud Shell, utilizza Google Cloud CLI per eliminare l'istanza di Compute Engine.

    $ gcloud compute instances delete roberta-tutorial --zone=us-central1-a
    
  3. Utilizza Google Cloud CLI per eliminare la risorsa Cloud TPU.

    $ gcloud compute tpus delete roberta-tutorial --zone=us-central1-a
    

Passaggi successivi

Prova le collaborazioni di PyTorch: