Wenn Sie mit Cloud TPU nicht vertraut sind, lesen Sie die TPU-Startleitfaden.
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 ein Token nach dem anderen, wobei die Encoder-Ausgabe und die vorherigen Decoder-Ausgabe-Tokens als Eingaben.
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.
Ziele
- 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 diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Compute Engine
- Cloud TPU
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
Bevor Sie mit dieser Anleitung beginnen, prüfen Sie, ob Ihr Google Cloud-Projekt ordnungsgemäß eingerichtet ist.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
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.
Mit einem einzelnen Cloud TPU-Gerät trainieren
Dieser Abschnitt enthält Informationen zum Einrichten eines Cloud Storage-Bucket und eine TPU-VM für das Training auf einem einzelnen Gerät.
Öffnen Sie ein Cloud Shell-Fenster.
Erstellen Sie eine Umgebungsvariable für Ihre Projekt-ID.
export PROJECT_ID=project-id
Konfigurieren Sie die Google Cloud CLI für die Verwendung Ihres Google Cloud-Projekts, 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 unten auf der Seite aufAuthorize
, damitgcloud
Google Cloud API-Aufrufe mit Ihren Anmeldedaten durchführen kann.Erstellen Sie ein Dienstkonto für das Cloud TPU-Projekt.
Dienstkonten ermöglichen dem Cloud TPU-Dienst den Zugriff auf andere Google Cloud-Dienste Dienstleistungen.
$ 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
Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket:
$ gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central2
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.
Transformer-Modell auf einer einzelnen Cloud TPU trainieren
Starten Sie mit dem Befehl
gcloud
eine Cloud TPU-VM.$ gcloud compute tpus tpu-vm create transformer-tutorial \ --zone=us-central2-b \ --accelerator-type=v4-8 \ --version=tpu-vm-tf-2.17.0-pjrt
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 den unterstützten Beschleunigertypen für jede TPU-Version finden Sie unter TPU-Versionen.
version
- Die Softwareversion von Cloud TPU.
Stellen Sie eine SSH-Verbindung zur TPU-VM her. Wenn Sie mit der VM verbunden sind, ändert sich die Shell-Eingabeaufforderung von
username@projectname
inusername@vm-name
:gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
Exportieren Sie Umgebungsvariablen.
(vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export SENTENCEPIECE_MODEL=sentencepiece (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export PARAM_SET=big (vm)$ export TPU_NAME=local (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET} (vm)$ export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
Wenn Sie beim Erstellen der TPU den Parameter
--version
auf eine Version festlegen, die mit-pjrt
, legen Sie die folgenden Umgebungsvariablen fest, um die PJRT-Laufzeit zu aktivieren:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
Installieren Sie TensorFlow-Anforderungen.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Dataset herunterladen und vorverarbeiten
(vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)" (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
Dataset in den Cloud Storage-Bucket kopieren
(vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET} (vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET} (vm)$ gcloud storage cp tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate --recursive
Rufen Sie das Trainingsverzeichnis auf.
(vm)$ cd /usr/share/tpu/models/
Trainingsskript ausführen
(vm)$ python3 official/nlp/train.py \ --tpu=${TPU_NAME} \ --experiment=wmt_transformer/large \ --mode=train_and_eval \ --model_dir=${MODEL_DIR} \ --params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"
Beschreibung der Befehls-Flags
tpu
- Der Name der Cloud TPU. Dieser wird durch Angabe der Umgebungsvariable (
TPU_NAME
) festgelegt. experiment
- Das Modell, das trainiert werden soll.
mode
- Der Modus, in dem das Script ausgeführt werden soll.
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.
params_override
- Legen Sie Modellparameter fest.
Standardmäßig erfolgt eine Bewertung des Modells nach 10.000 Schritten. 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.train_steps
: Die Gesamtzahl der auszuführenden Trainingsschritte.trainer.validation_interval
: Die Anzahl der Trainingsschritte, die zwischen den Bewertungen ausgeführt werden sollen.
Training und Bewertung dauern auf einem v4-8-Gerät etwa 20 Minuten Cloud TPU Wenn das Training und die Bewertung abgeschlossen sind, wird eine Meldung wie die folgende angezeigt:
I0208 20:57:19.309512 140039467895872 controller.py:310] eval | step: 10000 | eval time: 69.2 sec | output: {'bleu_score': 19.204771518707275, 'sacrebleu_score': 18.307039308307356, 'validation_loss': 2.0654342} eval | step: 10000 | eval time: 69.2 sec | output: {'bleu_score': 19.204771518707275, 'sacrebleu_score': 18.307039308307356, 'validation_loss': 2.0654342}
Sie haben jetzt das Einzelgerät-Training abgeschlossen. Gehen Sie folgendermaßen vor, um die Ressourcen des TPU-Einzelgeräts zu löschen.
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.Löschen Sie die TPU-Ressource.
$ gcloud compute tpus tpu-vm delete transformer-tutorial \ --zone=us-central2-b
Beschreibung der Befehls-Flags
zone
- Die Zone wo sich Ihre Cloud TPU befand.
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
Wenn Sie Ihr Modell auf Cloud TPU-Pods trainieren möchten, müssen Sie möglicherweise einige Änderungen an Ihrem Trainingsskript vornehmen. Weitere Informationen finden Sie unter Auf TPU-Pods trainieren.
TPU-Pod-Training
Öffnen Sie ein Cloud Shell-Fenster.
Erstellen Sie eine Variable für Ihre Projekt-ID.
export PROJECT_ID=project-id
Konfigurieren Sie die Google Cloud CLI für die Verwendung des Projekts, in dem Sie ein Cloud TPU
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 aufAuthorize
, damitgcloud
API-Aufrufe mit Ihren Anmeldedaten durchführen kann.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
Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket oder verwenden Sie einen Bucket, den Sie zuvor für Ihr Projekt erstellt haben:
gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central1
Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, sowie die Trainingsergebnisse. Mit dem Befehl
gcloud
, der in dieser Anleitung verwendet wird, Standardberechtigungen für das Cloud TPU-Dienstkonto, das Sie im vorherigen Schritt. Weitere Informationen zu detaillierteren Berechtigungen finden Sie unter Berechtigungen auf Zugriffsebenen.
TPU-VM-Ressourcen starten
Starten Sie einen TPU-VM-Pod mit dem
gcloud
-Befehl. In dieser Anleitung wird ein v4-32-Pod angegeben. Weitere Pod-Optionen finden Sie auf der Seite TPU-TypenVerfügbare TPU-Typen.$ gcloud compute tpus tpu-vm create transformer-tutorial \ --zone=us-central2-b \ --accelerator-type=v3-32 \ --version=tpu-vm-tf-2.17.0-pod-pjrt
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.
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
inusername@vm-name
:gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
Installieren Sie TensorFlow-Anforderungen.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Pod-Training einrichten und starten
Exportieren Sie Cloud TPU-Einrichtungsvariablen:
(vm)$ export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH" (vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export SENTENCEPIECE_MODEL=sentencepiece (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export TPU_NAME=transformer-tutorial (vm)$ export PARAM_SET=big (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET} (vm)$ export TPU_LOAD_LIBRARY=0
Dataset herunterladen
(vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)" (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
Dataset in Cloud Storage-Bucket kopieren
(vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET} (vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET} (vm)$ gcloud storage cp tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate --recursive
Wechseln Sie in das Trainingsverzeichnis:
(vm)$ cd /usr/share/tpu/models/
Führen Sie das Trainingsskript aus:
(vm)$ python3 official/nlp/train.py \ --tpu=${TPU_NAME} \ --experiment=wmt_transformer/large \ --mode=train_and_eval \ --model_dir=${MODEL_DIR} \ --params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"
Beschreibung der Befehls-Flags
tpu
- Der Name der Cloud TPU. Dieser wird durch Angabe der Umgebungsvariable (
TPU_NAME
) festgelegt. experiment
- Das Modell, das trainiert werden soll.
mode
- Der Modus, in dem das Script ausgeführt werden soll.
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.
params_override
- Legen Sie die Modellparameter fest.
Standardmäßig erfolgt eine Bewertung des Modells nach 10.000 Schritten. Um zu trainieren,
ändern Sie train_steps
in 200.000. Sie können die Anzahl der Trainingsschritte erhöhen oder angeben, wie oft Bewertungen ausgeführt werden sollen, indem Sie die folgenden Parameter festlegen:
trainer.train_steps
: Legt die Gesamtzahl der auszuführenden Trainingsschritte fest.trainer.validation_interval
: Legt die Anzahl der Trainingsschritte fest, die zwischen den Bewertungen ausgeführt werden sollen.
Training und Bewertung dauern auf einem v4-32-Gerät etwa 14 Minuten Cloud TPU Wenn das Training und die Bewertung abgeschlossen sind, werden Nachrichten wie diese angezeigt:
I0209 22:19:49.143219 139751309618240 controller.py:310] eval | step: 10000 | eval time: 73.6 sec | output: {'bleu_score': 19.401752948760986, 'sacrebleu_score': 18.442741330886378, 'validation_loss': 2.0558002} eval | step: 10000 | eval time: 73.6 sec | output: {'bleu_score': 19.401752948760986, 'sacrebleu_score': 18.442741330886378, 'validation_loss': 2.0558002}
Dieses Trainingsskript wird für 20.000 Schritte trainiert und die Bewertung wird alle 2.000 Schritte ausgeführt. 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.
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.Löschen Sie Ihre Cloud TPU- und Compute Engine-Ressourcen.
$ gcloud compute tpus tpu-vm delete transformer-tutorial \ --zone=us-central2-b
Führen Sie die gcloud CLI wie gezeigt aus und ersetzen Sie bucket-name durch Name des Cloud Storage-Bucket, den Sie für diese Anleitung erstellt haben:
$ 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. 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 TensorFlow-Modelle, die auf Cloud TPUs trainiert werden, müssen Datasets im Allgemeinen das Format TFRecord haben.
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 für sich 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. 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 und Hyperparameter abstimmen.
Inferenz
Sobald Ihr Modell trainiert ist, können Sie es für Inferenz (auch als Vorhersage bezeichnet) verwenden. 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 zur Inferenz auf Cloud TPU v5e finden Sie unter Einführung in die Inferenz mit Cloud TPU v5e.