Cloud TPU in GKE einrichten

Diese Seite enthält eine Kurzanleitung zum Einrichten von Cloud TPU mit Google Kubernetes Engine (GKE). Es gibt auch eine ausführliche Anleitung zum Trainieren eines TensorFlow ResNet-50-Modells mit Cloud TPU und GKE.

Vorteile von GKE

GKE bietet Kubernetes-Cluster als verwalteten Dienst.

  • Einfachere Einrichtung und Verwaltung: Wenn Sie Cloud TPU verwenden, benötigen Sie eine Compute Engine-VM zum Ausführen Ihrer Arbeitslast und einen CIDR-Block (Classless Inter-Domain Routing) für Cloud TPU. GKE erstellt und verwaltet die VM und den CIDR-Block für Sie.

  • Optimierte Kosten: Ihre VMs und Cloud TPU-Knoten werden in GKE automatisch basierend auf Arbeitslasten und Traffic skaliert. Sie zahlen nur dann für Cloud TPU und die VM, wenn Sie Arbeitslasten darauf ausführen.

  • Flexible Verwendung: Sie müssen nur eine einzige Zeile in Ihrer Pod-Spezifikation für einen anderen Hardwarebeschleuniger (CPU, GPU oder TPU) ändern:

    kind: Pod
    spec:
      containers:
      - name: example-container
        resources:
          limits:
            cloud-tpus.google.com/v2: 8
            # See the line above for TPU, or below for CPU / GPU.
            # cpu: 2
            # nvidia.com/gpu: 1
    
  • Skalierbarkeit: GKE stellt die Deployment API bereit, die problemlos auf Hunderte von Pods und Cloud TPU-Knoten skaliert werden kann.

  • Fehlertoleranz: Die Job API von GKE stellt in Verbindung mit dem TensorFlow-Prüfpunktmechanismus die Semantik für die vollständige Ausführung bereit. Falls in den VM-Instanzen oder Cloud TPU-Knoten Fehler auftreten sollten, werden Ihre Trainingsjobs automatisch noch einmal ausgeführt, wobei der zuletzt vom Prüfpunkt gelesene Zustand verwendet wird.

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.13 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. Die folgenden Zonen sind verfügbar:

    USA

    TPU-Typ (v2) TPU v2-Kerne Gesamter TPU-Arbeitsspeicher Region/Zone
    v2–8 8 64 GiB us-central1-b
    us-central1-c
    us-central1-f
    v2–32 32 256 GiB us-central1-a
    v2-128 128 1 TiB us-central1-a
    v2-256 256 2 TiB us-central1-a
    v2-512 512 4 TiB us-central1-a
    TPU-Typ (v3) TPU v3-Kerne Gesamter TPU-Arbeitsspeicher Verfügbare Zonen
    v3–8 8 128 GiB us-central1-a
    us-central1-b
    us-central1-f

    Europa

    TPU-Typ (v2) TPU v2-Kerne Gesamter TPU-Arbeitsspeicher Region/Zone
    v2–8 8 64 GiB europe-west4-a
    v2–32 32 256 GiB europe-west4-a
    v2-128 128 1 TiB europe-west4-a
    v2-256 256 2 TiB europe-west4-a
    v2-512 512 4 TiB europe-west4-a
    TPU-Typ (v3) TPU v3-Kerne Gesamter TPU-Arbeitsspeicher Verfügbare Zonen
    v3–8 8 128 GiB europe-west4-a
    v3-32 32 512 GiB europe-west4-a
    v3–64 64 1 TiB europe-west4-a
    v3–128 128 2 TiB europe-west4-a
    v3–256 256 4 TiB europe-west4-a
    v3–512 512 8 TiB europe-west4-a
    v3–1024 1.024 16 TiB europe-west4-a
    v3–2048 2.048 32 TiB europe-west4-a

    Asiatisch-pazifischer Raum

    TPU-Typ (v2) TPU v2-Kerne Gesamter TPU-Arbeitsspeicher Region/Zone
    v2–8 8 64 GiB asia-east1-c
  • Jeder Container kann höchstens eine Cloud TPU anfordern. Mehrere Container in einem 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.
  • Ihr 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 Cloud Console auf der Seite für die Projektauswahl ein Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google 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:

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

    Zur Cloud Storage-Seite

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

    • Eindeutiger Name Ihrer Wahl
    • Standard-Speicherklasse: Standard
    • Speicherort: us-central1

    Der Bucket-Standort muss sich in derselben Region befinden wie die im GKE-Cluster bereitgestellte TPU-Ressource.

Cloud TPU Zugriff auf den Cloud Storage-Bucket gewähren

Ihre Cloud TPU braucht Lese-/Schreibzugriff auf Ihre Cloud Storage-Objekte. Dazu müssen Sie den erforderlichen Zugriff auf das Dienstkonto gewähren, das von Cloud TPU verwendet wird. Folgen Sie dem Leitfaden, um Zugriff auf Ihren Storage-Bucket zu gewähren.

GKE-Cluster mit Cloud TPU-Unterstützung erstellen

Sie können die Cloud TPU-Unterstützung für einen neuen oder einen vorhandenen 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 beispielsweise die Zone us-central1-b aus.

    Cloud TPU ist in den folgenden Zonen verfügbar:

    USA

    TPU-Typ (v2) TPU v2-Kerne Gesamter TPU-Arbeitsspeicher Region/Zone
    v2–8 8 64 GiB us-central1-b
    us-central1-c
    us-central1-f
    v2–32 32 256 GiB us-central1-a
    v2-128 128 1 TiB us-central1-a
    v2-256 256 2 TiB us-central1-a
    v2-512 512 4 TiB us-central1-a
    TPU-Typ (v3) TPU v3-Kerne Gesamter TPU-Arbeitsspeicher Verfügbare Zonen
    v3–8 8 128 GiB us-central1-a
    us-central1-b
    us-central1-f

    Europa

    TPU-Typ (v2) TPU v2-Kerne Gesamter TPU-Arbeitsspeicher Region/Zone
    v2–8 8 64 GiB europe-west4-a
    v2–32 32 256 GiB europe-west4-a
    v2-128 128 1 TiB europe-west4-a
    v2-256 256 2 TiB europe-west4-a
    v2-512 512 4 TiB europe-west4-a
    TPU-Typ (v3) TPU v3-Kerne Gesamter TPU-Arbeitsspeicher Verfügbare Zonen
    v3–8 8 128 GiB europe-west4-a
    v3-32 32 512 GiB europe-west4-a
    v3–64 64 1 TiB europe-west4-a
    v3–128 128 2 TiB europe-west4-a
    v3–256 256 4 TiB europe-west4-a
    v3–512 512 8 TiB europe-west4-a
    v3–1024 1.024 16 TiB europe-west4-a
    v3–2048 2.048 32 TiB europe-west4-a

    Asiatisch-pazifischer Raum

    TPU-Typ (v2) TPU v2-Kerne Gesamter TPU-Arbeitsspeicher Region/Zone
    v2–8 8 64 GiB asia-east1-c
  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 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) aus. Möglicherweise müssen Sie ein VPC-Netzwerk erstellen, wenn für das aktuelle Projekt kein Netzwerk 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 Clusterverbindung. 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

So richten Sie mit dem gcloud-Tool eine Umgebung ein und erstellen einen GKE-Cluster mit Cloud TPU-Unterstützung:

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

    $ gcloud components install
  2. Geben Sie Ihr Google Cloud-Projekt an:

    $ gcloud config set project project-name
    

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

  3. Geben Sie die Zone an, in der Sie eine Cloud TPU-Ressource nutzen möchten. Verwenden Sie für dieses Beispiel die Zone us-central1-b:

    $ gcloud config set compute/zone us-central1-b
    

    Cloud TPU ist in den folgenden Zonen verfügbar:

    USA

    TPU-Typ (v2) TPU v2-Kerne Gesamter TPU-Arbeitsspeicher Region/Zone
    v2–8 8 64 GiB us-central1-b
    us-central1-c
    us-central1-f
    v2–32 32 256 GiB us-central1-a
    v2-128 128 1 TiB us-central1-a
    v2-256 256 2 TiB us-central1-a
    v2-512 512 4 TiB us-central1-a
    TPU-Typ (v3) TPU v3-Kerne Gesamter TPU-Arbeitsspeicher Verfügbare Zonen
    v3–8 8 128 GiB us-central1-a
    us-central1-b
    us-central1-f

    Europa

    TPU-Typ (v2) TPU v2-Kerne Gesamter TPU-Arbeitsspeicher Region/Zone
    v2–8 8 64 GiB europe-west4-a
    v2–32 32 256 GiB europe-west4-a
    v2-128 128 1 TiB europe-west4-a
    v2-256 256 2 TiB europe-west4-a
    v2-512 512 4 TiB europe-west4-a
    TPU-Typ (v3) TPU v3-Kerne Gesamter TPU-Arbeitsspeicher Verfügbare Zonen
    v3–8 8 128 GiB europe-west4-a
    v3-32 32 512 GiB europe-west4-a
    v3–64 64 1 TiB europe-west4-a
    v3–128 128 2 TiB europe-west4-a
    v3–256 256 4 TiB europe-west4-a
    v3–512 512 8 TiB europe-west4-a
    v3–1024 1.024 16 TiB europe-west4-a
    v3–2048 2.048 32 TiB europe-west4-a

    Asiatisch-pazifischer Raum

    TPU-Typ (v2) TPU v2-Kerne Gesamter TPU-Arbeitsspeicher Region/Zone
    v2–8 8 64 GiB asia-east1-c
  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
    

    Für obigen Befehl gilt:

    • --cluster-version=1.16 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=cloud-platform stellt sicher, dass alle Knoten im Cluster Zugriff auf Ihren Cloud Storage-Bucket in Google Cloud-Projekt haben, der oben als project-name definiert ist. Der Cluster und der Storage-Bucket müssen sich im selben Projekt befinden, damit dies funktioniert. Beachten Sie, dass die Pods standardmäßig die Bereiche der Knoten übernehmen, für die sie bereitgestellt werden. Daher teilt --scopes=cloud-platform allen 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 Speicherort des CIDR-Bereichs an, der für Cloud TPU verwendet werden soll. IP_RANGE kann als IP/20 angegeben werden, zum Beispiel 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.

Cloud TPU-Unterstützung für einen vorhandenen Cluster aktivieren

Führen Sie die folgenden Schritte im gcloud-Befehlszeilentool aus, um die Cloud TPU-Unterstützung für einen vorhandenen GKE-Cluster zu aktivieren:

  1. Aktivieren Sie die Cloud TPU-Unterstützung:

    gcloud beta container clusters update cluster-name --enable-tpu
    

    Ersetzen Sie cluster-name durch den Namen Ihres Clusters.

  2. Aktualisieren Sie den kubeconfig-Eintrag:

    gcloud container clusters get-credentials cluster-name
    

Benutzerdefinierten CIDR-Bereich festlegen

Standardmäßig weist GKE den vom Cluster bereitgestellten TPUs einen CIDR-Block mit der Größe /20 zu. Sie können einen benutzerdefinierten CIDR-Bereich für die Cloud TPU angeben. Führen Sie dazu folgenden Befehl aus:

gcloud beta container clusters update cluster-name \
  --enable-tpu \
  --tpu-ipv4-cidr 10.100.0.0/20

Dabei gilt:

  • cluster-name ist der Name Ihres vorhandenen Clusters.
  • 10.100.0.0/20: Ihr benutzerdefinierter CIDR-Bereich

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 den folgenden Befehl aus, um alle ausgeführten und abgeschlossenen Vorgänge in Ihrem Cluster aufzulisten:

gcloud container operations list

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

gcloud container operations operations describe operation-id

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

Ihr Modell im Docker-Image erstellen und containerisieren

Sie können entweder ein offizielles TPU-Modell verwenden, das in Docker-Images containerisiert wurde, oder Ihr eigenes Modell erstellen und containerisieren.

  • Die offiziellen TensorFlow-Modelle verwenden

    Die neuesten offiziellen TensorFlow-Modelle sind auf GitHub und als pip-Paket verfügbar. Fügen Sie bei Modellen, die das Flag --tpu verwenden, dem Befehl in der Pod-Spezifikation --tpu=$(KUBE_GOOGLE_CLOUD_TPU_ENDPOINTS) hinzu.

  • Eigene Modelle erstellen

    Wenn Sie ein eigenes Modell zum Ausführen von Cloud TPU in GKE erstellen möchten, können Sie Cloud TPU in TensorFlow mit tf.distribute.cluster_resolver.TPUClusterResolver und tf.distribute.experimental.TPUStrategy so verwenden:

    # The tpu_names, zone, and project may be omitted in TPUClusterResolver
    # as GKE automatically uses the Cloud TPU created for your
    # job when your runs.
    
    tpu_cluster_resolver = tf.distribute.cluster_resolver.TPUClusterResolver()
    tf.config.experimental_connect_to_cluster(tpu_cluster_resolver)
    tf.tpu.experimental.initialize_tpu_system(tpu_cluster_resolver)
    strategy = tf.distribute.experimental.TPUStrategy(tpu_cluster_resolver)
    with strategy.scope():
        ...
    
    

    Weitere Informationen zur Verwendung von Cloud-TPUs in TensorFlow finden Sie in der TensorFlow-Dokumentation.

Mit gcloud builds submit -t gcr.io/... können Sie ein Docker-Image erstellen und in die Google Container Registry verschieben.

Cloud TPU in der Kubernetes Pod-Spezifikation anfordern

In der Kubernetes Pod-Spezifikation:

  • Geben Sie mit der folgenden Pod-Anmerkung die TensorFlow-Version an, die von den Cloud TPU-Knoten verwendet wird:

    tf-version.cloud-tpus.google.com: "x.y"
    

    Dabei ist x.y die von der Cloud TPU unterstützte TensorFlow-Version. Sie müssen mindestens TensorFlow 1.13 verwenden. Alle für einen Pod erstellten Cloud TPU-Instanzen müssen dieselbe TensorFlow-Version verwenden. Sie müssen alle Modelle in Ihren Containern mit derselben TensorFlow-Version erstellen. Siehe die unterstützten Versionen

  • Geben Sie die Cloud TPU-Ressource in der Containerspezifikation im Bereich limits unter dem Feld resource an.

    Die Einheit der Cloud TPU-Ressource ist die Anzahl der Cloud TPU-Kerne. Alle gültigen Ressourcenanfragen werden in der folgenden Tabelle aufgeführt.

    Wenn die zu verwendende Ressource ein Cloud TPU Pod ist, müssen Sie ein Kontingent anfordern, da das Standardkontingent für Cloud TPU Pod null ist.

    Ressourcenanfrage Cloud TPU-Typ Erforderliche GKE-Version
    cloud-tpus.google.com/v2: 8 Ein Cloud TPU v2-Gerät (8 Kerne) 1.10.4-gke.2 oder höher
    cloud-tpus.google.com/v2: 32 Ein v2-32 Cloud TPU Pod (32 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v2: 128 Ein v2-128 Cloud TPU Pod (128 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v2: 256 Ein v2-256 Cloud TPU Pod (256 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v2: 512 Ein v2-512 Cloud TPU Pod (512 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v3: 32 Ein v3-32 Cloud TPU Pod (32 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v3: 64 Ein v3-64 Cloud TPU Pod (64 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v3: 128 Ein v3-128 Cloud TPU Pod (128 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v3: 256 Ein v3-256 Cloud TPU Pod (256 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v3: 512 Ein v3-512 Cloud TPU Pod (512 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v3: 1024 Ein v3-1024 Cloud TPU Pod (1024 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/v3: 2048 Ein v3-2048 Cloud TPU Pod (2048 Kerne) (Beta) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/preemptible-v2: 8 Ein Cloud TPU v2-Gerät auf Abruf (8 Kerne) 1.10.6-gke.1 oder höher
    cloud-tpus.google.com/v3: 8 Ein Cloud TPU v3-Gerät (8 Kerne) 1.10.7-gke.6 oder höher
    cloud-tpus.google.com/preemptible-v3: 8 Ein Cloud TPU v3-Gerät auf Abruf (8 Kerne) 1.10.7-gke.6 oder höher

    Weitere Informationen zur Angabe von Ressourcen und Limits in der Kubernetes-Pod-Spezifikation finden Sie in der Kubernetes-Dokumentation.

Die folgende Jobspezifikation fordert beispielsweise ein Cloud TPU v2-Gerät auf Abruf mit TensorFlow 2.2 an:

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.2. This version MUST match the
        # TensorFlow version that your model is built on.
        tf-version.cloud-tpus.google.com: "2.2"
    spec:
      restartPolicy: Never
      containers:
      - name: resnet-tpu
        # The official TensorFlow 2.2.0 image.
        # https://hub.docker.com/r/tensorflow/tensorflow
        image: tensorflow/tensorflow:2.2.0
        command:
        - bash
        - -c
        - |
          pip install tf-models-official==2.2.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://<my-model-bucket>/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

Job erstellen

Führen Sie folgende Schritte aus, um den Job im GKE-Cluster zu erstellen und kubectl zu installieren:

  1. Erstellen Sie die Jobspezifikation example-job.yaml. Verwenden Sie dafür die oben beschriebenen Werte.

  2. Führen Sie den Job aus:

    $ kubectl create -f example-job.yaml
    job "resnet-tpu" created

    Dieser Befehl erstellt den Job, der den Pod automatisch plant.

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

    $ kubectl get pods -w
    
    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
    
    Die Lebensdauer von Cloud TPU-Knoten ist an die Pods gebunden, die diese anfordern. Die Cloud TPU wird nach Bedarf beim Planen des Pods erstellt und beim Löschen des Pods anderweitig verwendet.

Cloud TPU-Logs abrufen

Führen Sie die folgenden Schritte aus, um die Logs der Cloud TPU-Instanzen abzurufen, die von Ihren Kubernetes-Pods verwendet werden.

  1. Erstellen Sie Bereitstellungs- und Dienstspezifikationen wie die folgenden:

    Zur Seite "GKE"

  2. Klicken Sie auf Arbeitslasten.

  3. Suchen Sie den Job und klicken Sie darauf.

  4. Suchen Sie unter Verwaltete Pods den Pod und klicken Sie darauf.

  5. Suchen Sie den Container unter Container und klicken Sie auf Logs ansehen, um die Logs der von diesem Container verwendeten Cloud TPU aufzurufen.

Mit TensorBoard Messwerte visualisieren und die Leistung überwachen

TensorBoard stellt eine Gruppe von Tools für die visuelle Darstellung von TensorFlow-Daten 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. Die Cloud TPU-Toolauswahl wird erst auf dem Tab Profil verfügbar, der in der Menüleiste angezeigt wird, wenn Trace-Informationen aus einem TensorFlow-Modell erfasst wurden. Eine Auswahl aus dem Drop-down-Menü ist ebenfalls möglich.

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

  1. Erstellen Sie einen weiteren TensorFlow-Container, um TensorBoard auszuführen. Ersetzen Sie dabei bucket-name durch den Namen Ihres GCS-Buckets.

    $ kubectl run tensorboard \
      --image tensorflow/tensorflow:2.2.0 \
      --port 6006 \
      -- bash -c "pip install tensorboard-plugin-profile==2.2.0 cloud-tpu-client && tensorboard --logdir=gs://bucket-name/resnet"
    
  2. Prüfen Sie, ob der Pod tensorboard geplant wurde.

    $ kubectl get pod tensorboard -w
    
    NAME          READY   STATUS    RESTARTS   AGE
    tensorboard   1/1     Running   0          50s
    
    
  3. Portweiterleitung zum Pod tensorboard:

    $ kubectl port-forward pod/tensorboard 6006
    
  4. Rufen Sie in Ihrem Browser http://localhost:6006 auf.

  5. Wählen Sie im Drop-down-Menü in TensorBoard den Tab Profil aus.

  6. Wählen Sie auf dem Tab "Profil" Profil erfassen aus.

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

  8. Wählen Sie die Schaltfläche Erfassen aus, wenn Sie mit der Profilerstellung beginnen möchten, und warten Sie einige Sekunden, bis das Profil abgeschlossen ist.

  9. Aktualisieren Sie den Browser, damit die Tracing-Daten auf dem Tab "Profil" in TensorBoard angezeigt werden.

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

Cloud TPU in einem Cluster deaktivieren

Führen Sie die folgenden Schritte im gcloud-Befehlszeilentool aus, um die Cloud TPU-Unterstützung für einen vorhandenen GKE-Cluster zu deaktivieren:

  1. Prüfen Sie, dass keine Ihrer Arbeitslasten Cloud TPU verwendet:

    kubectl get tpu
    
  2. Deaktivieren Sie die Cloud TPU-Unterstützung in Ihrem Cluster:

    gcloud beta container clusters update cluster-name --no-enable-tpu
    

    Ersetzen Sie cluster-name durch den Namen Ihres Clusters.

    Bei zonalen Clustern dauert dieser Vorgang etwa 5 Minuten, bei regionalen Clustern je nach Clusterregion etwa 15 Minuten.

  3. Sobald die Vorgänge ohne Fehler abgeschlossen sind, können Sie prüfen, ob die vom Cluster bereitgestellten TPUs entfernt wurden:

    gcloud compute tpus list
    

    Die Namen der von Cloud TPU erstellten TPUs haben folgendes Format:

    gke-cluster-name-cluster-id-tpu-tpu-id
    

    Dabei gilt:

    • cluster-name ist der Name Ihres vorhandenen Clusters.
    • cluster-id: Die ID Ihres vorhandenen Clusters.
    • tpu-id: Die ID der Cloud TPU.

    Wenn TPUs angezeigt werden, können Sie sie mit folgendem Befehl manuell löschen:

    gcloud compute tpus delete gke-cluster-name-cluster-id-tpu-tpu-id
    

Bereinigen

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

Falls Sie das Projekt und die Zone für diese Sitzung noch nicht festgelegt haben, holen Sie dies jetzt nach. Die Anleitung hierzu finden Sie weiter oben in diesem Leitfaden. Befolgen Sie dann diese Schritte zur Bereinigung:

  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 --project=project-name
    
  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

  • Mit der Anleitung das TensorFlow ResNet-50-Modell in Cloud TPU und GKE trainieren
  • Weitere Modelle und Dataset-Abrufjobs mit einer der folgenden Jobspezifikationen ausführen: