Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

ResNet in der Cloud TPU mit GKE trainieren

Ziele

In dieser Anleitung erfahren Sie, wie Sie das Modell TensorFlow ResNet-50 in Cloud TPU und GKE trainieren.

Das Tutorial führt Sie durch die Schritte zum Trainieren des Modells anhand eines fiktiven Datensatzes, der zu Testzwecken bereitgestellt wird:

  • Cloud Storage-Bucket erstellen, der die Ausgabe Ihres Modells aufnimmt
  • GKE-Cluster zum Verwalten Ihrer Cloud TPU-Ressourcen erstellen
  • Kubernetes-Jobspezifikation herunterladen, in der die Ressourcen beschrieben sind, die zum Trainieren von ResNet-50 mit TensorFlow in einer Cloud TPU benötigt werden
  • Job im GKE-Cluster ausführen, um mit dem Training des Modells zu beginnen
  • Logs und die Ausgabe des Modells überprüfen

Anforderungen und Einschränkungen

Beachten Sie Folgendes, wenn Sie Ihre Konfiguration definieren:

  • Sie müssen mindestens die GKE-Version 1.13.4-gke.5 verwenden. Sie können die Version angeben, indem Sie wie unten beschrieben den Parameter --cluster-version dem Befehl gcloud container clusters create hinzufügen. Weitere Informationen zur Version finden Sie in der SDK-Dokumentation.
  • Sie müssen mindestens TensorFlow 1.15.3 verwenden. Geben Sie die TensorFlow-Version an, die von der Cloud TPU in Ihrer Kubernetes Pod-Spezifikation verwendet wird, wie unten beschrieben.
  • Sie müssen Ihren GKE-Cluster und die Knotenpools in einer Zone erstellen, in der die Cloud TPU verfügbar ist. Sie müssen außerdem die Cloud Storage-Buckets zum Speichern Ihrer Trainingsdaten und Modelle in derselben Region erstellen, in der sich auch Ihr GKE-Cluster befindet. In dieser Anleitung wird die Zone us-central1-b verwendet.
  • Jeder Container kann höchstens eine Cloud TPU anfordern. Mehrere Container in einem Kubernetes Pod können jedoch jeweils eine Cloud TPU anfordern.
  • Cluster Autoscaler unterstützt Cloud TPU ab GKE 1.11.4-gke.12 und höher.
  • Der GKE Cluster muss ein VPC-nativer Cluster sein.

Hinweis

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Wenn Sie Cloud TPU mit GKE verwenden, verwendet Ihr Projekt kostenpflichtige Komponenten von Google Cloud. Preisinformationen zur Kostenkalkulation finden Sie unter Cloud TPU-Preise und GKE-Preise. Wenn Sie Ressourcen nicht mehr benötigen, folgen Sie der Anleitung Ressourcen bereinigen.

  5. Aktivieren Sie die folgenden APIs in der Cloud Console:

Dienstkonto und Cloud Storage-Bucket erstellen

Sie benötigen einen Cloud Storage-Bucket, um die Ergebnisse des Trainings Ihres Modells für maschinelles Lernen zu speichern.

  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. 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
    
  4. Rufen Sie die Cloud Storage-Seite in der Cloud Console auf.

    Zur Cloud Storage-Seite

  5. Erstellen Sie durch die Angabe der folgenden Optionen einen neuen Bucket:

    • Eindeutiger Name Ihrer Wahl
    • Standorttyp: region
    • Speicherort: us-central1
    • Standard-Speicherklasse: Standard
    • Zugriffsteuerung: fine-grained

    Bevor Sie den Storage-Bucket verwenden können, müssen Sie dem Cloud TPU-Dienstkonto Zugriff auf den Bucket gewähren. Mit dem Link „Zugriffssteuerung“ oben können Sie detaillierte ACLs für Ihr Cloud TPU-Dienstkonto festlegen.

GKE-Cluster mit Cloud TPU-Unterstützung erstellen

Sie können die Cloud TPU-Unterstützung für einen neuen GKE-Cluster aktivieren.

Neuen Cluster mit Cloud TPU-Unterstützung erstellen

Sie können einen Cluster mit Cloud TPU-Unterstützung erstellen. Verwenden Sie dazu die Cloud Console oder das gcloud-Tool.

Wählen Sie nachstehend eine Option aus, um die entsprechende Anleitung aufzurufen.

Console

So erstellen Sie einen GKE-Cluster mit Cloud TPU-Unterstützung:

  1. Rufen Sie die GKE-Seite in der Cloud Console auf.

    Zur Seite "GKE"

  2. Klicken Sie auf Cluster erstellen.

  3. Geben Sie einen Namen für Ihren Cluster ein. Dieser darf nicht mehrfach innerhalb des Projekts oder der Zone vergeben werden.

  4. Wählen Sie als Standorttyp zonale und dann die gewünschte Zone aus, in der Sie eine Cloud TPU-Ressource verwenden möchten. Wählen Sie für diese Anleitung die Zone us-central1-b aus.

  5. Achten Sie darauf, dass die Masterversion auf 1.13.4-gke.5 oder eine höhere Version gesetzt ist, damit Cloud TPU unterstützt werden kann.

  6. Klicken Sie im Navigationsbereich unter dem Knotenpool, den Sie konfigurieren möchten, auf Sicherheit.

  7. Wählen Sie Uneingeschränkten Zugriff auf alle Cloud-APIs zulassen aus Dadurch wird allen Knoten im Cluster der Zugriff auf Ihren Cloud Storage-Bucket ermöglicht. Der Cluster und der Storage-Bucket müssen sich in demselben Projekt befinden, damit dies funktioniert. Beachten Sie, dass die Kubernetes Pods standardmäßig die Bereiche der Knoten übernehmen, für die sie bereitgestellt werden. Informationen dazu, wie Sie den Zugriff für einzelne Pods einschränken können, finden Sie im GKE-Leitfaden unter Mit Dienstkonten bei der Cloud Platform authentifizieren.

  8. Klicken Sie im Navigationsbereich unter Cluster auf Netzwerk.

  9. Wählen Sie VPC-natives Traffic-Routing aktivieren (verwendet Alias-IP-Adresse) aus. Sie müssen ein VPC-Netzwerk erstellen, wenn für das aktuelle Projekt noch keines vorhanden ist.

  10. Klicken Sie im Navigationsbereich unter Cluster auf Features.

  11. Wählen Sie Cloud TPU aktivieren aus.

  12. Konfigurieren Sie die verbleibenden Optionen für Ihre Cluster wie gewünscht. Sie können die Optionen mit den Standardwerten belassen.

  13. Klicken Sie auf Erstellen.

  14. Als Nächstes erstellen Sie die Verbindung zum Cluster: Wählen Sie dazu Ihren Cluster auf der Seite mit den Kubernetes-Clustern der Console aus und klicken Sie auf die Schaltfläche VERBINDEN. Der gcloud-Befehl zur Ausführung in Cloud Shell wird angezeigt.

gcloud

Folgen Sie der Anleitung unten, um Ihre Umgebung einzurichten und mit dem gcloud-Tool einen GKE-Cluster mit Cloud TPU-Unterstützung zu erstellen.

  1. Installieren Sie die gcloud-Komponenten, die Sie zum Ausführen von GKE mit Cloud TPU benötigen:

    $ gcloud components install kubectl 
  2. Konfigurieren Sie gcloud mit Ihrer Google Cloud-Projekt-ID.

    $ gcloud config set project project-name
    

    Ersetzen Sie project-name durch den Namen des Google Cloud-Projekts.

    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.

  3. Konfigurieren Sie gcloud mit der Zone, in der Sie eine Cloud TPU-Ressource verwenden möchten. Verwenden Sie für diese Anleitung die Zone us-central1-b:

    $ gcloud config set compute/zone us-central1-b
    
  4. Verwenden Sie den Befehl gcloud container clusters create, um in GKE einen Cluster mit Unterstützung für Cloud TPU zu erstellen. Ersetzen Sie im folgenden Befehl cluster-name durch einen Clusternamen Ihrer Wahl:

    $ gcloud container clusters create cluster-name \
      --cluster-version=1.16 \
      --scopes=cloud-platform \
      --enable-ip-alias \
      --enable-tpu
    

    Beschreibung der Befehls-Flags

    cluster-version
    Gibt an, dass der Cluster die neueste Version von Kubernetes 1.16 verwendet. Sie müssen mindestens die Version 1.13.4-gke.5 verwenden.
    scopes
    Stellt sicher, dass alle Knoten im Cluster Zugriff auf Ihren Cloud Storage-Bucket haben. Der Cluster und der Storage-Bucket müssen sich im selben Projekt befinden, damit dies funktioniert. Beachten Sie, dass die Kubernetes Pods standardmäßig die Bereiche der Knoten übernehmen, für die sie bereitgestellt werden. Daher teilt scopes=cloud-platform allen Kubernetes Pods, die im Cluster ausgeführt werden, den Bereich cloud-platform zu. Informationen dazu, wie Sie den Zugriff für einzelne Pods einschränken können, finden Sie im GKE-Leitfaden unter Mit Dienstkonten bei der Cloud Platform authentifizieren.
    enable-ip-alias
    Gibt an, dass der Cluster Alias-IP-Bereiche verwendet. Dies ist für die Nutzung von Cloud TPU in GKE erforderlich.
    enable-tpu
    Gibt an, dass der Cluster Cloud TPU unterstützen muss.
    tpu-ipv4-cidr (optional, oben nicht angegeben)
    Gibt den CIDR-Bereich an, der für Cloud TPU verwendet werden soll. Geben Sie die IP_RANGE im Format IP/20 an, z. B. 10.100.0.0/20. Wenn Sie dieses Flag nicht angeben, wird automatisch ein CIDR-Bereich mit einer Größe von /20 zugeordnet und zugewiesen.

    Wenn der Cluster erstellt wurde, sollte eine Meldung wie die folgende angezeigt werden:

    NAME             LOCATION       MASTER_VERSION    MASTER_IP     MACHINE_TYPE   NODE_VERSION      NUM_NODES  STATUS
    cluster-resnet  us-central1-b  1.16.15-gke.4901  34.71.245.25  n1-standard-1  1.16.15-gke.4901  3          RUNNING
    

Vorgänge anzeigen

Wenn Sie die Cloud TPU-Unterstützung aktivieren, wird ein Aktualisierungsvorgang gestartet. Bei zonalen Clustern dauert dieser Vorgang etwa 5 Minuten, bei regionalen Clustern je nach Clusterregion etwa 15 Minuten.

Führen Sie folgenden Befehl aus, um alle ausgeführten und abgeschlossenen Vorgänge in Ihrem Cluster aufzulisten:

   $ gcloud container operations list
   

Führen Sie folgenden Befehl aus, um weitere Informationen zu einem bestimmten Vorgang abzurufen:

   $ gcloud container operations describe operation-id
   

Ersetzen Sie operation-id durch die ID des jeweiligen Vorgangs.

GKE-/ResNet-Jobspezifikation

Die in dieser Anleitung verwendete Jobspezifikation (siehe unten) fordert ein Cloud TPU v2-Gerät auf Abruf mit TensorFlow 2.3 an. Außerdem wird ein TensorBoard-Prozess gestartet.

Die Lebensdauer von Cloud TPU-Knoten ist an die Kubernetes Pods gebunden, die diese anfordern. Die Cloud TPU wird nach Bedarf beim Planen des Kubernetes Pods erstellt und beim Löschen des Kubernetes Pods anderweitig verwendet.

apiVersion: batch/v1
kind: Job
metadata:
  name: resnet-tpu
spec:
  template:
    metadata:
      annotations:
        # The Cloud TPUs that will be created for this Job will support
        # TensorFlow 2.3. This version MUST match the
        # TensorFlow version that your model is built on.
        tf-version.cloud-tpus.google.com: "2.3"
    spec:
      restartPolicy: Never
      containers:
      - name: resnet-tpu
        # The official TensorFlow 2.3.0 image.
        # https://hub.docker.com/r/tensorflow/tensorflow
        image: tensorflow/tensorflow:2.3.0
        command:
        - bash
        - -c
        - |
          pip install tf-models-official==2.3.0
          python3 -m official.vision.image_classification.resnet.resnet_ctl_imagenet_main \
            --tpu=$(KUBE_GOOGLE_CLOUD_TPU_ENDPOINTS) \
            --distribution_strategy=tpu \
            --steps_per_loop=500 \
            --log_steps=500 \
            --use_synthetic_data=true \
            --dtype=fp32 \
            --enable_tensorboard=true \
            --train_epochs=90 \
            --epochs_between_evals=1 \
            --batch_size=1024 \
            --model_dir=gs://bucket-name/resnet
        resources:
          limits:
            # Request a single Preemptible v2-8 Cloud TPU device to train the
            # model. A single v2-8 Cloud TPU device consists of 4 chips, each of
            # which has 2 cores, so there are 8 cores in total.
            cloud-tpus.google.com/preemptible-v2: 8
      - name: tensorboard
        image: tensorflow/tensorflow:2.2.0
        command:
        - bash
        - -c
        - |
          pip install tensorboard-plugin-profile==2.3.0 cloud-tpu-client
          tensorboard --logdir=gs://bucket-name/resnet --port=6006
        ports:
        - containerPort: 6006

Job erstellen

So erstellen Sie den Job im GKE-Cluster:

  1. Erstellen Sie mit einem Texteditor eine Jobspezifikation (example-job.yaml) und kopieren Sie sie in die oben gezeigte Jobspezifikation. Achten Sie darauf, die Variable bucket-name im Parameter --model_dir und im Tensorboard-Befehl durch den Namen Ihres Storage-Buckets zu ersetzen.

  2. Führen Sie den Job aus:

    $ kubectl create -f example-job.yaml
    

    Dieser Befehl erstellt den Job, der den Pod automatisch plant und die folgende Ausgabe zurückgeben sollte:

    job "resnet-tpu" created
  3. Prüfen Sie, dass der Kubernetes Pod geplant und die Cloud TPU-Knoten bereitgestellt wurden. Ein Kubernetes Pod, der Cloud TPU-Knoten anfordert, kann vor der Ausführung 5 Minuten lang den Status „Ausstehend“ haben. Bis der Kubernetes Pod geplant ist, ähnelt die Ausgabe der unten gezeigten.

    $ kubectl get pods -w
    
    Die erste Ausgabe sollte angezeigt werden:
    
    NAME               READY     STATUS    RESTARTS   AGE
    resnet-tpu-cmvlf   0/1       Pending   0          1m
    

    Nach 5 Minuten sollten Sie in etwa Folgendes sehen:

    NAME               READY     STATUS    RESTARTS   AGE
    resnet-tpu-cmvlf   1/1       Running   0          6m
    

  4. Wenn beim STATUS running angezeigt wird, hat das Training begonnen. Geben Sie CTRL-C ein, um den Prozess kubectl get pods -w zu beenden.

Cloud TPU- und TensorBoard-Containerstatus und -Logs anzeigen

Führen Sie die folgenden Schritte aus, um den Status zu prüfen und die Logs der von Ihren Kubernetes-Pods verwendeten Cloud TPU- und TensorBoard-Instanzen anzuzeigen.

  1. Erstellen Sie mithilfe der folgenden Schritte Deployment- und Dienstspezifikationen:

    Zur Seite "GKE"

  2. Klicken Sie in der linken Navigationsleiste auf Arbeitslasten.

  3. Wählen Sie Ihren Job aus. Dadurch wird eine Seite mit der Überschrift Verwaltete Pods aufgerufen.

  4. Wählen Sie unter Verwaltete Pods Ihren Kubernetes Pod aus. Dadurch gelangen Sie zu einer Seite mit der Überschrift Container.

  5. Unter Container wird eine Liste der Container angezeigt. Die Liste enthält alle Cloud TPU- und TensorBoard-Instanzen. Für jeden Container werden diese Informationen angezeigt:

    1. Ausführungsstatus
    2. Link zu den Containerlogs

Mit TensorBoard Messwerte visualisieren und die Leistung überwachen

TensorBoard stellt eine Gruppe von Tools für die visuelle Darstellung von TensorFlow-Messwerten bereit. TensorBoard kann Sie dabei unterstützen, Verarbeitungsengpässe zu identifizieren, und liefert Vorschläge zur Verbesserung der Leistung.

TensorFlow Profiler ist ein TensorBoard-Plug-in zum Erfassen eines Profils auf einer einzelnen Cloud TPU oder einem Cloud TPU Pod, das in TensorBoard visualisiert werden kann. Weitere Informationen zu den Visualisierungstools und dazu, welche Informationen erhoben werden können, finden Sie in der Dokumentation zu TPU-Tools.

Führen Sie die folgenden Schritte aus, um TensorBoard im GKE-Cluster auszuführen:

  1. Befolgen Sie die Schritte zum Anzeigen des TensorBoard-Status, um zu prüfen, ob die TensorBoard-Instanz in einem Container ausgeführt wird.

  2. Portweiterleitung zum TensorBoard-Kubernetes Pod:

    $ kubectl port-forward pod/resnet-tpu-pod-id 6006
    

    Dabei ist pod-id die letzte Ziffernfolge Ihres GKE-Pod-Namens, die in der Console angezeigt wird: Kubernetes Engine > Arbeitslasten > Verwaltete Pods. Beispiel: resnet-tpu-wxskc.

  3. Klicken Sie in der Leiste oben rechts in der Cloud Shell auf die Schaltfläche Webvorschau und öffnen Sie Port 6006, um die TensorBoard-Ausgabe anzusehen. Die TensorBoard-UI wird als Tab in Ihrem Browser angezeigt.

  4. Wählen Sie oben rechts auf der TensorBoard-Seite im Drop-down-Menü PROFILE aus.

  5. Klicken Sie auf der Seite PROFILE auf die Schaltfläche CAPTURE PROFILE.

  6. Wählen Sie im Pop-up-Menü den TPU-Namensadresstyp aus und geben Sie den TPU-Namen ein. Der TPU-Name wird in der Cloud Console auf der Seite Compute Engine > TPUs in diesem Format angezeigt:

    gke-cluster-name-cluster-id-tpu-tpu-id
    
    Beispiel:
    gke-demo-cluster-25cee208-tpu-4b90f4c5

  7. Wählen Sie im Pop-up-Menü die Schaltfläche CAPTURE aus, um mit der Profilerstellung zu beginnen. Warten Sie dann einige Sekunden, bis das Profil erstellt ist.

  8. Aktualisieren Sie den Browser, damit die Tracing-Daten auf dem Tab PROFILE in TensorBoard angezeigt werden.

Weitere Informationen zum Erfassen und Interpretieren von Profilen finden Sie in der TensorFlow-Profiler-Anleitung.

Clean-up

Wenn Sie mit Cloud TPU in GKE fertig sind, bereinigen Sie die Ressourcen, um zusätzliche Kosten für Ihr Google Cloud-Konto zu vermeiden.

Console

So löschen Sie den GKE-Cluster:

  1. Rufen Sie die GKE-Seite in der Cloud Console auf.

    Zur Seite "GKE"

  2. Klicken Sie auf das Kästchen neben dem Cluster, den Sie löschen möchten.

  3. Klicken Sie auf Löschen.

Wenn Sie mit der Prüfung der Daten fertig sind, löschen Sie den Cloud Storage-Bucket, den Sie in dieser Anleitung erstellt haben.

  1. Rufen Sie die Cloud Storage-Seite in der Cloud Console auf.

    Zur Cloud Storage-Seite

  2. Klicken Sie auf das Kästchen neben dem Bucket, den Sie löschen möchten.

  3. Klicken Sie auf Löschen.

Unter Cloud Storage-Preise finden Sie Informationen zu den Limits für die kostenlose Speichernutzung sowie weitere Preisinformationen.

gcloud

  1. Führen Sie den folgenden Befehl aus, um den GKE-Cluster zu löschen. Ersetzen Sie dabei cluster-name durch den Clusternamen und project-name durch den Namen des Google Cloud-Projekts:

    $ gcloud container clusters delete cluster-name --zone=us-central1-b --project=project-name
    

    Dieser Befehl löscht den Cluster, den Container und die Cloud TPU.

  2. Wenn Sie mit der Prüfung der Daten fertig sind, löschen Sie mit dem Befehl gsutil alle Cloud Storage-Buckets, die Sie in dieser Anleitung erstellt haben. Ersetzen Sie bucket-name durch den Namen Ihres Cloud Storage-Buckets:

    $ gsutil rm -r gs://bucket-name
    

    Unter Cloud Storage-Preise finden Sie Informationen zu den Limits für die kostenlose Speichernutzung sowie weitere Preisinformationen.

Nächste Schritte

  • Weitere Modelle und Dataset-Abrufjobs mit einer der folgenden Jobspezifikationen ausführen: