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
Ziele
- 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 für die Verwendung des Projekts, in dem Sie erstellen möchten Cloud TPU
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:
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 compute tpus tpu-vm create
, mit dem Sie eine TPU erstellen, werden Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie weitere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.Der Bucket-Speicherort muss sich in derselben Region wie die TPU (VM) befinden.
Starten Sie eine TPU-VM mit
gcloud
. Weitere Informationen finden Sie in der gcloud-Referenz$ gcloud compute tpus tpu-vm create bert-tutorial \ --zone=us-central1-b \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.17.0-se
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 Cloud TPU-Softwareversion.
Stellen Sie über SSH eine Verbindung zur TPU-VM-Instanz her. Wenn Sie mit der VM verbunden sind, Ihre Shell-Eingabeaufforderung ändert sich von
username@projectname
inusername@vm-name
:gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b
Erstellen Sie eine Umgebungsvariable für den TPU-Namen.
(vm)$ export TPU_NAME=local
Dataset vorbereiten
Definieren Sie den Speicher-Bucket, der zum Speichern des Modells und des Datensatzes 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)$ gcloud storage cp uncased_L-12_H-768_A-12 ${STORAGE_BUCKET} --recursive
Modell trainieren
Definieren Sie mehrere Parameterwerte, die erforderlich sind, wenn Sie Trainieren und bewerten Sie das Modell:
(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.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Legen Sie die Umgebungsvariable
PYTHONPATH
fest.(vm)$ export PYTHONPATH=/usr/share/tpu/models
Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:
(vm)$ cd /usr/share/tpu/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
- Eine von
train
,eval
,train_and_eval
, oderpredict
model_dir
- Der Cloud Storage-Pfad, unter dem Prüfpunkte und Zusammenfassungen gespeichert werden während des Modelltrainings. Sie können einen vorhandenen Ordner wiederverwenden, um ihn zuvor zu laden erzeugte Prüfpunkte und speichern zusätzliche Prüfpunkte, Die vorherigen Prüfpunkte wurden mit einer Cloud TPU der und TensorFlow-Version haben.
Das Skript wird für 2.000 Schritte trainiert und anschließend 307 Bewertungsschritte ausgeführt. Auf einer TPU v3-8 sollte das Trainingsskript nach etwa 5 Minuten abgeschlossen sein und Ergebnisse wie die folgenden 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.
$ gcloud compute tpus tpu-vm delete bert-tutorial \ --zone=us-central1-b
Prüfen Sie, ob die Ressourcen gelöscht wurden. Führen Sie dazu
gcloud compute tpus tpu-vm list
aus. Der Löschvorgang kann einige Minuten dauern. Die Ausgabe des folgenden Befehls sollte keine der in dieser Anleitung erstellten Ressourcen enthalten:$ gcloud compute tpus tpu-vm list --zone=us-central1-b
Löschen Sie den Cloud Storage-Bucket mit der gcloud CLI, wie dargestellt im folgenden Beispiel. Ersetzen Sie bucket-name durch den Namen Ihres Cloud Storage-Buckets.
$ 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. Bis ein Modell für die Inferenz nutzen, können Sie die Daten anhand eines öffentlich verfügbaren oder Ihrem eigenen Dataset. Für TensorFlow-Modelle, die auf Cloud TPUs trainiert werden, müssen Datasets im Allgemeinen 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 TFRecord-Format konvertieren. 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 in der Quelle Code für die einzelnen modellieren. 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. Mit dem Cloud TPU-Inferenzkonverter können Sie ein TensorFlow-Modell für die Inferenz auf Cloud TPU v5e vorbereiten und optimieren. Weitere Informationen zur Inferenz auf Cloud TPU v5e finden Sie unter Einführung in die Inferenz mit Cloud TPU v5e.