In dieser Anleitung wird beschrieben, wie Sie das BERT-Modell (Bidirectional Encoder Representations from Transformers) in Cloud TPU trainieren.
BERT ist eine Methode zur Sprachdarstellung vor dem Training. Mit "vor dem Training" ist gemeint, dass BERT zuerst mit einer großen Textquelle wie Wikipedia trainiert wird. Anschließend können Sie die Trainingsergebnisse für andere Aufgaben zur natürlichen Sprachverarbeitung (Natural Language Processing, NLP) verwenden, z. B. Beantworten von Fragen und Sentimentanalyse. Mit BERT und Cloud TPU können Sie in etwa 30 Minuten eine Vielzahl von NLP-Modellen trainieren.
Weitere Informationen zu BERT finden Sie in den folgenden Ressourcen:
- BERT als Open-Source-Modell: Hochmodernes Training im Voraus für die natürliche Sprachverarbeitung
- BERT: Training vertiefter bidirektionaler Transformer zum Sprachverständnis im Voraus
Lernziele
- Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
- Trainingsjob 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.
Hinweise
Dieser Abschnitt enthält Informationen zum Einrichten eines Cloud Storage-Buckets 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 CLI so, dass das Projekt verwendet wird, in dem Sie eine Cloud TPU erstellen möchten.
gcloud config set project ${PROJECT_ID}
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 us-central1 gs://bucket-name
Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, und die Trainingsergebnisse. Mit dem Befehl, mit dem Sie eine TPU erstellen (
gcloud compute tpus execution-groups create
für die TPU-Knotenarchitektur odergcloud compute tpus tpu-vm create
für die TPU-VM-Architektur), werden Standardberechtigungen für das Cloud TPU-Dienstkonto festgelegt, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie detailliertere Berechtigungen benötigen, lesen Sie die Berechtigungen auf Zugriffsebene.Der Bucket-Standort muss sich in derselben Region wie Ihre Compute Engine (VM) und Ihr Cloud TPU-Knoten befinden.
Starten Sie mit dem Befehl
gcloud
eine Compute Engine-VM und eine Cloud TPU. Der verwendete Befehl hängt davon ab, ob Sie eine TPU-VM oder einen TPU-Knoten verwenden. Weitere Informationen zu beiden VM-Architekturen finden Sie unter Systemarchitektur. Weitere Informationen zumgcloud
-Befehl finden Sie in der gcloud-Referenz.TPU-VM
$ gcloud compute tpus tpu-vm create bert-tutorial \ --zone=us-central1-b \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.16.1-se
Beschreibung der Befehls-Flags
zone
- Die Zone, in der Sie Ihre 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 die einzelnen TPU-Versionen finden Sie unter TPU-Versionen.
version
- Die Cloud TPU-Softwareversion.
TPU-Knoten
$ gcloud compute tpus execution-groups create \ --name=bert-tutorial \ --zone=us-central1-b \ --tf-version=2.12.0 \ --machine-type=n1-standard-1 \ --accelerator-type=v3-8
Beschreibung der Befehls-Flags
name
- Der Name der zu erstellenden Cloud TPU.
zone
- Die Zone, in der Sie Ihre Cloud TPU erstellen möchten.
tf-version
- Die TensorFlow-Version
ctpu
wird auf der VM installiert. machine-type
- Der Maschinentyp der Compute Engine-VM, die erstellt werden soll.
accelerator type
- Der Typ der zu erstellenden Cloud TPU.
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 vonusername@projectname
inusername@vm-name
:TPU-VM
gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b
TPU-Knoten
gcloud compute ssh bert-tutorial --zone=us-central1-b
Führen Sie im weiteren Verlauf dieser Anleitung jeden Befehl, der mit
(vm)$
beginnt, in Ihrem VM-Sitzungsfenster aus.Erstellen Sie eine Umgebungsvariable für den TPU-Namen.
TPU-VM
(vm)$ export TPU_NAME=local
TPU-Knoten
(vm)$ export TPU_NAME=bert-tutorial
Dataset vorbereiten
Definieren Sie den Storage-Bucket, der zum Speichern des Modells und des Datasets erforderlich ist:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
Kopieren Sie die vortrainierten Prüfpunkt- und Vokabulardateien in Ihren Storage-Bucket:
(vm)$ curl https://storage.googleapis.com/tf_model_garden/nlp/bert/v3/uncased_L-12_H-768_A-12.tar.gz -o uncased_L-12_H-768_A-12.tar.gz (vm)$ mkdir -p uncased_L-12_H-768_A-12 (vm)$ tar -xvf uncased_L-12_H-768_A-12.tar.gz (vm)$ gsutil -m cp -R uncased_L-12_H-768_A-12 ${STORAGE_BUCKET}
Modell trainieren
Definieren Sie mehrere Parameterwerte, die zum Trainieren und Bewerten des Modells erforderlich sind:
(vm)$ export INIT_CHECKPOINT=${STORAGE_BUCKET}/uncased_L-12_H-768_A-12/bert_model.ckpt (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export VOCAB_FILE=${STORAGE_BUCKET}/uncased_L-12_H-768_A-12/vocab.txt (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/bert-output (vm)$ export TASK=mnli
Installieren Sie TensorFlow-Anforderungen.
Der verwendete Befehl hängt davon ab, ob Sie eine TPU-VM oder einen TPU-Knoten verwenden.
TPU-VM
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
TPU-Knoten
(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt (vm)$ pip3 install tensorflow-datasets==4.6.0
Legen Sie die Umgebungsvariable
PYTHONPATH
fest.TPU-VM
(vm)$ export PYTHONPATH=/usr/share/tpu/models
TPU-Knoten
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:
TPU-VM
(vm)$ cd /usr/share/tpu/models
TPU-Knoten
(vm)$ cd /usr/share/models
Führen Sie das Trainingsskript aus:
(vm)$ python3 official/nlp/train.py \ --tpu=${TPU_NAME} \ --experiment=bert/sentence_prediction_text \ --mode=train_and_eval \ --model_dir=${MODEL_DIR} \ --config_file=official/nlp/configs/experiments/glue_mnli_text.yaml \ --params_override="runtime.distribution_strategy=tpu, task.init_checkpoint=${INIT_CHECKPOINT}, task.train_data.tfds_data_dir=${TFDS_DIR}, task.train_data.vocab_file=${VOCAB_FILE}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.vocab_file=${VOCAB_FILE}, trainer.train_steps=2000"
Beschreibung der Befehls-Flags
tpu
- Der Name der Cloud TPU, die für das Training verwendet werden soll.
mode
- Entweder
train
,eval
,train_and_eval
oderpredict
. model_dir
- Der Cloud Storage-Pfad, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner wiederverwenden, um zuvor generierte Prüfpunkte zu laden und zusätzliche Prüfpunkte zu speichern, sofern die vorherigen Prüfpunkte mit einer Cloud TPU derselben Größe und TensorFlow-Version erstellt wurden.
Das Skript führt 2.000 Trainingsschritte aus und führt dann 307 Bewertungsschritte aus. Auf einer v3-8-TPU sollte das Trainingsskript nach etwa 5 Minuten abgeschlossen sein und Ergebnisse wie diese anzeigen:
I0719 00:47:52.683979 140297079573568 controller.py:457] train | step: 2000 | steps/sec: 26.3 | output: {'cls_accuracy': 0.7249375, 'learning_rate': 1.4670059e-05, 'training_loss': 0.6740678} train | step: 2000 | steps/sec: 26.3 | output: {'cls_accuracy': 0.7249375, 'learning_rate': 1.4670059e-05, 'training_loss': 0.6740678} I0719 00:47:53.184051 140297079573568 controller.py:277] eval | step: 2000 | running 307 steps of evaluation... eval | step: 2000 | running 307 steps of evaluation...
Bereinigen
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. 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 compute tpus tpu-vm delete bert-tutorial \ --zone=us-central1-b
TPU-Knoten
$ gcloud compute tpus execution-groups delete bert-tutorial \ --zone=us-central1-b
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. Die Ausgabe des folgenden Befehls sollte keine der in dieser Anleitung erstellten Ressourcen enthalten:TPU-VM
$ gcloud compute tpus tpu-vm list --zone=us-central1-b
TPU-Knoten
$ gcloud compute tpus execution-groups list --zone=us-central1-b
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 den Cloud TPU-Anleitungen von TensorFlow wird das Modell in der Regel mithilfe eines Beispiel-Datasets trainiert. Die Ergebnisse dieses Trainings sind nicht für Inferenzen verwendbar. Wenn Sie ein Modell für die Inferenz verwenden möchten, können Sie die Daten mit einem öffentlich verfügbaren Dataset oder Ihrem eigenen Dataset trainieren. Für TensorFlow-Modelle, die auf Cloud TPUs trainiert wurden, müssen im Allgemeinen Datasets im TFRecord-Format erforderlich sein.
Mit dem Beispiel für das Dataset-Konvertierungstool können Sie ein Bildklassifizierungs-Dataset in das TFRecord-Format konvertieren. Wenn Sie kein Bildklassifizierungsmodell verwenden, müssen Sie das Dataset selbst in das TFRecord-Format konvertieren. Weitere Informationen finden Sie unter TFRecord und tf.Example.
Hyperparameter-Feinabstimmung
Sie können die Hyperparameter des Modells abstimmen, um die Leistung des Modells mit Ihrem Dataset zu verbessern. Informationen zu den Hyperparametern, die alle von der TPU unterstützten Modelle gemeinsam sind, finden Sie auf GitHub. Informationen zu modellspezifischen Hyperparametern finden Sie im Quellcode des jeweiligen Modells. Weitere Informationen zur Abstimmung von Hyperparametern finden Sie unter Übersicht über die Abstimmung von Hyperparametern und Hyperparameter abstimmen.
Inferenz
Nachdem Sie Ihr Modell trainiert haben, können Sie es für Inferenzen (auch Vorhersage genannt) verwenden. Mit dem Cloud TPU-Inferenzkonverter-Tool können Sie ein TensorFlow-Modell für die Inferenz in Cloud TPU v5e vorbereiten und optimieren. Weitere Informationen zur Inferenz in Cloud TPU v5e finden Sie unter Einführung in Cloud TPU v5e-Inferenz.