HuggingFace GPT2 auf Cloud TPU (TF 2.x) trainieren


Wenn Sie mit Cloud TPU nicht vertraut sind, sollten Sie die Kurzanleitung dazu, wie Sie eine TPU-VM erstellen.

In dieser Anleitung erfahren Sie, wie Sie das HuggingFace GPT2-Modell in Cloud TPU trainieren.

Lernziele

  • Cloud TPU erstellen
  • Abhängigkeiten installieren
  • Trainingsjob ausführen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

  • Compute Engine
  • Cloud TPU

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

Bevor Sie mit dieser Anleitung beginnen, prüfen Sie, ob Ihr Google Cloud-Projekt ordnungsgemäß eingerichtet ist.

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. In dieser Anleitung werden kostenpflichtige Komponenten der Google Cloud verwendet. Rufen Sie die Seite mit den Cloud TPU-Preisen auf, um Ihre Kosten abzuschätzen. Denken Sie daran, nicht mehr benötigte Ressourcen zu bereinigen, um unnötige Kosten zu vermeiden.

HuggingFace GPT2 mit Cloud TPUs trainieren

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Cloud Shell öffnen

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

    export PROJECT_ID=your-project-id
    
  3. Google Cloud CLI für die Verwendung des Google Cloud-Projekts konfigurieren wo 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, Die Seite „Authorize Cloud Shell“ wird angezeigt. Klicken Sie im MenüAuthorize unten auf der Seite, damit gcloud Google Cloud API-Aufrufe mit Ihre Google Cloud-Anmeldedaten.

  4. Erstellen Sie ein Dienstkonto für das Cloud TPU-Projekt.

    Dienstkonten ermöglichen dem Cloud TPU-Dienst den Zugriff auf andere Google Cloud-Dienste Dienstleistungen.

    $ 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
    

Cloud TPU erstellen

  1. Erstellen Sie mit dem Befehl gcloud eine Cloud TPU-VM. Mit dem folgenden Befehl erstellt eine v4-8-TPU. Sie können einen TPU-PodSlice auch erstellen, indem Sie die Das Flag --accelerator-type in einen Pod-Slice-Typ, z. B. v4-32.

    $ gcloud compute tpus tpu-vm create hf-gpt2 \
      --zone=us-central2-b \
      --accelerator-type=v4-8 \
      --version=tpu-vm-tf-2.17.0-pjrt
    

    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.
  2. Stellen Sie über SSH eine Verbindung zur TPU-VM her. Wenn Sie verbunden sind an die VM ändert sich Ihre Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    gcloud compute tpus tpu-vm ssh hf-gpt2 --zone=us-central2-b
    

Abhängigkeiten installieren

  1. Klonen Sie das HuggingFace Transformers-Repository:

    (vm)$ cd /tmp
    (vm)$ git clone https://github.com/huggingface/transformers.git
    (vm)$ cd transformers
    
  2. Installieren Sie die Abhängigkeiten:

    (vm)$ pip install .
    (vm)$ pip install -r examples/tensorflow/_tests_requirements.txt
    (vm)$ cd /tmp/transformers/examples/tensorflow/language-modeling
    (vm)$ pip install -r requirements.txt
    
  3. Erstellen Sie ein temporäres Verzeichnis:

    (vm)$ mkdir /tmp/gpt2-wikitext
    
  4. Wenn Sie beim Erstellen der TPU den Parameter --version auf eine Version festlegen, die mit -pjrt, legen Sie die folgenden Umgebungsvariablen fest, um die PJRT-Laufzeit zu aktivieren:

      (vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true
      (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
    

Trainingsskript ausführen

(vm)$ python3 run_clm.py \
  --model_name_or_path distilgpt2 \
  --max_train_samples 1000 \
  --max_eval_samples 100 \
  --num_train_epochs 1 \
  --output_dir /tmp/gpt2-wikitext \
  --dataset_name wikitext \
  --dataset_config_name wikitext-103-raw-v1

Beschreibung der Befehls-Flags

model_name_or_path
Der Name des zu trainierenden Modells.
max_train_samples
Die maximale Anzahl von Stichproben für das Training.
max_eval_samples
Die maximale Anzahl von Stichproben, die für die Bewertung verwendet werden sollen.
num_train_epochs
Die Anzahl der Epochen zum Trainieren des Modells.
output_dir
Das Ausgabeverzeichnis für das Trainingsskript.
dataset_name
Der Name des Datasets, das verwendet werden soll.
dataset_config_name
Der Name der Dataset-Konfiguration

Nach Abschluss des Trainings wird eine Meldung wie diese angezeigt:

  125/125 [============================] - ETA: 0s - loss: 3.61762023-07-07 21:38:17.902850: W tensorflow/core/framework/dataset.cc:956] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations.
  125/125 [============================] - 763s 6s/step - loss: 3.6176 - val_loss: 3.4233
  Configuration saved in /tmp/gpt2-wikitext/config.json
  Configuration saved in /tmp/gpt2-wikitext/generation_config.json
  Model weights saved in /tmp/gpt2-wikitext/tf_model.h5
  D0707 21:38:45.640973681   12027 init.cc:191]                          grpc_shutdown starts clean-up now
  

Bereinigen

  1. Trennen Sie die Verbindung zur TPU-VM-Instanz:

    (vm)$ exit
    

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

  2. Löschen Sie die TPU-Ressource.

    $ gcloud compute tpus tpu-vm delete hf-gpt2 \
    --zone=us-central2-b
    

Nächste Schritte

Versuchen Sie es mit einem der anderen unterstützten Referenzmodelle.