DLRM und DCN auf Cloud TPU trainieren (TF 2.x)


In dieser Anleitung erfahren Sie, wie Sie DLRM- und DCN v2-Rankingmodelle trainieren, die werden für Aufgaben wie die CTR-Vorhersage verwendet. Siehe Hinweis in Führen Sie das DLRM- oder DCN-Modell ein, um zu sehen, wie Parameter festgelegt werden. um entweder ein DLRM- oder ein DCN v2-Rankingmodell zu trainieren.

Die Modelleingaben sind numerische und kategoriale Merkmale und die Ausgabe ist skalar (z. B. Klickwahrscheinlichkeit). Das Modell kann anhand von Daten Cloud TPU Die Deep-Ranking-Modelle sind speicherintensiv (zur Einbettung Tabellen und Suchvorgängen) sowie rechenintensiv für tiefe Netzwerke (MLPs). TPUs sind für beides entwickelt.

Das Modell verwendet eine TPUEmbedding-Ebene für kategoriale Merkmale. TPU-Einbettung unterstützt große Einbettungstabellen mit schnellem Lookup, die Größe von eingebetteten Tabellen mit der Größe eines TPU-Pods linear skaliert. Einbettungstabellen können mit bis zu 90 GB verwendet für TPU v3-8, 5,6 TB für einen v3-512-Pod und 22,4 TB für einen v3-2048-TPU-Pod.

Der Modellcode befindet sich in der TensorFlow Recommender-Bibliothek. Eingabe-Pipeline, Konfiguration und Trainingsschleife werden im TensorFlow Model Garden

Lernziele

  • Trainingsumgebung einrichten
  • Trainingsjob mit synthetischen Daten ausführen
  • Ausgabeergebnisse überprüfen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

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 ordnungsgemäß 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. 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. Bereinigen Sie Ihre TPU-Ressourcen, die Sie beim um unnötige Kosten zu vermeiden.

Ressourcen einrichten

Dieser Abschnitt enthält Informationen zum Einrichten von Cloud Storage-Bucket-, VM- und Cloud TPU-Ressourcen für diese Anleitung.

  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 die Google Cloud CLI für die Verwendung des Projekts, in dem Sie erstellen möchten Cloud TPU

    Weitere Informationen zum Befehl gcloud finden Sie in der Referenz zur Google Cloud CLI.

    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 Authorize. der Seite, damit gcloud API-Aufrufe mit Ihren Anmeldedaten ausführen kann.

  4. Erstellen Sie ein Dienstkonto für das Cloud TPU-Projekt.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
    

    Der Befehl gibt ein Cloud TPU-Dienstkonto im folgenden Format zurück:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket. Die Option --location gibt dabei die Region an, in der der Bucket angelegt werden soll. Weitere Informationen zu Zonen und Regionen finden Sie unter Typen und Zonen.

    gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=europe-west4
    

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, sowie die Trainingsergebnisse. Mit dem in dieser Anleitung verwendeten gcloud compute tpus tpu-vm-Tool werden Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie detailliertere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

    Der Bucket-Standort muss sich in derselben Region wie Ihre Compute Engine (VM) und Ihr Cloud TPU-Knoten befinden.

  6. Starten Sie mit dem Befehl gcloud eine Compute Engine-VM und eine Cloud TPU.

    $ gcloud compute tpus tpu-vm create dlrm-dcn-tutorial \
        --zone=europe-west4-a \
        --accelerator-type=v3-8 \
        --version=tpu-vm-tf-2.17.0-se

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    accelerator-type
    Der Beschleunigertyp gibt die Version und Größe der Cloud TPU an, die Sie erstellen möchten. Weitere Informationen zu unterstützten Beschleunigertypen für jede TPU-Version finden Sie unter TPU-Versionen.
    version
    Die Softwareversion von Cloud TPU.
  7. Stellen Sie über SSH eine Verbindung zur Compute Engine-Instanz her. Wenn Sie verbunden sind an die VM ändert sich Ihre Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    gcloud compute tpus tpu-vm ssh dlrm-dcn-tutorial --zone=europe-west4-a
    

Cloud Storage-Bucket-Variablen festlegen

Richten Sie die folgenden Umgebungsvariablen ein und ersetzen Sie bucket-name durch den Namen Ihres Cloud Storage-Buckets:

(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export PYTHONPATH="/usr/share/tpu/models/:${PYTHONPATH}"
(vm)$ export EXPERIMENT_NAME=dlrm-exp

Legen Sie eine Umgebungsvariable für den TPU-Namen fest.

  (vm)$ export TPU_NAME=local
  

Die Trainingsanwendung erwartet, dass Ihre Trainingsdaten in Cloud Storage verfügbar sind. Die Trainingsanwendung verwendet auch Ihren Cloud Storage-Bucket, um während des Trainings Prüfpunkte zu speichern.

Ausführung des DLRM- oder DCN-Modells mit synthetischen Daten einrichten

Das Modell kann mit verschiedenen Datasets trainiert werden. Zwei häufig verwendete Tools sind Criteo Terabyte und Criteo Kaggle. In dieser Anleitung werden synthetische Daten durch Verwendung des Flags use_synthetic_data=True trainiert.

Das synthetische Dataset dient nur zum Verständnis, wie eine Cloud TPU verwendet wird und wie die End-to-End-Leistung validiert wird. Die Genauigkeit und das gespeicherte Modell erscheinen nicht aussagekräftig.

Auf den Websites Criteo Terabyte und Criteo Kaggle finden Sie Informationen zum Herunterladen und Vorverarbeiten dieser Datasets.

  1. Erforderliche Pakete installieren

    (vm)$ pip3 install tensorflow-recommenders
    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
    
  2. Wechseln Sie in das Skriptverzeichnis.

    (vm)$ cd /usr/share/tpu/models/official/recommendation/ranking
  3. Führen Sie das Trainingsskript aus. Dabei wird ein fiktives, Criteo-ähnliches Dataset verwendet, um DLRM-Modell. Das Training dauert etwa 20 Minuten.

    export EMBEDDING_DIM=32
    
    python3 train.py --mode=train_and_eval \
         --model_dir=${STORAGE_BUCKET}/model_dirs/${EXPERIMENT_NAME} --params_override="
         runtime:
             distribution_strategy: 'tpu'
         task:
             use_synthetic_data: true
             train_data:
                 input_path: '${DATA_DIR}/train/*'
                 global_batch_size: 16384
             validation_data:
                 input_path: '${DATA_DIR}/eval/*'
                 global_batch_size: 16384
             model:
                 num_dense_features: 13
                 bottom_mlp: [512,256,${EMBEDDING_DIM}]
                 embedding_dim: ${EMBEDDING_DIM}
                 top_mlp: [1024,1024,512,256,1]
                 interaction: 'dot'
                 vocab_sizes: [39884406, 39043, 17289, 7420, 20263, 3, 7120, 1543, 63,
                     38532951, 2953546, 403346, 10, 2208, 11938, 155, 4, 976, 14,
                     39979771, 25641295, 39664984, 585935, 12972, 108, 36]
         trainer:
             use_orbit: false
             validation_interval: 1000
             checkpoint_interval: 1000
             validation_steps: 500
             train_steps: 1000
             steps_per_loop: 1000
         "
    

Dieses Training dauert ungefähr 10 Minuten auf einer v3-8-TPU. Nach Abschluss des Vorgangs werden Meldungen wie die folgenden angezeigt:

I0621 21:32:58.519792 139675269142336 tpu_embedding_v2_utils.py:907] Done with log of TPUEmbeddingConfiguration.
I0621 21:32:58.540874 139675269142336 tpu_embedding_v2.py:389] Done initializing TPU Embedding engine.
1000/1000 [==============================] - 335s 335ms/step - auc: 0.7360 - accuracy: 0.6709 - prediction_mean: 0.4984
- label_mean: 0.4976 - loss: 0.0734 - regularization_loss: 0.0000e+00 - total_loss: 0.0734 - val_auc: 0.7403
- val_accuracy: 0.6745 - val_prediction_mean: 0.5065 - val_label_mean: 0.4976 - val_loss: 0.0749
- val_regularization_loss: 0.0000e+00 - val_total_loss: 0.0749

Model: "ranking"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
tpu_embedding (TPUEmbedding) multiple                  1
_________________________________________________________________
mlp (MLP)                    multiple                  154944
_________________________________________________________________
mlp_1 (MLP)                  multiple                  2131969
_________________________________________________________________
dot_interaction (DotInteract multiple                  0
_________________________________________________________________
ranking_1 (Ranking)          multiple                  0
=================================================================
Total params: 2,286,914
Trainable params: 2,286,914
Non-trainable params: 0
_________________________________________________________________
I0621 21:43:54.977140 139675269142336 train.py:177] Train history: {'auc': [0.7359596490859985],
'accuracy': [0.67094486951828], 'prediction_mean': [0.4983849823474884], 'label_mean': [0.4975697994232178],
'loss': [0.07338511198759079], 'regularization_loss': [0], 'total_loss': [0.07338511198759079],
'val_auc': [0.7402724623680115], 'val_accuracy': [0.6744520664215088], 'val_prediction_mean': [0.5064718723297119],
'val_label_mean': [0.4975748658180237], 'val_loss': [0.07486172765493393],
'val_regularization_loss': [0], 'val_total_loss': [0.07486172765493393]}

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

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

    (vm)$ exit
    

    Ihr Prompt sollte nun username@projectname lauten und angeben, dass Sie in Cloud Shell auf.

  2. Löschen Sie Ihre Cloud TPU-Ressourcen.

    $ gcloud compute tpus tpu-vm delete dlrm-dcn-tutorial \
      --zone=europe-west4-a
    
  3. Prüfen Sie, ob die Ressourcen gelöscht wurden. Führen Sie dazu gcloud compute tpus tpu-vm list aus. Der Löschvorgang kann einige Minuten dauern. Die Ausgabe des folgenden Befehls sollte keine der in dieser Anleitung erstellten Ressourcen enthalten:

    $ gcloud compute tpus tpu-vm list --zone=europe-west4-a
  4. Löschen Sie den Cloud Storage-Bucket mit der gcloud CLI. Ersetzen Sie bucket-name durch den Namen des Cloud Storage-Buckets.

    $ gcloud storage rm gs://bucket-name --recursive
    

Nächste Schritte

In den Cloud TPU-Anleitungen von TensorFlow wird das Modell in der Regel mithilfe eines Beispiel-Datasets trainiert. Die Ergebnisse dieses Trainings können nicht für die Inferenz verwendet werden. Bis ein Modell für die Inferenz nutzen, können Sie die Daten anhand eines öffentlich verfügbaren oder Ihrem eigenen Dataset. Auf Cloud TPUs trainierte TensorFlow-Modelle müssen Datasets im Allgemeinen TFRecord-Format.

Mit dem Tool zur Konvertierung von Datasets Sample zum Konvertieren eines Bildes Klassifizierungs-Dataset in das TFRecord-Format. Wenn Sie kein Bild verwenden Klassifizierungsmodells spezifizieren, müssen Sie das Dataset TFRecord-Format selbst. Weitere Informationen finden Sie unter TFRecord und tf.Beispiel

Hyperparameter-Feinabstimmung

Um die Leistung des Modells mit Ihrem Dataset zu verbessern, können Sie die Hyperparameter. Sie finden Informationen zu allgemeinen Hyperparametern Von TPU unterstützte Modelle auf GitHub Informationen zu modellspezifischen Hyperparametern finden Sie in der Quelle Code für die einzelnen Modell. Weitere Informationen zur Abstimmung von Hyperparametern finden Sie unter Übersicht über Hyperparameter-Abstimmung und Feinabstimmung Hyperparametern.

Inferenz

Sobald Sie Ihr Modell trainiert haben, können Sie es für die Inferenz (auch als Vorhersage). Sie können den Cloud TPU-Inferenzkonverter verwenden ein Tool zum Erstellen und Optimieren TensorFlow-Modell für Inferenz auf Cloud TPU v5e Weitere Informationen Informationen zur Inferenz in Cloud TPU v5e finden Sie unter Cloud TPU v5e-Inferenz .