Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

DLRM auf Cloud TPU mit PyTorch trainieren

In dieser Anleitung wird gezeigt, wie Sie das Facebook Research DLRM auf einer Cloud TPU trainieren.

Ziele

  • PyTorch-Umgebung erstellen und konfigurieren
  • Trainingsjob mit fiktiven Daten ausführen
  • (Optional) Mit Criteo Kaggle-Dataset trainieren

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

    Zu Cloud Shell

  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}
    

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

  4. Starten Sie in Cloud Shell die für diese Anleitung erforderliche Compute Engine-Ressource. Hinweis: Verwenden Sie einen n1-highmem-96-machine-type für das Training mit dem Criteo Kaggle-Dataset.

    gcloud compute instances create dlrm-tutorial \
    --zone=us-central1-a \
    --machine-type=n1-standard-64 \
    --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 dlrm-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 dlrm-tutorial \
    --zone=us-central1-a \
    --network=default \
    --version=pytorch-1.7  \
    --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
    

PyTorch-Umgebung erstellen und konfigurieren

  1. Starten Sie eine conda-Umgebung.

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

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

Trainingsjob mit fiktiven Daten ausführen

  1. Rufen Sie mit dem folgenden Befehl das TPU-kompatible DLRM ab:

    (vm) $ git clone --recursive https://github.com/pytorch-tpu/examples.git
    
  2. Installieren Sie die Abhängigkeiten:

    (vm) $ pip install onnx
    
  3. Führen Sie das Modell mit zufälligen Daten aus.

    (vm) $ python examples/deps/dlrm/dlrm_tpu_runner.py \
        --arch-embedding-size=1000000-1000000-1000000-1000000-1000000-1000000-1000000-1000000 \
        --arch-sparse-feature-size=64 \
        --arch-mlp-bot=512-512-64 \
        --arch-mlp-top=1024-1024-1024-1 \
        --arch-interaction-op=dot \
        --lr-num-warmup-steps=10 \
        --lr-decay-start-step=10 \
        --mini-batch-size=2048 \
        --num-batches=1000 \
        --data-generation='random' \
        --numpy-rand-seed=727 \
        --print-time \
        --print-freq=100 \
        --num-indices-per-lookup=100 \
        --use-tpu \
        --num-indices-per-lookup-fixed \
        --tpu-model-parallel-group-len=8 \
        --tpu-metrics-debug \
        --tpu-cores=8
    

(Optional) Mit Criteo Kaggle-Dataset trainieren

Diese Schritte sind optional. Sie sollten sie nur ausführen, wenn Sie mit dem Dataset Cuteo Kaggle arbeiten möchten.

  1. Laden Sie das Dataset herunter.

    Laden Sie das Dataset aus dem Criteo Kaggle-Dataset mit dieser Anleitung herunter. Wenn der Download abgeschlossen ist, kopieren Sie die Datei dac.tar.gz in ein Verzeichnis mit dem Namen ./criteo-kaggle/. Verwenden Sie den Befehl tar -xzvf, um den Inhalt der tar.gz-Datei im Verzeichnis ./critero-kaggle zu extrahieren.

     (vm) $ mkdir criteo-kaggle
     (vm) $ cd criteo-kaggle
     (vm) $ # Download dataset from above link here.
     (vm) $ tar -xzvf dac.tar.gz
     (vm) $ cd ..
    
  2. Führen Sie eine Vorverarbeitung für das Dataset aus.

    Starten Sie das Skript, um das Criteo-Dataset vorzuverarbeiten. Dieses Skript erstellt eine Datei mit dem Namen kaggleAdDisplayChallenge_processed.npz. Die Vorverarbeitung des Datasets dauert mehr als drei Stunden.

    (vm) $ python examples/deps/dlrm/dlrm_data_pytorch.py \
        --data-generation=dataset \
        --data-set=kaggle \
        --raw-data-file=criteo-kaggle/train.txt \
        --mini-batch-size=128 \
        --test-mini-batch-size=16384 \
        --test-num-workers=4
    
  3. Prüfen Sie, ob die Vorverarbeitung erfolgreich war.

    Die Datei kaggleAdDisplayChallenge_processed.npz sollte im Verzeichnis criteo-kaggle enthalten sein.

  4. Führen Sie das Trainingsskript für ein vorverarbeitetes Criteo Kaggle-Dataset aus.

    (vm) $ python examples/deps/dlrm/dlrm_tpu_runner.py \
        --arch-sparse-feature-size=16 \
        --arch-mlp-bot="13-512-256-64-16" \
        --arch-mlp-top="512-256-1" \
        --data-generation=dataset \
        --data-set=kaggle \
        --raw-data-file=criteo-kaggle/train.txt \
        --processed-data-file=criteo-kaggle/kaggleAdDisplayChallenge_processed.npz \
        --loss-function=bce \
        --round-targets=True \
        --learning-rate=0.1 \
        --mini-batch-size=128 \
        --print-freq=1024 \
        --print-time \
        --test-mini-batch-size=16384 \
        --test-num-workers=4 \
        --test-freq=101376 \
        --use-tpu \
        --num-indices-per-lookup=1 \
        --num-indices-per-lookup-fixed \
        --tpu-model-parallel-group-len 8 \
        --tpu-metrics-debug \
        --tpu-cores=8
    

    Das Training sollte in 2+ Stunden mit einer Genauigkeit von mindestens 78,75 % abgeschlossen sein.

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 und angeben, 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 dlrm-tutorial --zone=us-central1-a
    
  3. Verwenden Sie zum Löschen der Cloud TPU-Ressource das gcloud-Befehlszeilentool.

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

Nächste Schritte

Testen Sie die PyTorch Colabs: