BERT-Feinabstimmung mit Cloud TPU: Satz- und Satzpaar-Klassifizierungsaufgaben

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
  • BERT-Repository und andere erforderliche Dateien klonen
  • Trainingsjob ausführen
  • Ausgabeergebnisse überprüfen

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Sie können mithilfe des Preisrechners die Kosten für Ihre voraussichtliche Nutzung kalkulieren. 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 das gcloud-Befehlszeilentool für das Projekt, in dem Sie eine 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 auf Authorize unten auf der Seite, um es gcloud zu erlauben, GCP API-Aufrufe mit Ihren Anmeldedaten durchzuführen.

  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:

    gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 -b on gs://bucket-name
    

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, und die Trainingsergebnisse.

    Damit die Cloud TPU im Storage-Bucket lesen und schreiben kann, benötigt das Dienstkonto für Ihr Projekt dafür Lese-/Schreib- oder Administratorberechtigungen. Weitere Informationen zum Aufrufen und Festlegen dieser Berechtigungen finden Sie im Abschnitt zu Storage-Buckets.

  6. Starten Sie mit dem Befehl gcloud compute tpus execution-groups eine Compute Engine-VM und eine Cloud TPU.

    $ gcloud compute tpus execution-groups create \
     --name=bert-tutorial \
     --zone=us-central1-b \
     --tf-version=1.15.5 \
     --machine-type=n1-standard-8 \
     --accelerator-type=v3-8
    

    Beschreibung der Befehls-Flags

    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, die von gcloud auf der VM installiert wird.
    machine-type
    Der Maschinentyp der zu erstellenden Compute Engine-VM.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.

    Weitere Informationen zum Befehl gcloud finden Sie in der gcloud-Referenz.

  7. Die von Ihnen angegebene Konfiguration wird angezeigt. Geben Sie y zum Bestätigen oder n zum Abbrechen ein.

    Wenn der Befehl gcloud ausgeführt wurde, sollten Sie prüfen, ob die Shell-Eingabeaufforderung von username@project in username@vm-name geändert wurde. Diese Änderung bedeutet, dass Sie jetzt bei Ihrer Compute Engine-VM angemeldet sind.

    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.

  1. Einige Umgebungsvariablen definieren

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export TPU_NAME=bert-tutorial
    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
    (vm)$ export BERT_BASE_DIR=gs://cloud-tpu-checkpoints/bert/uncased_L-12_H-768_A-12
    (vm)$ export GLUE_DIR=$HOME/glue_data
    (vm)$ export TASK_NAME=MRPC
    

BERT-Repository klonen

Sie klonen das BERT-Repository von Ihrer virtuellen Compute Engine-Maschine (VM) aus.

(vm)$ git clone https://github.com/google-research/bert

download_glue_data.py herunterladen

In dieser Anleitung wird die GLUE-Benchmark (General Language Understanding Evaluation) verwendet, um die Leistung des Modells zu bewerten und zu analysieren. Zum Verwenden dieser Benchmark laden Sie das download_glue_data.py-Skript mit dem folgenden git clone-Befehl herunter:

(vm)$ git clone https://gist.github.com/7f702beb69199612a039004f42c9982e.git download_glue_data

GLUE-Daten herunterladen

Führen Sie dann download_glue_data.py auf Ihrer Compute Engine-VM aus.

(vm)$ python3 download_glue_data/download_glue_data.py --data_dir $HOME/glue_data --tasks ${TASK_NAME}

Modell trainieren

Auf der Compute Engine-VM führen Sie den folgenden Befehl aus:

python3 ./bert/run_classifier.py \
--task_name=${TASK_NAME} \
--do_train=true \
--do_eval=true \
--data_dir=${GLUE_DIR}/${TASK_NAME} \
--vocab_file=${BERT_BASE_DIR}/vocab.txt \
--bert_config_file=${BERT_BASE_DIR}/bert_config.json \
--init_checkpoint=${BERT_BASE_DIR}/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=3.0 \
--output_dir=${STORAGE_BUCKET}/${TASK_NAME}-output/ \
--use_tpu=True \
--tpu_name=${TPU_NAME}

Beschreibung der Befehls-Flags

task_name
Name der Aufgabe. In dieser Anleitung verwenden wir die Aufgabe "Microsoft Research Paraphrase Corpus (MSRPC)".
do_train
Modelltraining durchführen.
do_eval
Führen Sie eine Modellbewertung durch.
data_dir
Der Cloud Storage-Pfad, in dem die Trainingsdaten gespeichert werden.
vocab_file
Die BERT-Vokabulardatei.
bert_config_file
Die BERT-Konfigurationsdatei.
init_checkpoint
Der Pfad zur JSON-Datei, die den ersten Prüfpunkt des vortrainierten BERT-Modells enthält.
max_seq_length
Die maximale Länge der Textsequenz. BERT begrenzt die maximale Länge einer tokenisierten Textsequenz auf 512. Sie können jede Sequenzlänge gleich oder unter diesem Wert festlegen.
train_batch_size
Die Größe des Trainingsbatches.
learning_rate
Die Lernrate.
num_train_epochs
Die Anzahl der Epochen zum Trainieren des Modells.
output_dir
Das Ausgabeverzeichnis des Trainingsskripts.
use_tpu
Legen Sie den Wert true fest, um auf einer Cloud TPU zu trainieren.
tpu_name
Der Name der Cloud TPU, die für das Training verwendet werden soll.

Ergebnisse prüfen

Das Training dauert weniger als 5 Minuten. Nach Abschluss des Trainings sollten Sie in etwa folgende Ergebnisse erhalten:

I1109 21:55:34.984220 139985090225920 run_classifier.py:923] ***** Eval results *****
INFO:tensorflow:  eval_accuracy = 0.8455882
I1109 21:55:34.984345 139985090225920 run_classifier.py:925]   eval_accuracy = 0.8455882
INFO:tensorflow:  eval_loss = 0.77791333
I1109 21:55:34.984572 139985090225920 run_classifier.py:925]   eval_loss = 0.77791333
INFO:tensorflow:  global_step = 343
I1109 21:55:34.984693 139985090225920 run_classifier.py:925]   global_step = 343
INFO:tensorflow:  loss = 0.88203496
I1109 21:55:34.984774 139985090225920 run_classifier.py:925]   loss = 0.88203496

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.

  1. Trennen Sie die Verbindung zur Compute Engine-VM:

    (vm)$ exit
    

    Die Eingabeaufforderung sollte nun user@projectname lauten und angeben, dass Sie sich in Cloud Shell befinden.

  2. Verwenden Sie in Cloud Shell den unten gezeigten gcloud compute tpus execution-groups-Befehl, um Ihre Compute Engine-VM und die Cloud TPU zu löschen.

    $ gcloud compute tpus execution-groups delete bert-tutorial \
      --zone=us-central1-b
    
  3. 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=us-central1-b
    
       NAME             STATUS
    
  4. 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 dieser Anleitung haben Sie das BERT-Modell mithilfe eines Beispiel-Datasets trainiert. Die Ergebnisse dieses Trainings sind in den meisten Fällen nicht für die Inferenz verwendbar. Wenn Sie ein Modell für die Inferenz verwenden möchten, können Sie die Daten in einem öffentlich verfügbaren Dataset oder in Ihrem eigenen Dataset trainieren. Für Modelle, die auf Cloud TPUs trainiert wurden, müssen Datasets 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 TFRecords-Format konvertieren. Weitere Informationen finden Sie unter TFRecord und tf.Example

Hyperparameter-Abstimmung

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.