FairSeq Transformer auf Cloud TPU mit PyTorch trainieren

Diese Anleitung konzentriert sich speziell auf die FairSeq-Version von Transformer und die WMT 18-Übersetzungsaufgabe, bei der vom Englischen ins Deutsche übersetzt wird.

Ziele

  • Bereiten Sie das Dataset vor.
  • Trainingsjob ausführen
  • Ausgabeergebnisse überprüfen

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • Compute Engine
  • Cloud TPU

Sie können mithilfe des Preisrechners die Kosten für Ihre voraussichtliche Nutzung kalkulieren. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweise

Bevor Sie mit dieser Anleitung beginnen, prüfen Sie, ob Ihr Google Cloud-Projekt ordnungsgemäß eingerichtet ist.

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Cloud Console auf der Seite für die Projektauswahl ein Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. In dieser Anleitung werden kostenpflichtige Komponenten der Google Cloud verwendet. Rufen Sie die Seite mit den Cloud TPU-Preisen auf, um Ihre Kosten abzuschätzen. Denken Sie daran, nicht mehr benötigte Ressourcen zu bereinigen, um unnötige Kosten zu vermeiden.

Compute Engine-Instanz einrichten

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Cloud Shell öffnen

  2. Erstellen Sie eine Variable für Ihre Projekt-ID.

    export PROJECT_ID=project-id
    
  3. Konfigurieren Sie das gcloud-Befehlszeilentool für das Projekt, in dem Sie eine Cloud TPU erstellen möchten.

    gcloud config set project ${PROJECT_ID}
    
  4. Starten Sie in Cloud Shell die für diese Anleitung erforderliche Compute Engine-Ressource.

    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. Stellen Sie eine Verbindung zur neuen Compute Engine-Instanz her.

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

Cloud TPU-Ressource starten

  1. Starten Sie über die virtuelle Compute Engine-Maschine mit dem folgenden Befehl eine Cloud TPU-Ressource:

    (vm) $ gcloud compute tpus create transformer-tutorial \
    --zone=us-central1-a \
    --network=default \
    --version=pytorch-1.6 \
    --accelerator-type=v3-8
    
  2. Ermitteln Sie die IP-Adresse für die Cloud TPU-Ressource.

    (vm) $ gcloud compute tpus list --zone=us-central1-a
    

    Die IP-Adresse befindet sich unter der Spalte NETWORK_ENDPOINTS. Sie benötigen diese IP-Adresse, wenn Sie die PyTorch-Umgebung erstellen und konfigurieren.

Daten herunterladen

  1. Erstellen Sie das Verzeichnis pytorch-tutorial-data, um die Modelldaten zu speichern.

    (vm) $ mkdir $HOME/pytorch-tutorial-data
    
  2. Rufen Sie das Verzeichnis pytorch-tutorial-data auf.

    (vm) $ cd $HOME/pytorch-tutorial-data
    
  3. Laden Sie die Modelldaten herunter.

    (vm) $ wget https://dl.fbaipublicfiles.com/fairseq/data/wmt18_en_de_bpej32k.zip
    
  4. Extrahieren Sie die Daten.

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

PyTorch-Umgebung erstellen und konfigurieren

  1. Starten Sie eine conda-Umgebung.

    (vm) $ conda activate torch-xla-1.6
    
  2. Konfigurieren Sie Umgebungsvariablen für die Cloud TPU-Ressource.

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

Modell trainieren

Führen Sie das folgende Skript aus, um das Modell zu trainieren:

(vm) $ python /usr/share/torch-xla-1.6/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

Ausgabeergebnisse prüfen

Sie finden Ihre Modellprüfpunkte nach Abschluss des Trainingsjobs im folgenden Verzeichnis:

$HOME/checkpoints

Bereinigen

Führen Sie eine Bereinigung durch, damit Ihr Konto nach der Verwendung der von Ihnen erstellten Ressourcen nicht unnötig belastet wird:

  1. Trennen Sie die Verbindung zur Compute Engine-Instanz, sofern noch nicht geschehen:

    (vm) $ exit
    

    Die Eingabeaufforderung sollte nun user@projectname lauten. Sie gibt an, dass Sie sich in Cloud Shell befinden.

  2. Verwenden Sie in Ihrer Cloud Shell das gcloud-Befehlszeilentool, um die Compute Engine-Instanz zu löschen.

    $  gcloud compute instances delete transformer-tutorial  --zone=us-central1-a
    
  3. Verwenden Sie zum Löschen der Cloud TPU-Ressource das gcloud-Befehlszeilentool.

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

Nächste Schritte

Testen Sie die PyTorch Colabs: