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, mit dem Sie eine TPU erstellen,
gcloud compute tpus tpu-vm create
richtet Standardberechtigungen für die Cloud TPU-Dienstkonto, 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 Ihre 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 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 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 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)$ 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 v3-8-TPU sollte das Trainingsskript nach etwa 5 Minuten vollständig, und es werden Ergebnisse wie die folgenden angezeigt:
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 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:$ 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 verwenden, können Sie die Daten auf einem öffentlich verfügbaren oder Ihrem eigenen Dataset. Auf Cloud TPUs trainierte TensorFlow-Modelle müssen Datasets im Allgemeinen TFRecord-Format.
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 sich selbst zu zeigen. 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. Sie finden Informationen zu allgemeinen Hyperparametern Von TPU unterstützte Modelle auf GitHub Informationen zu modellspezifischen Hyperparametern finden Sie in der Quelle Code für die einzelnen Modell. Weitere Informationen zur Abstimmung von Hyperparametern finden Sie unter Übersicht über Hyperparameter-Abstimmung und Feinabstimmung Hyperparametern.
Inferenz
Sobald Sie Ihr Modell trainiert haben, können Sie es für die Inferenz (auch als Vorhersage). 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 Informationen zur Inferenz in Cloud TPU v5e finden Sie unter Cloud TPU v5e-Inferenz .