Addestramento FairSeq Transformer su Cloud TPU con PyTorch


Questo tutorial è incentrato specificamente sulla versione FairSeq di Transformer e sull'attività di traduzione WMT 18, che traduce l'inglese in tedesco.

Obiettivi

  • Prepara il set di dati.
  • Eseguire il job di addestramento.
  • Verifica i risultati.

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. Consulta la pagina dei prezzi di Cloud TPU per una stima dei costi. Assicurati di ripulire le risorse che crei quando hai finito di utilizzarle, per evitare addebiti non necessari.

Configura un'istanza di Compute Engine

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  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 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 con le tue credenziali.

  4. Dalla v, avvia la risorsa Compute Engine necessaria per questo tutorial.

    gcloud compute --project=${PROJECT_ID} instances create transformer-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 transformer-tutorial --zone=us-central1-a
    

Avvia una risorsa Cloud TPU

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

    (vm) $ gcloud compute tpus create transformer-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 list --zone=us-central1-a
    

    L'indirizzo IP si trova nella colonna NETWORK_ENDPOINTS. Questo indirizzo IP è necessario durante la creazione e la configurazione dell'ambiente PyTorch.

Scarica i dati

  1. Crea una directory, pytorch-tutorial-data, per archiviare i dati del modello.

    (vm) $ mkdir $HOME/pytorch-tutorial-data
    
  2. Vai alla directory pytorch-tutorial-data.

    (vm) $ cd $HOME/pytorch-tutorial-data
    
  3. Scarica i dati del modello.

    (vm) $ wget https://dl.fbaipublicfiles.com/fairseq/data/wmt18_en_de_bpej32k.zip
    
  4. Estrai i dati.

    (vm) $ sudo apt-get install unzip && \
    unzip wmt18_en_de_bpej32k.zip
    

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; \
    export XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"
    

Addestra il modello

Per addestrare il modello, esegui il seguente script:

(vm) $ python /usr/share/torch-xla-2.0/tpu-examples/deps/fairseq/train.py \
  $HOME/pytorch-tutorial-data/wmt18_en_de_bpej32k \
  --save-interval=1 \
  --arch=transformer_vaswani_wmt_en_de_big \
  --max-target-positions=64 \
  --attention-dropout=0.1 \
  --no-progress-bar \
  --criterion=label_smoothed_cross_entropy \
  --source-lang=en \
  --lr-scheduler=inverse_sqrt \
  --min-lr 1e-09 \
  --skip-invalid-size-inputs-valid-test \
  --target-lang=de \
  --label-smoothing=0.1 \
  --update-freq=1 \
  --optimizer adam \
  --adam-betas '(0.9, 0.98)' \
  --warmup-init-lr 1e-07 \
  --lr 0.0005 \
  --warmup-updates 4000 \
  --share-all-embeddings \
  --dropout 0.3 \
  --weight-decay 0.0 \
  --valid-subset=valid \
  --max-epoch=25 \
  --input_shapes 128x64 \
  --num_cores=8 \
  --metrics_debug \
  --log_steps=100

Esegui la pulizia

Esegui una pulizia per evitare che al tuo account vengano addebitati costi non necessari dopo l'utilizzo delle risorse che hai creato:

  1. Disconnettiti dall'istanza di Compute Engine, se non l'hai ancora fatto:

    (vm) $ exit
    

    La richiesta dovrebbe essere user@projectname, a indicare che sei in Cloud Shell.

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

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

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

Passaggi successivi

Prova i lab PyTorch: