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

In dieser Anleitung erfahren Sie, wie Sie DLRM- und DCN V2-Ranking-Modelle trainieren, die für Aufgaben wie die Vorhersage der Klickrate (CTR) verwendet werden können. Im Hinweis unter Einrichten des DLRM- oder DCN-Modells finden Sie Informationen zum Festlegen von Parametern zum Trainieren eines DLRM- oder DCN v2-Ranking-Modells.

Die Modelleingaben sind numerische und kategoriale Merkmale. Die Ausgabe ist ein Skalar (z. B. Klickwahrscheinlichkeit). Das Modell kann in Cloud TPU trainiert und bewertet werden. Modelle mit tiefem Ranking sind sowohl speicherintensiv (für das Einbetten von Tabellen/Lookup) als auch rechenintensiv für Deep Networks (MLPs). TPUs sind für beide konzipiert.

Das Modell verwendet eine TPUEmbedding-Ebene für kategoriale Merkmale. Die TPU-Einbettung unterstützt große Einbettungstabellen mit schnellem Lookup. Die Größe von Einbettungstabellen wird linear mit der Größe eines TPU-Pods skaliert. 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 können bis zu 90 GB Einbettungstabellen verwendet werden.

Der Modellcode befindet sich in der TensorFlow Recommender-Bibliothek, während die Eingabepipeline, die Konfiguration und die Trainingsschleife im TensorFlow Model Garden beschrieben werden.

Ziele

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

Kosten

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

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

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 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 Ihr 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 Ihr Projekt aktiviert ist.

  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. Denken Sie daran, nicht mehr benötigte Ressourcen zu bereinigen, um unnötige Kosten zu vermeiden.

Ressourcen einrichten

Dieser Abschnitt enthält Informationen zum Einrichten der Cloud Storage-Bucket-, VM- und Cloud TPU-Ressourcen, die in dieser Anleitung verwendet werden.

  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. 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, wobei die Option -l die Region angibt, in der der Bucket erstellt werden soll. Weitere Informationen zu Zonen und Regionen finden Sie unter Typen und Zonen:

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
    

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, und die Trainingsergebnisse. Mit dem in dieser Anleitung verwendeten gcloud compute tpus execution-groups-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 execution-groups create \
     --vm-only \
     --name=dlrm-dcn-tutorial \
     --zone=zone \
     --disk-size=300 \
     --machine-type=n1-standard-8 \
     --tf-version=2.6.0
    

    Beschreibung der Befehls-Flags

    vm-only
    Erstellen Sie nur eine VM. Standardmäßig werden mit dem Befehl gcloud compute tpus execution-groups eine VM und eine Cloud TPU erstellt.
    name
    Der Name der zu erstellenden Cloud TPU.
    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    disk-size
    Die Größe des Laufwerks in GB der VM, die mit dem Befehl gcloud compute tpus execution-groups erstellt wurde.
    machine-type
    Der Maschinentyp der zu erstellenden Compute Engine-VM.
    tf-version
    Die Version von Tensorflow, die von ctpu auf der VM installiert wird.

    Wenn der Befehl gcloud compute tpus execution-groups ausgeführt wurde, sollten Sie prüfen, ob die Shell-Eingabeaufforderung von username@projectname zu username@vm-name geändert wurde. Diese Änderung bedeutet, dass Sie jetzt bei Ihrer Compute Engine-VM angemeldet sind.

    Wenn Sie nicht mit der Compute Engine-Instanz verbunden sind, können Sie die Verbindung mit dem folgenden Befehl herstellen:

    gcloud compute ssh dlrm-dcn-tutorial --zone=zone
    

    Führen Sie im weiteren Verlauf dieser Anleitung jeden Befehl, der mit (vm)$ beginnt, in Ihrer Compute Engine-Instanz aus.

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 TPU_NAME=dlrm-dcn-tutorial
(vm)$ export PYTHONPATH="$PYTHONPATH:/usr/share/models/"
(vm)$ export EXPERIMENT_NAME=dlrm-exp

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.

Einrichten, um das DLRM- oder DCN-Modell mit synthetischen Daten auszuführen

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

Das synthetische Dataset ist nur hilfreich, um zu verstehen, wie eine Cloud TPU verwendet wird und wie die End-to-End-Leistung validiert werden kann. Die Genauigkeitszahlen und das gespeicherte Modell sind nicht aussagekräftig.

Auf den Websites Criteo Terabyte und Criteo Kaggle erfahren Sie, wie Sie diese herunterladen und vorverarbeiten. Datasets.

  1. Starten Sie mit dem Befehl gcloud eine Cloud TPU-Ressource.

    (vm)$ gcloud compute tpus execution-groups create \
     --tpu-only \
     --accelerator-type=v3-8  \
     --name=dlrm-dcn-tutorial \
     --zone=zone \
     --tf-version=2.6.0
    

    Beschreibung der Befehls-Flags

    tpu-only
    Erstellt die Cloud TPU, ohne eine VM zu erstellen. Standardmäßig werden mit dem Befehl gcloud compute tpus execution-groups eine VM und eine Cloud TPU erstellt.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    name
    Der Name der zu erstellenden Cloud TPU.
    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    tf-version
    Die Version von Tensorflow, die von gcloud auf der VM installiert wird.
  2. Installieren Sie das erforderliche Paket.

    (vm)$ pip install tensorflow-recommenders
    
  3. Führen Sie das Trainingsskript aus. Hier wird ein fiktives, Criteo-ähnliches Dataset zum Trainieren des DLRM-Modells verwendet. Das Training dauert etwa 20 Minuten.

python3 /usr/share/models/official/recommendation/ranking/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,64]
        embedding_dim: 64
        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
"

Beschreibung der Befehls-Flags

use_orbit
Ob Sie die Orbit-Bibliothek für das Training oder die Keras-Kompilierungs-/Fit APIs verwenden möchten.
train_steps
Die Anzahl der Schritte, die zum Trainieren des Modells verwendet werden.
validation_steps
Die Anzahl der Schritte, die zum Ausführen der Bewertung verwendet werden.
validation_interval
Die Anzahl der Trainingsschritte, die zwischen den Auswertungen ausgeführt werden sollen, muss <= train_steps.
steps_per_loop
Die Anzahl der Schritte pro Grafikmodusschleife. So wird die Kommunikation im turbulenten Kontext reduziert.

Dieses Training dauert etwa zehn Minuten auf einer v3-8-TPU. Wenn der Vorgang abgeschlossen ist, erhalten Sie folgende Nachrichten:

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
    

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

  2. Verwenden Sie in Cloud Shell den folgenden Befehl, um Ihre Compute Engine-VM und Cloud TPU zu löschen:

    $ gcloud compute tpus execution-groups delete dlrm-dcn-tutorial \
      --zone=zone
    
  3. Prüfen Sie, ob die Ressourcen gelöscht wurden. Führen Sie dazu gcloud compute tpus execution-groups list aus. Der Löschvorgang kann einige Minuten dauern. Eine Antwort wie die folgende gibt an, dass Ihre Instanzen erfolgreich gelöscht wurden.

    $ gcloud compute tpus execution-groups list \
     --zone=zone
    

    Sie sollten eine leere Liste der TPUs sehen, die in etwa so aussieht:

       NAME             STATUS
    
  4. Löschen Sie Ihren Cloud Storage-Bucket wie unten gezeigt mit gsutil. Ersetzen Sie bucket-name durch den Namen des Cloud Storage-Buckets.

    $ gsutil rm -r gs://bucket-name
    

Nächste Schritte

In dieser Anleitung haben Sie das DLRM-DCN-Modell mit einem Beispiel-Dataset trainiert. Die Ergebnisse dieses Trainings sind in den meisten Fällen nicht für die Inferenz verwendbar. Wenn Sie ein Modell für die Inferenz verwenden möchten, können Sie die Daten in einem öffentlich verfügbaren Dataset oder in Ihrem eigenen Dataset trainieren. Für Modelle, die auf Cloud TPUs trainiert wurden, müssen Datasets das Format TFRecord haben.

Sie können das Beispiel für das Dataset-Konvertierungstool verwenden, um ein Bildklassifizierungs-Dataset in das TFRecord-Format zu konvertieren. Wenn Sie kein Bildklassifizierungsmodell verwenden, müssen Sie das Dataset selbst in das TFRecords-Format konvertieren. Weitere Informationen finden Sie unter TFRecord und tf.Example.

Hyperparameter-Feinabstimmung

Sie können die Hyperparameter des Modells optimieren, um die Leistung des Modells mit Ihrem Dataset zu verbessern. Informationen zu Hyperparametern, die für alle TPU-unterstützten Modelle üblich sind, finden Sie auf GitHub. Informationen zu modellspezifischen Hyperparametern finden Sie im Quellcode für die einzelnen Modelle. Weitere Informationen zur Hyperparameter-Abstimmung finden Sie unter Übersicht über Hyperparameter-Abstimmung, Hyperparameter-Abstimmungsdienst und Hyperparameter abstimmen.

Inferenz

Sobald Ihr Modell trainiert ist, können Sie es für Inferenz (auch als Vorhersage bezeichnet) verwenden. AI Platform ist eine cloudbasierte Lösung, mit der Sie Modelle für maschinelles Lernen entwickeln, trainieren und bereitstellen können. Sobald ein Modell bereitgestellt wurde, können Sie den AI Platform Prediction-Dienst verwenden.