In dieser Anleitung erfahren Sie, wie Sie das Transformer-Modell (von Attention Is All You Need) mit Tensor2Tensor auf einer Cloud TPU trainieren.
Modellbeschreibung
Das Transformer-Modell verwendet Stapel von Self-Attention- und Feed-Forward-Schichten, um sequenzielle Eingaben wie Text zu verarbeiten. Die folgenden Varianten werden unterstützt:
transformer
(nur Decoder) für Einzelsequenzmodelle. Anwendungsbeispiel: Sprachmodellierung.transformer
(Encoder-Decoder) für Sequenz-zu-Sequenz-Modelle. Anwendungsbeispiel: Übersetzung.transformer_encoder
(nur Encoder) führt nur den Encoder für Sequenz-zu-Klasse-Modelle aus. Anwendungsbeispiel: Sentimentklassifizierung.
Der Transformer ist nur eines der Modelle in der Tensor2Tensor-Bibliothek. Tensor2Tensor (T2T) ist eine Bibliothek mit Deep-Learning-Modellen und -Datasets sowie verschiedenen Skripts, mit denen Sie die Modelle trainieren und die Daten herunterladen und vorbereiten können.
Lernziele
- Trainings-Dataset generieren
- Sprachmodell auf einer einzelnen Cloud TPU oder einem Cloud TPU Pod trainieren
- Übersetzungsmodell Englisch-Deutsch auf einer einzelnen Cloud TPU trainieren
- Sentimentklassifikator auf einer einzelnen Cloud TPU trainieren
- Cloud TPU-Ressourcen bereinigen
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.
Hinweis
Wenn Sie in einem TPU Pod-Segment trainieren möchten, lesen Sie bitte Training für TPU-Pods, die die speziellen Überlegungen beim Training in einem Pod-Segment erläutert.
Bevor Sie mit dieser Anleitung beginnen, führen Sie die folgenden Schritte aus, um zu überprüfen, ob Ihr Google Cloud-Projekt richtig eingerichtet ist.
Dieser Abschnitt enthält Informationen zum Einrichten von einem Cloud Storage-Bucket und einer Compute Engine-VM.
Ö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-Befehlszeile für das Projekt, in dem Sie 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 aufAuthorize
unten auf der Seite, damitgcloud
GCP 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:
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 -b on gs://bucket-name
Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, und die Trainingsergebnisse. Das in dieser Anleitung verwendete Tool
gcloud compute tpus execution-groups
richtet Standardberechtigungen für das Cloud TPU-Dienstkonto ein. Wenn Sie weitere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.Der Bucket-Speicherort muss sich in derselben Region wie die virtuelle Maschine (VM) und der TPU-Knoten befinden. VMs und TPU-Knoten befinden sich in bestimmten Zonen, die Untergruppen innerhalb einer Region sind.
Starten Sie mit dem Befehl
gcloud
eine Compute Engine-VM.$ gcloud compute tpus execution-groups create \ --vm-only \ --name=transformer-tutorial \ --zone=europe-west4-a \ --disk-size=300 \ --machine-type=n1-standard-8 \ --tf-version=1.15.5
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
gcloud compute tpus execution-groups
wird auf der VM installiert.
Weitere Informationen zum Befehl
gcloud
finden Sie in der gcloud-Referenz.Die von Ihnen angegebene Konfiguration wird angezeigt. Geben Sie y zum Bestätigen oder n zum Abbrechen ein.
Wenn der Befehl
gcloud compute tpus execution-groups
ausgeführt wurde, sollten Sie prüfen, ob die Shell-Eingabeaufforderung vonusername@projectname
zuusername@vm-name
geändert wurde. Diese Änderung bedeutet, dass Sie jetzt bei Ihrer Compute Engine-VM angemeldet sind.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.
Auf Ihrer Compute Engine-VM:
Erstellen Sie die folgenden Umgebungsvariablen:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data (vm)$ export TMP_DIR=${HOME}/t2t_tmp
Verzeichnis zum Speichern temporärer Dateien erstellen:
(vm)$ mkdir ${TMP_DIR}
Fügen Sie den Pfad zu den Skripts
tensor2tensor
hinzu, die zum Verarbeiten der Modelldaten verwendet werden:(vm)$ export PATH=.local/bin:${PATH}
Trainieren Sie ein Sprachmodell auf einer einzelnen Cloud TPU
Generieren Sie das Trainings-Dataset für das Sprachmodell.
(vm)$ t2t-datagen --problem=languagemodel_lm1b32k_packed \ --data_dir=${DATA_DIR} \ --tmp_dir=${TMP_DIR}
Beschreibung der Befehls-Flags
problem
- Die Bezeichnung des Problems.
data_dir
- Der Cloud Storage-Pfad der Trainingseingabe.
tmp_dir
- Das temporäre Speicherverzeichnis.
Führen Sie den folgenden Befehl aus, um Ihre Cloud TPU-Ressource zu erstellen.
(vm)$ gcloud compute tpus execution-groups create --tpu-only \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --name=transformer-tutorial
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. zone
- Die Zone, in der Sie die Cloud TPU erstellen möchten. Das sollte dieselbe Zone sein, die Sie für die Compute Engine-VM verwendet haben. Beispiel:
europe-west4-a
. tf-version
- Die Version von TensorFlow
ctpu
wird auf der VM installiert. name
- Der Name der zu erstellenden Cloud TPU.
Legen Sie eine Umgebungsvariable für den TPU-Namen fest.
(vm)$ export TPU_NAME=transformer-tutorial
Führen Sie das Trainingsskript aus.
(vm)$ t2t-trainer \ --model=transformer \ --hparams_set=transformer_tpu \ --problem=languagemodel_lm1b32k_packed \ --eval_steps=3 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/language_lm1b32k \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --train_steps=10
Beschreibung der Befehls-Flags
model
- Das Modell, das trainiert werden soll.
hparams_set
- Die Hyperparameter, die während des Trainings verwendet werden sollen.
problem
- Die Bezeichnung des Problems.
eval-steps
- Die Anzahl der Schritte, die ausgewertet werden sollen.
data_dir
- Der Cloud Storage-Pfad, in dem die Trainingsdaten gespeichert werden.
output_dir
- Das Basisausgabeverzeichnis für die Ausführung.
use_tpu
- Setzen Sie den Wert auf „true“, um eine Cloud TPU zu verwenden, andernfalls auf „false“.
cloud_tpu_name
- Der Name der Cloud TPU, die für das Training verwendet werden soll.
train_steps
- Die Anzahl der Trainingsschritte.
Mit dem Befehl oben werden zehn Trainingsschritte und anschließend drei Bewertungsschritte ausgeführt. Die Ausführung dauert ca. fünf Minuten auf einem v3-8-TPU-Knoten. Wenn Sie dieses Modell präziser gestalten möchten, passen Sie das Flag
--train_steps
an, um die Anzahl der Trainingsschritte zu erhöhen. Es empfiehlt sich, das Modell mit mindestens 40.000 Schritten zu trainieren. Das Modell erreicht gewöhnlich nach ca. 250.000 Schritten seine maximale Qualität.Löschen Sie die erstellte Cloud TPU-Ressource.
$ gcloud compute tpus execution-groups delete transformer-tutorial \ --zone=europe-west4-a \ --tpu-only
Trainieren Sie ein Sprachmodell auf einem Cloud TPU Pod
Führen Sie den Befehl
gcloud
mit dem Parameteraccelerator-type
aus, um das Pod-Slice anzugeben, das Sie verwenden möchten. Der folgende Befehl verwendet beispielsweise ein v2-32-Pod-Slice.(vm)$ gcloud compute tpus execution-groups create \ --tpu-only \ --accelerator-type=v2-32 \ --name=transformer-tutorial-pod \ --zone=europe-west4-a \ --tf-version=1.15.5
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
ctpu
wird auf der VM installiert.
Legen Sie eine Umgebungsvariable für den neuen TPU-Namen fest.
(vm)$ export TPU_NAME=transformer-tutorial-pod
Führen Sie das Trainingsskript aus.
(vm)$ t2t-trainer \ --model=transformer \ --hparams_set=transformer_tpu \ --problem=languagemodel_lm1b32k_packed \ --eval_steps=3 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/language_lm1b32k_pod \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --tpu_num_shards=32 \ --schedule=train \ --train_steps=25000
Beschreibung der Befehls-Flags
model
- Das Modell, das trainiert werden soll.
hparams_set
- Die Hyperparameter, die während des Trainings verwendet werden sollen.
problem
- Die Bezeichnung des Problems.
eval-steps
- Die Anzahl der Schritte, die ausgewertet werden sollen.
data_dir
- Der Cloud Storage-Pfad, in dem die Trainingsdaten gespeichert werden.
output_dir
- Das Basisausgabeverzeichnis für die Ausführung.
use_tpu
- Setzen Sie den Wert auf „true“, um eine Cloud TPU zu verwenden, andernfalls auf „false“.
cloud_tpu_name
- Der Name der Cloud TPU, die für das Training verwendet werden soll.
tpu_num_shards
- Die Anzahl der Cloud TPU-Shards. Der Standardwert ist „8“.
schedule
- Die auszuführende Testmethode.
train_steps
- Die Anzahl der Schritte zum Trainieren des Modells.
Mit dem obigen Befehl werden 25.000 Trainingsschritte und anschließend drei Bewertungsschritte ausgeführt. Es dauert ungefähr 30 Minuten, um dieses Training mit einer Cloud TPU v2-32 auszuführen.
Es empfiehlt sich, das Modell mit mindestens 40.000 Schritten zu trainieren. Das Modell erreicht gewöhnlich nach ca. 250.000 Schritten seine maximale Qualität.
Löschen Sie die Cloud TPU-Ressource, die Sie für das Training erstellt haben.
(vm)$ gcloud compute tpus execution-groups delete transformer-tutorial \ --zone=europe-west4-a \ --tpu-only
Übersetzungsmodell Englisch-Deutsch auf einer einzelnen Cloud TPU trainieren
Verwenden Sie das Skript
t2t-datagen
, um die Trainings- und Bewertungsdaten für das Übersetzungsmodell im Cloud Storage-Bucket zu generieren:(vm)$ t2t-datagen \ --problem=translate_ende_wmt32k_packed \ --data_dir=${DATA_DIR} \ --tmp_dir=${TMP_DIR}
Beschreibung der Befehls-Flags
problem
- Die Bezeichnung des Problems.
data_dir
- Der Cloud Storage-Pfad der Trainingseingabe.
tmp_dir
- Das temporäre Speicherverzeichnis.
Führen Sie den folgenden Befehl aus, um Ihre Cloud TPU-Ressource zu erstellen.
(vm)$ gcloud compute tpus execution-groups create --tpu-only \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --name=transformer-tutorial
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. zone
- Die Zone, in der Sie die Cloud TPU erstellen möchten.
tf-version
- Die Version von TensorFlow
gcloud compute tpus execution-groups
wird auf der VM installiert. name
- Der Name der zu erstellenden Cloud TPU.
Legen Sie eine Umgebungsvariable für den neuen TPU-Namen fest.
(vm)$ export TPU_NAME=transformer-tutorial
Führen Sie
t2t-trainer
aus, um das Modell zu trainieren und zu bewerten:(vm)$ t2t-trainer \ --model=transformer \ --hparams_set=transformer_tpu \ --problem=translate_ende_wmt32k_packed \ --eval_steps=3 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/translate_ende \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --train_steps=10
Beschreibung der Befehls-Flags
model
- Das Modell, das trainiert werden soll.
hparams_set
- Die Hyperparameter, die während des Trainings verwendet werden sollen.
problem
- Die Bezeichnung des Problems.
eval-steps
- Die Anzahl der Schritte, die ausgewertet werden sollen.
data_dir
- Der Cloud Storage-Pfad, in dem die Trainingsdaten gespeichert werden.
output_dir
- Das Basisausgabeverzeichnis für die Ausführung.
use_tpu
- Setzen Sie den Wert auf „true“, um eine Cloud TPU zu verwenden, andernfalls auf „false“.
cloud_tpu_name
- Der Name der Cloud TPU, die für das Training verwendet werden soll.
train_steps
- Die Anzahl der Schritte zum Trainieren des Modells.
Mit dem Befehl oben werden zehn Trainingsschritte und anschließend drei Bewertungsschritte ausgeführt. Die Ausführung auf einem v3-8-TPU-Knoten dauert ca. fünf Minuten. Sie können (und sollten) die Anzahl der Trainingsschritte erhöhen, indem Sie das Flag
--train_steps
anpassen. Übersetzungen ergeben in der Regel nach etwa 40.000 Schritten Sinn. Das Modell erreicht gewöhnlich nach ca. 250.000 Schritten seine maximale Qualität.Löschen Sie die Cloud TPU-Ressource, die Sie zum Trainieren des Modells auf einem einzelnen Gerät erstellt haben.
(vm)$ gcloud compute tpus execution-groups delete transformer-tutorial \ --tpu-only \ --zone=europe-west4-a
Trainieren Sie ein Sentimentklassifikatormodell auf einer einzelnen Cloud TPU
Generieren Sie das Dataset für das Sentimentklassifikatormodell.
(vm)$ t2t-datagen --problem=sentiment_imdb \ --data_dir=${DATA_DIR} \ --tmp_dir=${TMP_DIR}
Führen Sie den folgenden Befehl aus, um Ihre Cloud TPU-Ressource zu erstellen.
(vm)$ gcloud compute tpus execution-groups create --tpu-only \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --name=transformer-tutorial
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. zone
- Die Zone, in der Sie die Cloud TPU erstellen möchten.
tf-version
- Die Version von TensorFlow
gcloud compute tpus execution-groups
wird auf der VM installiert. name
- Der Name der zu erstellenden Cloud TPU.
Führen Sie das Trainingsskript aus.
(vm)$ t2t-trainer \ --model=transformer_encoder \ --hparams_set=transformer_tiny_tpu \ --problem=sentiment_imdb \ --eval_steps=1 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/sentiment_classifier \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --train_steps=10
Beschreibung der Befehls-Flags
model
- Das Modell, das trainiert werden soll.
hparams_set
- Die Hyperparameter, die während des Trainings verwendet werden sollen.
problem
- Die Bezeichnung des Problems.
eval-steps
- Die Anzahl der Schritte, die ausgewertet werden sollen.
data_dir
- Der Cloud Storage-Pfad, in dem die Trainingsdaten gespeichert werden.
output_dir
- Das Basisausgabeverzeichnis für die Ausführung.
use_tpu
- Setzen Sie den Wert auf „true“, um eine Cloud TPU zu verwenden, andernfalls auf „false“.
cloud_tpu_name
- Der Name der Cloud TPU, die für das Training verwendet werden soll.
train_steps
- Die Anzahl der Schritte zum Trainieren des Modells.
Mit dem Befehl oben werden zehn Trainingsschritte und anschließend drei Bewertungsschritte ausgeführt. Die Ausführung auf einem v3-8-TPU-Knoten dauert ca. fünf Minuten. Dieses Modell erreicht nach etwa 2.000 Schritten eine Genauigkeit von etwa 85 %.
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.Führen Sie in Cloud Shell den Befehl
gcloud compute tpus execution-groups
mit dem Flag "--zone" aus, das Sie auch beim Einrichten der Cloud TPU angegeben haben, um die Compute Engine-VM und die Cloud TPU zu löschen:$ gcloud compute tpus execution-groups delete transformer-tutorial \ --zone=europe-west4-a
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=europe-west4-a
Sie sollten eine leere Liste der TPUs sehen, die in etwa so aussieht:
NAME STATUS
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
Weitere Informationen
In den Cloud TPU-Anleitungen von TensorFlow wird das Modell in der Regel mithilfe eines Beispiel-Datasets trainiert. Die Ergebnisse dieser Schulung können nicht für Inferenzen verwendet werden. Wenn Sie ein Inferenzmodell 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.
- Weitere Tensor2Tensor-Modelle für TPU erkunden.
- Mit weiteren TPU-Beispielen experimentieren
- TPU-Tools in TensorBoard erkunden