FairSeq Transformer auf Cloud TPU mit PyTorch trainieren

Der Schwerpunkt dieser Anleitung liegt insbesondere auf der FairSeq-Version von Transformer und der WMT 18-Übersetzungsaufgabe, die Englisch ins Deutsche übersetzt.

Ziele

  • Dataset vorbereiten
  • Führen Sie den Trainingsjob aus.
  • Überprüfen Sie die Ausgabeergebnisse.

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

  • Compute Engine
  • Cloud TPU

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. 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 richtig eingerichtet ist.

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

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

  4. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

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

  6. In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet. Rufen Sie die Seite mit den Cloud TPU-Preisen auf, um Ihre Kosten abzuschätzen. Denken Sie daran, Ressourcen, die Sie erstellt haben, 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 die Google Cloud-Befehlszeile für das Projekt, in dem Sie Cloud TPU erstellen möchten.

    gcloud config set project ${PROJECT_ID}
    

    Wenn Sie diesen Befehl zum ersten Mal in einer neuen Cloud Shell-VM ausführen, wird die Seite Authorize Cloud Shell angezeigt. Klicken Sie unten auf der Seite auf Authorize, damit gcloud GCP API-Aufrufe mit Ihren Anmeldedaten durchführen kann.

  4. Starten Sie in Cloud Shell die Compute Engine-Ressource, die für diese Anleitung erforderlich ist.

    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 Compute Engine-VM-Ressource eine Cloud TPU-Ressource mit dem folgenden Befehl:

    (vm) $ gcloud compute tpus create transformer-tutorial \
    --zone=us-central1-a \
    --network=default \
    --version=pytorch-1.11 \
    --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 in der Spalte NETWORK_ENDPOINTS. Sie benötigen diese IP-Adresse beim Erstellen und Konfigurieren der PyTorch-Umgebung.

Daten herunterladen

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

    (vm) $ mkdir $HOME/pytorch-tutorial-data
    
  2. Wechseln Sie zum Verzeichnis pytorch-tutorial-data.

    (vm) $ cd $HOME/pytorch-tutorial-data
    
  3. Modelldaten herunterladen.

    (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.11
    
  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.11/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

Bereinigen

Führen Sie eine Bereinigung durch, um unnötige Kosten für Ihr Konto zu vermeiden, nachdem Sie die von Ihnen erstellten Ressourcen verwendet haben:

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

    (vm) $ exit
    

    Die Eingabeaufforderung sollte nun user@projectname lauten und angeben, dass Sie sich in der Cloud Shell befinden.

  2. Löschen Sie die Compute Engine-Instanz in der Cloud Shell über die Google Cloud-Befehlszeile.

    $  gcloud compute instances delete transformer-tutorial  --zone=us-central1-a
    
  3. Löschen Sie die Cloud TPU-Ressource über die Google Cloud-Befehlszeile.

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

Nächste Schritte

PyTorch Colabs ausprobieren: