ResNet auf Cloud TPU trainieren (TF 2.x)


In dieser Anleitung wird gezeigt, wie Sie das Keras ResNet-Modell mit tf.distribute.TPUStrategy auf einem Cloud TPU-Gerät trainieren.

Wenn Sie nicht mit Cloud TPU vertraut sind, wird dringend empfohlen, die Kurzanleitung für Ihr Framework zu lesen, um zu erfahren, wie Sie eine TPU und eine Compute Engine-VM erstellen.

Ziele

  • Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
  • Bereiten Sie ein Imitaten-Dataset vor, das dem ImageNet-Dataset ähnlich ist.
  • 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

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

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

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

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  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.

Cloud TPU-Training mit Einzelgerät

Dieser Abschnitt enthält Informationen zum Einrichten von Cloud Storage-, VM- und Cloud TPU-Ressourcen für das Training mit einem Einzelgerät.

  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 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, API-Aufrufe mit Ihren Anmeldedaten durchzuführen.

  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
    

  5. Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket:

    $ gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central2

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, sowie die Trainingsergebnisse. Mit dem gcloud-Befehl, der in dieser Anleitung zum Einrichten der TPU verwendet wird, werden auch Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie genauere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

  6. Dataset vorbereiten oder fake_imagenet verwenden

    ImageNet ist eine Bilddatenbank. Die Bilder in der Datenbank sind hierarchisch angeordnet, wobei jeder Knoten der Hierarchie durch Hunderte und Tausende von Bildern dargestellt wird.

    In dieser Anleitung wird eine Demoversion des vollständigen ImageNet-Datasets verwendet, die als fake_imagenet bezeichnet wird. Mit dieser Demoversion können Sie die und gleichzeitig den Speicher- und Zeitbedarf die mit der Ausführung eines Modells für die gesamte ImageNet-Datenbank verknüpft ist.

    Das Dataset "fake_imagenet" befindet sich an diesem Speicherort in Cloud Storage:

    gs://cloud-tpu-test-datasets/fake_imagenet

    Das Dataset "fake_imagenet" dient nur zum Verständnis, wie eine Cloud TPU verwendet wird und wie die End-to-End-Leistung validiert wird. Die Genauigkeitszahlen und das gespeicherte Modell sind nicht aussagekräftig.

    Wenn Sie das vollständige ImageNet-Dataset verwenden möchten, lesen Sie die Informationen unter ImageNet-Dataset herunterladen, vorverarbeiten und hochladen.

  7. Starten Sie TPU-Ressourcen mit dem Befehl gcloud. Der verwendete Befehl hängt davon ab, ob Sie TPU-VMs oder TPU-Knoten verwenden. Weitere Informationen zu beiden VM-Architekturen finden Sie unter Systemarchitektur.

    $ gcloud compute tpus tpu-vm create resnet-tutorial \
      --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
    Mit dem Beschleunigertyp geben Sie 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 Cloud TPU-Softwareversion.

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

  8. Stellen Sie eine SSH-Verbindung zur TPU-VM-Instanz her. Wenn Sie mit der VM verbunden sind, ändert sich die Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    gcloud compute tpus tpu-vm ssh resnet-tutorial --zone=us-central2-b
  9. Legen Sie die Cloud TPU-Namensvariable fest.

    (vm)$ export TPU_NAME=local
  10. Cloud Storage-Bucket-Variablen festlegen

    Richten Sie die folgenden Umgebungsvariablen ein und ersetzen Sie bucket-name durch den Namen Ihres Cloud Storage-Buckets:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/resnet-2x
    (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet

    Die Trainingsanwendung erwartet, dass Ihre Trainingsdaten in Cloud Storage verfügbar sind. Die Trainingsanwendung verwendet auch Ihren Cloud Storage-Bucket, um während des Trainings Prüfpunkte zu speichern.

  11. 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
  12. Installieren Sie TensorFlow-Anforderungen.

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt 
  13. Für das ResNet-Trainingsskript ist ein zusätzliches Paket erforderlich. Installieren Sie es jetzt.

    (vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
  14. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    (vm)$ cd /usr/share/tpu/tensorflow/resnet50_keras
  15. Legen Sie die Umgebungsvariable PYTHONPATH fest:

    (vm)$ /usr/share/tpu/tensorflow/resnet50_keras"
  16. Führen Sie das Trainingsskript aus. Dabei wird ein fake_imagenet-Dataset verwendet und ResNet für 100 Schritte trainiert.

    (vm)$ resnet50.py --tpu=local --data=gs://cloud-tpu-test-datasets/fake_imagenet

    Beschreibung der Befehls-Flags

    tpu
    Der Name Ihrer TPU.
    data
    Gibt das Verzeichnis an, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Wenn der Ordner fehlt, erstellt das Programm eins. Wenn eine Cloud TPU verwendet wird, muss model_dir ein Cloud Storage-Pfad sein (gs://...). Sie können einen vorhandenen Ordner wiederverwenden, um aktuelle Prüfpunktdaten zu laden und zusätzliche Prüfpunkte zu speichern, sofern die vorherigen Prüfpunkte mit TPU derselben Größe und TensorFlow-Version erstellt wurden.

Dadurch wird ResNet für 100 Schritte trainiert und auf einem v3-8-TPU-Knoten ausgeführt in etwa 3 Minuten. Am Ende der 100 Schritte sieht die Ausgabe in etwa so aus:

I0624 17:04:26.974905 140457742666816 controller.py:290]  eval | step:    100 | eval time:   23.3 sec | output:
    {'accuracy': 0.0010141226,
     'top_5_accuracy': 0.0051457332,
     'validation_loss': 8.448798}
 eval | step:    100 | eval time:   23.3 sec | output:
    {'accuracy': 0.0010141226,
     'top_5_accuracy': 0.0051457332,
     'validation_loss': 8.448798}

Sie haben das Trainingsbeispiel für ein einzelnes Gerät abgeschlossen. Führen Sie die folgenden Schritte aus, um die aktuellen Ressourcen des TPU-Einzelgeräts zu löschen.

  1. Trennen Sie die Verbindung zur Compute Engine-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 resnet-tutorial \
      --zone=us-central2-b

    Beschreibung der Befehls-Flags

    zone
    Die Zone wo sich Ihre Cloud TPU befand.

Modell mit Cloud TPU Pods skalieren

Das Training Ihres Modells auf Cloud TPU-Pods kann einige Änderungen Ihr Trainingsskript. Weitere Informationen finden Sie unter Auf TPU-Pods trainieren.

TPU-Pod-Training

Dieser Abschnitt enthält Informationen zum Einrichten eines Cloud Storage-Bucket und Cloud TPU-Ressourcen für Pod-Training

Einrichten

  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 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 unten auf Authorize. der Seite, damit gcloud Google Cloud API-Aufrufe mit Ihren Anmeldedaten ausführen kann.

  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 oder verwenden Sie einen Bucket, den Sie zuvor für Ihr Projekt erstellt haben:

    gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central2

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, und die Trainingsergebnisse. Mit dem in dieser Anleitung verwendeten gcloud-Befehl werden Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie genauere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

    Der Bucket-Speicherort muss sich in derselben Region wie die TPU-Ressourcen befinden.

  6. Dataset vorbereiten oder fake_imagenet verwenden

    ImageNet ist eine Bilddatenbank. Die Bilder in der Datenbank sind hierarchisch angeordnet, wobei jeder Knoten der Hierarchie durch Hunderte und Tausende von Bildern dargestellt wird.

    Das Standard-Pod-Training greift auf eine Demoversion der vollständigen ImageNet-Version zu -Dataset, auch als fake_imagenet bezeichnet. Mit dieser Demoversion können Sie Testen Sie das Pod-Training und reduzieren gleichzeitig den Speicher- und Zeitbedarf in der Regel die mit dem Trainieren eines Modells anhand der vollständigen ImageNet-Datenbank verbunden sind.

    Das Dataset "fake_imagenet" dient nur zum Verständnis, wie eine Cloud TPU verwendet wird und wie die End-to-End-Leistung validiert wird. Die Genauigkeitszahlen und das gespeicherte Modell sind nicht aussagekräftig.

    Wenn Sie das vollständige ImageNet-Dataset verwenden möchten, lesen Sie den Abschnitt ImageNet-Dataset herunterladen, vorverarbeiten und hochladen

Cloud TPU-Ressourcen erstellen

  1. Starten Sie Ihre Cloud TPU-Ressourcen mit dem gcloud-Befehl.

    In dieser Anleitung wird ein v3-32-Pod angegeben. Weitere Pod-Optionen finden Sie unter TPU-Versionen.

    $ gcloud compute tpus tpu-vm create resnet-tutorial \
      --zone=us-central2-b \
      --accelerator-type=4-32 \
      --version=tpu-vm-tf-2.17.0-pod-pjrt

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    accelerator-type
    Mit dem Beschleunigertyp geben Sie 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 Cloud TPU-Softwareversion.
  2. Stellen Sie über SSH eine Verbindung zur TPU-VM-Instanz her. Wenn Sie mit der VM verbunden sind, ändert sich die Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    gcloud compute tpus tpu-vm ssh resnet-tutorial --zone=us-central2-b
  3. Exportieren Sie Cloud TPU-Einrichtungsvariablen:

    (vm)$ export ZONE=us-central2-b
    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export TPU_NAME=resnet-tutorial
    (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/resnet-2x-pod

    Die Trainingsanwendung erwartet, dass Ihre Trainingsdaten in Cloud Storage verfügbar sind. Die Trainingsanwendung verwendet auch Ihren Cloud Storage-Bucket, um während des Trainings Prüfpunkte zu speichern.

  4. Für das ResNet-Trainingsskript ist ein zusätzliches Paket erforderlich. Installieren Sie es jetzt.

    (vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3 
  5. Installieren Sie TensorFlow-Anforderungen. {: id='setup-env'}:

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

    (vm)$ export PYTHONPATH="PYTHONPATH=/usr/share/tpu/tensorflow/resnet50_keras"
    (vm)$ export TPU_LOAD_LIBRARY=0
  7. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    (vm)$ cd /usr/share/tpu/tensorflow/resnet50_keras
  8. Modell trainieren

    (vm)$ resnet50.py --tpu=${TPU_NAME} --data=gs://cloud-tpu-test-datasets/fake_imagenet

    Beschreibung der Befehls-Flags

    tpu
    Der Name Ihrer TPU.
    data
    Gibt das Verzeichnis an, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Wenn der Ordner fehlt, wird er vom Programm erstellt. Wenn Sie eine Cloud TPU verwenden, muss die model_dir sein Ein Cloud Storage-Pfad (gs://...). Sie können einen vorhandener Ordner, um aktuelle Prüfpunktdaten zu laden und zusätzliche Prüfpunkte, sofern die vorherigen Prüfpunkte mit Cloud TPU derselben Größe und TensorFlow-Version.

Mit diesem Verfahren wird das Modell für das Dataset „fake_imagenet“ für 100 Trainings trainiert und 13 Bewertungsschritte. Dieses Training dauert etwa 2 Minuten auf einem v3-32 Cloud TPU Wenn das Training und die Bewertung abgeschlossen sind, werden Meldungen wie die folgende angezeigt:

{'accuracy': 0.0009716797,
     'learning_rate': 0.10256411,
     'top_5_accuracy': 0.0049560545,
     'training_loss': 8.5587225}
train | step:    100 | steps/sec:    1.2 | output:
    {'accuracy': 0.0009716797,
     'learning_rate': 0.10256411,
     'top_5_accuracy': 0.0049560545,
     'training_loss': 8.5587225}

eval | step:    100 | eval time:   24.8 sec | output:
    {'accuracy': 0.0010141226,
     'top_5_accuracy': 0.004356971,
     'validation_loss': 8.50038}
 eval | step:    100 | eval time:   24.8 sec | output:
    {'accuracy': 0.0010141226,
     'top_5_accuracy': 0.004356971,
     'validation_loss': 8.50038}

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-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 resnet-tutorial \
      --zone=us-central2-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 TPU-Ressourcen enthalten:

    $ gcloud compute tpus tpu-vm list --zone=us-central2-b
  4. Löschen Sie den Cloud Storage-Bucket, den Sie für diese Anleitung erstellt haben:

    $ 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 sind 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. Auf Cloud TPUs trainierte TensorFlow-Modelle müssen Datasets im Allgemeinen TFRecord-Format.

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. 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 modellieren. Weitere Informationen zur Hyperparameter-Abstimmung finden Sie unter Übersicht über Hyperparameter-Abstimmung und Hyperparameter abstimmen.

Inferenz

Sobald Sie Ihr Modell trainiert haben, können Sie es für die Inferenz (auch als Vorhersage). Mit dem Cloud TPU-Inferenzkonverter können Sie ein TensorFlow-Modell für die Inferenz auf Cloud TPU v5e vorbereiten und optimieren. Weitere Informationen Informationen zur Inferenz in Cloud TPU v5e finden Sie unter Cloud TPU v5e-Inferenz .

  • In der Anleitung zur Dataset-Konvertierung erfahren Sie, wie Sie mit Ihren eigenen Daten anstelle der Datasets "fake_imagenet" oder "ImageNet" trainieren und auswerten. In diesem Tutorial erfahren Sie, wie Sie den Datenkonverter für die Bildklassifizierung verwenden. Beispielskript, mit dem ein Roh-Dataset zur Bildklassifizierung in TFRecords, der von Cloud TPU TensorFlow-Modellen verwendet werden kann
  • Cloud TPU Colab ausführen wie Sie ein Bildklassifizierungsmodell mit Ihrem eigenen Bilddaten.
  • Andere Cloud TPU-Anleitungen ansehen.
  • TPU-Monitoring-Tools in TensorBoard verwenden
  • ResNet mit Cloud TPU und GKE trainieren