BERT-Feinabstimmung mit Cloud TPU: Satz- und Satzpaar-Klassifizierungsaufgaben (TF 2.x)


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:

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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweise

Dieser Abschnitt enthält Informationen zum Einrichten eines Cloud Storage-Buckets und einer Compute Engine-VM.

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Zu Cloud Shell

  2. Erstellen Sie eine Variable für Ihre Projekt-ID.

    export PROJECT_ID=project-id
  3. 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}
  4. 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
    
  5. 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.

  6. 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.
  7. 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 in username@vm-name:

    gcloud compute tpus tpu-vm ssh bert-tutorial --zone=us-central1-b
  8. Erstellen Sie eine Umgebungsvariable für den TPU-Namen.

    (vm)$ export TPU_NAME=local

Dataset vorbereiten

  1. Definieren Sie den Speicher-Bucket, der zum Speichern des Modells und des Datensatzes erforderlich ist:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
  2. 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

  1. 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
      

  2. Installieren Sie TensorFlow-Anforderungen.

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
  3. Legen Sie die Umgebungsvariable PYTHONPATH fest.

    (vm)$ export PYTHONPATH=/usr/share/tpu/models
  4. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    (vm)$ cd /usr/share/tpu/models
  5. 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, oder predict
    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

  1. 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.

  2. Löschen Sie Ihre Cloud TPU- und Compute Engine-Ressourcen.

    $ gcloud compute tpus tpu-vm delete bert-tutorial \
      --zone=us-central1-b
  3. 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
  4. 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.