Transformer auf Cloud TPU (TF 2.x) trainieren

Wenn Sie nicht mit Cloud TPU vertraut sind, wird dringend empfohlen, die Kurzanleitung zu lesen, um zu erfahren, wie Sie eine TPU und eine Compute Engine-VM erstellen.

In dieser Anleitung erfahren Sie, wie Sie ein Transformer-Modell in Cloud TPU trainieren. Transformer ist eine neuronale Netzwerkarchitektur, die Sequenz-zu-Sequenz-Probleme mithilfe von Aufmerksamkeitsmechanismen löst. Im Gegensatz zu herkömmlichen neuronalen Sequenz-zu-Sequenz-Modellen umfasst Transformer keine wiederkehrenden Verbindungen. Der Aufmerksamkeitsmechanismus lernt Abhängigkeiten zwischen Tokens in zwei Sequenzen. Da Aufmerksamkeitsgewichtungen auf alle Tokens in den Sequenzen angewendet werden, kann das Transformer-Modell problemlos Abhängigkeiten über weite Strecken erfassen.

Die gesamte Struktur von Transformer folgt dem Encoder-Decoder-Standardmuster. Der Codierer verwendet "Self-Attention", um eine Darstellung der Eingabesequenz zu berechnen. Der Decoder generiert die Ausgabesequenz pro Token, wobei die Encoder-Ausgabe und die zuvor vom Decoder ausgegeben Tokens als Eingaben verwendet werden.

Das Modell wendet auch Einbettungen auf die Eingabe- und Ausgabetokens an und fügt eine konstante Positionscodierung hinzu. Die Positionscodierung fügt Informationen über die Position jedes Tokens hinzu.

Lernziele

  • Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
  • Laden Sie das zum Trainieren des Modells verwendete Dataset herunter und vorverarbeiten Sie es.
  • Trainingsjob ausführen
  • Ausgabeergebnisse überprüfen

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.

Hinweis

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

Cloud TPU-Training mit Einzelgerät

Dieser Abschnitt enthält Informationen zum Einrichten von Cloud Storage-, VM- und Cloud TPU-Ressourcen für das Training mit einem Einzelgerät.

  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 so, dass sie das Projekt verwendet, 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, damit gcloud GCP API-Aufrufe mit Ihren Anmeldedaten durchführen kann.

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

    Dienstkonten ermöglichen dem Cloud TPU-Dienst, auf andere Google Cloud Platform-Dienste zuzugreifen.

    $ 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:

    $ 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, sowie die Trainingsergebnisse. Mit dem gcloud-Befehl, der in dieser Anleitung zum Einrichten der TPU verwendet wird, werden auch Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie genauere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

Dataset vorbereiten

Zur Reduzierung der Gesamtkosten empfehlen wir Ihnen, eine Compute Engine-VM zu verwenden, um lang ausführende Vorgänge zum Herunterladen oder Vorverarbeiten Ihrer Daten auszuführen.

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Cloud Shell öffnen

  2. Erstellen Sie eine Compute Engine-VM, um Ihre Daten herunterzuladen und vorzuverarbeiten.

    gcloud compute tpus execution-groups create --name=transformer-tutorial \
      --disk-size=300 \
      --machine-type=n1-standard-8 \
      --zone=europe-west4-a \
      --tf-version=2.8.0 \
      --vm-only
  3. Wenn Sie nicht automatisch mit der Compute Engine-Instanz verbunden sind, melden Sie sich mit dem folgenden ssh-Befehl an. Wenn Sie bei der VM angemeldet sind, ändert sich die Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    gcloud compute ssh transformer-tutorial --zone=europe-west4-a

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

  4. Exportieren Sie TPU-Einrichtungsvariablen.

    Exportieren Sie Ihre Projekt-ID, den Namen, den Sie für Ihre TPU-Ressourcen verwenden möchten, sowie die Zone, in der Sie das Modell trainieren und alle trainingsbezogenen Daten speichern.

    $ export TPU_NAME=transformer-tutorial
    $ export ZONE=europe-west4-a

  5. Exportieren Sie Cloud Storage-Bucket-Variablen. Ersetzen Sie bucket-name durch den Namen Ihres Buckets.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export GCS_DATA_DIR=${STORAGE_BUCKET}/data/transformer
    (vm)$ export DATA_DIR=${HOME}/transformer/data
    
  6. Installieren Sie die TensorFlow-Anforderungen und legen Sie die Umgebungsvariable PYTHONPATH fest.

    (vm)$ pip3 install -r /usr/share/models/official/requirements.txt
    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  7. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    (vm)$ cd /usr/share/models/official/legacy/transformer
  8. Laden Sie die Datasets herunter und vorverarbeiten Sie sie.

    (vm)$ python3 data_download.py --data_dir=${DATA_DIR}
    (vm)$ gsutil cp -r ${DATA_DIR} ${GCS_DATA_DIR}
    

    data_download.py lädt die Trainings- und Bewertungs-WMT-Datasets herunter und verarbeitet sie vor. Nachdem die Daten heruntergeladen und extrahiert wurden, werden die Trainingsdaten zum Generieren eines Untertokenvokabulars verwendet. Die Bewertungs- und Trainingsstrings werden tokenisiert und die resultierenden Daten werden fragmentiert, zufällig angeordnet und als TFRecords gespeichert.

    Komprimierte Daten in Höhe von 1,75 GB werden heruntergeladen. Insgesamt belegen die Rohdateien (komprimierte, extrahierte und kombinierte Dateien) 8,4 GB Speicherplatz. Die resultierenden TFRecord- und Vokabulärdateien sind 722 MB groß. Das Skript speichert 460.000 Fälle und die Ausführung dauert ungefähr 40 Minuten.

  9. Bereinigen Sie die VM-Ressourcen.

    Nachdem das Dataset in TFRecords konvertiert und in DATA_DIR in Ihrem Cloud Storage-Bucket kopiert wurde, können Sie die Compute Engine-Instanz löschen.

    Trennen Sie die Verbindung zur Compute Engine-Instanz:

    (vm)$ exit
    

    Die Eingabeaufforderung sollte nun username@projectname lauten, womit angezeigt wird, dass Sie sich wieder in Cloud Shell befinden.

  10. Löschen Sie die Compute Engine-Instanz.

    $ gcloud compute instances delete transformer-tutorial \
        --zone=europe-west4-a

Übersetzungsmodell Englisch-Deutsch auf einer einzelnen Cloud TPU trainieren

  1. Starten Sie mit dem Befehl gcloud eine Compute Engine-VM und eine Cloud TPU. Der verwendete Befehl hängt davon ab, ob Sie TPU-VMs oder TPU-Knoten verwenden. Weitere Informationen zu beiden VM-Architekturen finden Sie unter Systemarchitektur.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm create transformer-tutorial \
     --zone=europe-west4-a \
     --accelerator-type=v3-8 \
     --version=tpu-vm-tf-2.8.0
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie Ihre Cloud TPU erstellen möchten.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    version
    Die Version der Cloud TPU-Software.

    TPU-Knoten

    $ gcloud compute tpus execution-groups create \
    --name=transformer-tutorial \
    --disk-size=300 \
    --machine-type=n1-standard-8 \
    --zone=europe-west4-a \
    --tf-version=2.8.0
    

    Beschreibung der Befehls-Flags

    disk-size
    Die Größe des Laufwerks für die VM in GB.
    machine_type
    Der Maschinentyp der VM, die der Befehl gcloud erstellt.
    tf-version
    Die Version von TensorFlow gcloud compute tpus execution-groups auf der VM installiert.
  2. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet werden, melden Sie sich mit dem folgenden ssh-Befehl an.

    TPU-VM

    gcloud alpha compute tpus tpu-vm ssh transformer-tutorial --zone=europe-west4-a
    

    TPU-Knoten

    gcloud compute ssh transformer-tutorial --zone=europe-west4-a
    
  3. Exportieren Sie Datenspeichervariablen.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export GCS_DATA_DIR=${STORAGE_BUCKET}/data/transformer
    (vm)$ export DATA_DIR=${HOME}/transformer/data
    (vm)$ export PARAM_SET=big
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET}
    
  4. Installieren Sie TensorFlow-Anforderungen.

    TPU-VM

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
    (vm)$  export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
    

    TPU-Knoten

    (vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
    (vm)$ export PYTHONPATH="/usr/share/models:$PYTHONPATH"
    
  5. Exportieren Sie eine Cloud TPU-Variable.

    TPU-VM

    (vm)$ export TPU_NAME=local

    TPU-Knoten

    (vm)$ export TPU_NAME=transformer-tutorial

  6. Wechseln Sie in das Trainingsverzeichnis:

    TPU-VM

    (vm)$ cd /usr/share/tpu/models/official/legacy/transformer

    TPU-Knoten

    (vm)$ cd /usr/share/models/official/legacy/transformer
  7. Führen Sie das Trainingsskript aus:

    (vm)$ python3 transformer_main.py \
        --tpu=${TPU_NAME} \
        --model_dir=${MODEL_DIR} \
        --data_dir=${GCS_DATA_DIR} \
        --vocab_file=${GCS_DATA_DIR}/vocab.ende.32768 \
        --bleu_source=${GCS_DATA_DIR}/newstest2014.en \
        --bleu_ref=${GCS_DATA_DIR}/newstest2014.de \
        --batch_size=6144 \
        --train_steps=2000 \
        --static_batch=true \
        --use_ctl=true \
        --param_set=big \
        --max_length=64 \
        --decode_batch_size=32 \
        --decode_max_length=97 \
        --padded_decode=true \
        --distribution_strategy=tpu
    

    Beschreibung der Befehls-Flags

    tpu
    Der Name der Cloud TPU. Dieser wird durch Angabe der Umgebungsvariable (TPU_NAME) festgelegt.
    model_dir
    Der Cloud Storage-Bucket, in dem während des Trainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner verwenden, um zuvor generierte Prüfpunkte zu laden, die auf einer TPU mit derselben Größe und TensorFlow-Version erstellt wurden.
    data_dir
    Der Cloud Storage-Pfad der Trainingseingabe. In diesem Beispiel ist er auf das Dataset „fake_imagenet“ festgelegt.
    vocab_file
    Eine Datei, die das Vokabular für die Übersetzung enthält
    bleu_source
    Eine Datei mit Quellsätzen für die Übersetzung.
    bleu_ref
    Eine Datei, die die Referenz für die Übersetzungssätze enthält
    train_steps
    Die Anzahl der Schritte zum Trainieren des Modells. Pro Schritt wird ein Datenbatch verarbeitet. Dies umfasst sowohl einen Vorwärtsdurchlauf als auch eine Rückpropagierung.
    batch_size
    Die Batchgröße des Trainings.
    static_batch
    Gibt an, ob die Batches im Dataset statische Formen haben.
    use_ctl
    Gibt an, ob das Skript mit einer benutzerdefinierten Trainingsschleife ausgeführt wird.
    param_set
    Der Parameter, der beim Erstellen und Trainieren des Modells verwendet werden soll. Die Parameter definieren die Eingabeform, die Modellkonfiguration und andere Einstellungen.
    max_length
    Die maximale Länge eines Beispiels im Dataset.
    decode_batch_size
    Die globale Batchgröße, die für die automatische regressive Decodierung von Transformer auf einer Cloud TPU verwendet wird.
    decode_max_length
    Die maximale Sequenzlänge der Decodierungs-/Bewertungsdaten. Dies wird von der automatischen Regressor-Decodierung mit Transformer auf einer Cloud TPU verwendet, um die Menge des erforderlichen Datenpaddings zu minimieren.
    padded_decode
    Gibt an, ob die automatische Regressor-Decodierung mit Eingabedaten ausgeführt wird, die für decode_max_length aufgefüllt werden. Wenn Tor TPU/XLA-GPU ausgeführt wird, muss dieses Flag aufgrund der erforderlichen statischen Form festgelegt werden.
    distribution_strategy
    Setzen Sie distribution_strategy auf tpu, um das ResNet-Modell auf einer Cloud TPU zu trainieren.

    Standardmäßig wird das Modell alle 2000 Schritte ausgewertet. Zum Trainieren einer Konvergenz müssen Sie train_steps auf 200.000 ändern. Sie können die Anzahl der Trainingsschritte erhöhen oder angeben, wie oft Bewertungen ausgeführt werden sollen, indem Sie die folgenden Parameter festlegen:

    • --train_steps: Legt die Gesamtzahl der auszuführenden Trainingsschritte fest.
    • --steps_between_evals: Anzahl der Trainingsschritte, die zwischen den Bewertungen ausgeführt werden sollen.

    Das Training und die Bewertung auf einer v3-8-Cloud TPU dauern etwa sieben Minuten. Wenn das Training und die Bewertung abgeschlossen sind, wird eine Meldung wie die folgende angezeigt:

    INFO:tensorflow:Writing to file /tmp/tmpej76vasn
    I0218 20:07:26.020797 140707963950912 translate.py:184] Writing to file /tmp/tmpej76vasn
    I0218 20:07:35.099256 140707963950912 transformer_main.py:118] Bleu score (uncased): 0.99971704185009
    I0218 20:07:35.099616 140707963950912 transformer_main.py:119] Bleu score (cased): 0.9768599644303322
    

    Sie haben jetzt das Einzelgerät-Training abgeschlossen. Gehen Sie folgendermaßen vor, um die Ressourcen des TPU-Einzelgeräts zu löschen.

  8. Trennen Sie die Verbindung zur Compute Engine-Instanz:

    (vm)$ exit
    

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

  9. Löschen Sie die TPU-Ressource.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm delete transformer-tutorial \
    --zone=europe-west4-a
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der sich Ihre Cloud TPU befindet.

    TPU-Knoten

    $ gcloud compute tpus execution-groups delete transformer-tutorial \
    --zone=europe-west4-a
    

    Beschreibung der Befehls-Flags

    tpu-only
    Löscht nur die Cloud TPU. Die VM bleibt verfügbar.
    zone
    Die Zone, in der die zu löschende TPU enthalten ist.

An dieser Stelle können Sie entweder diese Anleitung beenden und eine Bereinigung durchführen oder die Ausführung des Modells auf Cloud TPU Pods fortsetzen.

Modell mit Cloud TPU Pods skalieren

Zum Trainieren eines Modells auf Cloud TPU Pods müssen Sie möglicherweise einige Änderungen an Ihrem Trainingsskript vornehmen. Weitere Informationen finden Sie unter Training auf TPU-Pods.

In der folgenden Anleitung wird davon ausgegangen, dass Sie bereits eine Cloud Shell geöffnet, Ihr TPU-Projekt eingerichtet und einen Cloud Storage-Bucket erstellt haben, wie am Anfang dieser Anleitung erläutert.

TPU-Pod-Training

  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 so, dass sie das Projekt verwendet, 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, damit gcloud GCP API-Aufrufe mit Ihren Anmeldedaten durchfü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 oder verwenden Sie einen Bucket, den Sie zuvor für Ihr Projekt erstellt haben:

    gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 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-Befehl werden Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie genauere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

TPU-VM-Ressourcen starten

  1. Starten Sie einen TPU-VM-Pod mit dem gcloud-Befehl. In dieser Anleitung wird ein v3-32-Pod angegeben. Weitere Pod-Optionen finden Sie auf der Seite zu verfügbaren TPU-Typen.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm create transformer-tutorial \
    --zone=europe-west4-a \
    --accelerator-type=v3-32 \
    --version=tpu-vm-tf-2.8.0-pod
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie Ihre Cloud TPU erstellen möchten.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    version
    Die Version der Cloud TPU-Software.

    TPU-Knoten

    (vm)$ gcloud compute tpus execution-groups create \
    --name=transformer-tutorial \
    --accelerator-type=v3-32 \
    --zone=europe-west4-a \
    --tf-version=2.8.0
    

    Beschreibung der Befehls-Flags

    tpu-only
    Erstellen Sie nur eine Cloud TPU. 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.
    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten. Dies sollte dieselbe Zone sein, die Sie für die Compute Engine-VM verwendet haben. Beispiel: europe-west4-a
    tf-version
    Die Version von TensorFlow gcloud auf der VM installiert.
    name
    Der Name der zu erstellenden Cloud TPU.
  2. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet werden, melden Sie sich mit dem folgenden ssh-Befehl an. Wenn Sie bei der VM angemeldet sind, ändert sich die Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    TPU-VM

    gcloud alpha compute tpus tpu-vm ssh transformer-tutorial --zone=europe-west4-a
    

    TPU-Knoten

    gcloud compute ssh transformer-tutorial --zone=europe-west4-a
    

TensorFlow und Abhängigkeiten installieren

  1. Installieren Sie TensorFlow-Anforderungen.

      (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
      (vm)$  export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
      

  2. Exportieren Sie die PYTHONPATH-Variable.

    TPU-VM

    
    (vm)$ PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"

    TPU-Knoten

    (vm)$ export PYTHONPATH="/usr/share/models:$PYTHONPATH"

Pod-Training einrichten und starten

  1. Exportieren Sie Cloud TPU-Einrichtungsvariablen:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export GCS_DATA_DIR=${STORAGE_BUCKET}/data/transformer
    (vm)$ export DATA_DIR=${HOME}/transformer/data
    (vm)$ export PARAM_SET=big
    (vm)$ export TPU_LOAD_LIBRARY=0
    (vm)$ export RESNET_PRETRAIN_DIR=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET}_pod
    (vm)$ export TPU_NAME=transformer-tutorial
    
  2. Wechseln Sie in das Trainingsverzeichnis:

    TPU-VM

    (vm)$ cd /usr/share/tpu/models/official/legacy/transformer

    TPU-Knoten

    (vm)$ cd /usr/share/models/official/legacy/transformer
  3. Führen Sie das Trainingsskript aus:

    (vm)$ python3 transformer_main.py \
        --tpu=${TPU_NAME} \
        --model_dir=${MODEL_DIR} \
        --data_dir=${GCS_DATA_DIR} \
        --vocab_file=${GCS_DATA_DIR}/vocab.ende.32768 \
        --bleu_source=${GCS_DATA_DIR}/newstest2014.en \
        --bleu_ref=${GCS_DATA_DIR}/newstest2014.de \
        --batch_size=6144 \
        --train_steps=2000 \
        --static_batch=true \
        --use_ctl=true \
        --param_set=big \
        --max_length=64 \
        --decode_batch_size=32 \
        --decode_max_length=97 \
        --padded_decode=true \
        --distribution_strategy=tpu

    Beschreibung der Befehls-Flags

    tpu
    Der Name der Cloud TPU. Dieser wird durch Angabe der Umgebungsvariable (TPU_NAME) festgelegt.

     <dt><code>model_dir</code></dt>
     <dd>The Cloud Storage bucket where checkpoints and summaries are
       stored during training. You can use an existing folder to load previously
       generated checkpoints created on a TPU of the same size and
       TensorFlow version.</dd>
    
     <dt><code>data_dir</code></dt>
     <dd>The Cloud Storage path of training input. It is set to the
       fake_imagenet dataset in this example.</dd>
    
     <dt><code>vocab_file</code></dt>
     <dd>A file that contains the vocabulary for translation.</dd>
    
     <dt><code>bleu_source</code></dt>
     <dd>A file that contains source sentences for translation.</dd>
    
     <dt><code>bleu_ref</code></dt>
     <dd>A file that contains the reference for the translation sentences.</dd>
    
     <dt><code>train_steps</code></dt>
     <dd>The number of steps to train the model. One step processes one batch
       of data. This includes both a forward pass and back propagation.</dd>
    
     <dt><code>batch_size</code></dt>
     <dd>The training batch size.</dd>
    
     <dt><code>static_batch</code></dt>
     <dd>Specifies whether the batches in the dataset has static shapes.</dd>
    
     <dt><code>use_ctl</code></dt>
     <dd>Specifies whether the script runs with a custom training loop.</dd>
    
     <dt><code>param_set</code></dt>
     <dd>The parameter set to use when creating and training the model. The
      parameters define the input shape, model configuration, and other
      settings.</dd>
    
     <dt><code>max_length</code></dt>
     <dd>The maximum length of an example in the dataset.</dd>
    
     <dt><code>decode_batch_size</code></dt>
     <dd>The global batch size used for Transformer auto-regressive decoding
       on a Cloud TPU.</dd>
    
     <dt><code>decode_max_length</code></dt>
     <dd>The maximum sequence length of the decode/eval data. This is used by
       the Transformer auto-regressive decoding on a Cloud TPU to minimize
       the amount of required data padding.</dd>
    
     <dt><code>padded_decode</code></dt>
     <dd>Specifies whether the auto-regressive decoding runs with input data
       padded to the decode_max_length. Tor TPU/XLA-GPU runs, this flag must
       be set due to the static shape requirement.</dd>
    
     <dt><code>distribution_strategy</code></dt>
     <dd>To train the ResNet model on a Cloud TPU, set <code>distribution_strategy</code>
       to <code>tpu</code>.</dd>
    </dl>
    

Standardmäßig wird das Modell alle 2000 Schritte ausgewertet. Zum Trainieren einer Konvergenz müssen Sie train_steps auf 200.000 ändern. Sie können die Anzahl der Trainingsschritte erhöhen oder angeben, wie oft Bewertungen ausgeführt werden sollen, indem Sie die folgenden Parameter festlegen:

  • --train_steps: Legt die Gesamtzahl der auszuführenden Trainingsschritte fest.
  • --steps_between_evals: Anzahl der Trainingsschritte, die zwischen den Bewertungen ausgeführt werden sollen.

Das Training und die Bewertung auf einer v3-32-Cloud TPU dauern etwa sieben Minuten. Wenn das Training und die Bewertung abgeschlossen sind, werden Nachrichten wie diese angezeigt:

I0415 00:28:33.108577 140097002981184 transformer_main.py:311] Train Step: 2000/2000 / loss = 5.139615058898926
I0415 00:28:33.108953 140097002981184 keras_utils.py:148] TimeHistory: 120.39 seconds, 102065.86 examples/second between steps 0 and 2000
.
.
.
I0415 00:32:01.785520 140097002981184 transformer_main.py:116] Bleu score (uncased): 0.8316259831190109
I0415 00:32:01.786150 140097002981184 transformer_main.py:117] Bleu score (cased): 0.7945530116558075

Dieses Trainingsskript wird für 2.000 Schritte trainiert und alle 2.000 Schritte ausgewertet. Dieses spezielle Training und diese Bewertung dauern auf einem v3-32-Cloud TPU-Pod etwa acht Minuten. Wenn das Training und die Bewertung abgeschlossen sind, wird eine Meldung wie die folgende angezeigt:

INFO:tensorflow:Writing to file /tmp/tmpdmlanxcf
I0218 21:09:19.100718 140509661046592 translate.py:184] Writing to file /tmp/tmpdmlanxcf
I0218 21:09:28.043537 140509661046592 transformer_main.py:118] Bleu score (uncased): 1.799112930893898
I0218 21:09:28.043911 140509661046592 transformer_main.py:119] Bleu score (cased): 1.730366237461567

Zum Trainieren einer Konvergenz müssen Sie train_steps auf 200.000 ändern. Sie können die Anzahl der Trainingsschritte erhöhen oder angeben, wie oft Bewertungen ausgeführt werden sollen, indem Sie die folgenden Parameter festlegen:

  • --train_steps: Legt die Gesamtzahl der auszuführenden Trainingsschritte fest.
  • --steps_between_evals: Anzahl der Trainingsschritte, die zwischen den Bewertungen ausgeführt werden sollen.

Wenn das Training und die Bewertung abgeschlossen sind, wird eine Meldung wie die folgende angezeigt:

0509 00:27:59.984464 140553148962624 translate.py:184] Writing to file /tmp/tmp_rk3m8jp
I0509 00:28:11.189308 140553148962624 transformer_main.py:119] Bleu score (uncased): 1.3239131309092045
I0509 00:28:11.189623 140553148962624 transformer_main.py:120] Bleu score (cased): 1.2855342589318752

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. Löschen Sie Ihre Cloud TPU- und Compute Engine-Ressourcen. Der Befehl zum Löschen Ihrer Ressourcen hängt davon ab, ob Sie TPU-VMs oder TPU-Knoten verwenden. Weitere Informationen finden Sie unter Systemarchitektur.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm delete transformer-tutorial \
    --zone=europe-west4-a
    

    TPU-Knoten

    $ gcloud compute tpus execution-groups delete transformer-tutorial \
    --zone=europe-west4-a
    
  3. Führen Sie gsutil wie angegeben aus und ersetzen Sie dabei bucket-name durch den Namen des Cloud Storage-Buckets, den Sie für diese Anleitung erstellt haben:

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

Weitere Informationen

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. Wenn Sie ein Modell für Inferenz verwenden möchten, können Sie die Daten mit einem öffentlich verfügbaren Dataset oder Ihrem eigenen Dataset trainieren. TensorFlow-Modelle, die auf Cloud TPUs trainiert werden, benötigen im Allgemeinen Datasets im Format TFRecord.

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.