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 Befehlgcloud 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
-
Melden Sie sich bei Ihrem Google-Konto an.
Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.
-
Aktivieren Sie die folgenden APIs in der Cloud Console:
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.
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.
Öffnen Sie ein Cloud Shell-Fenster.
Erstellen Sie eine Variable für Ihre Projekt-ID.
export PROJECT_ID=project-id
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
Rufen Sie die Cloud Storage-Seite in der Cloud Console auf.
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:
Rufen Sie die GKE-Seite in der Cloud Console auf.
Klicken Sie auf Cluster erstellen.
Geben Sie einen Namen für Ihren Cluster ein. Dieser darf nicht mehrfach innerhalb des Projekts oder der Zone vergeben werden.
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.
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.
Klicken Sie im Navigationsbereich unter dem Knotenpool, den Sie konfigurieren möchten, auf Sicherheit.
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.
Klicken Sie im Navigationsbereich unter Cluster auf Netzwerk.
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.
Klicken Sie im Navigationsbereich unter Cluster auf Features.
Wählen Sie Cloud TPU aktivieren aus.
Konfigurieren Sie die verbleibenden Optionen für Ihre Cluster wie gewünscht. Sie können die Optionen mit den Standardwerten belassen.
Klicken Sie auf Erstellen.
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.
Installieren Sie die
gcloud
-Komponenten, die Sie zum Ausführen von GKE mit Cloud TPU benötigen:$ gcloud components install kubectl
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 aufAuthorize
unten auf der Seite, um esgcloud
zu erlauben, GCP API-Aufrufe mit Ihren Anmeldedaten durchzuführen.Konfigurieren Sie
gcloud
mit der Zone, in der Sie eine Cloud TPU-Ressource verwenden möchten. Verwenden Sie für diese Anleitung die Zoneus-central1-b
:$ gcloud config set compute/zone us-central1-b
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 Bereichcloud-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 FormatIP/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:
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.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
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
Wenn beim
STATUS
running
angezeigt wird, hat das Training begonnen. Geben SieCTRL-C
ein, um den Prozesskubectl 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.
Erstellen Sie mithilfe der folgenden Schritte Deployment- und Dienstspezifikationen:
Klicken Sie in der linken Navigationsleiste auf Arbeitslasten.
Wählen Sie Ihren Job aus. Dadurch wird eine Seite mit der Überschrift Verwaltete Pods aufgerufen.
Wählen Sie unter Verwaltete Pods Ihren Kubernetes Pod aus. Dadurch gelangen Sie zu einer Seite mit der Überschrift Container.
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:
- Ausführungsstatus
- 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:
Befolgen Sie die Schritte zum Anzeigen des TensorBoard-Status, um zu prüfen, ob die TensorBoard-Instanz in einem Container ausgeführt wird.
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
.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.
Wählen Sie oben rechts auf der TensorBoard-Seite im Drop-down-Menü PROFILE aus.
Klicken Sie auf der Seite PROFILE auf die Schaltfläche CAPTURE PROFILE.
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
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.
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:
Rufen Sie die GKE-Seite in der Cloud Console auf.
Klicken Sie auf das Kästchen neben dem Cluster, den Sie löschen möchten.
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.
Rufen Sie die Cloud Storage-Seite in der Cloud Console auf.
Klicken Sie auf das Kästchen neben dem Bucket, den Sie löschen möchten.
Klicken Sie auf Löschen.
Unter Cloud Storage-Preise finden Sie Informationen zu den Limits für die kostenlose Speichernutzung sowie weitere Preisinformationen.
gcloud
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.
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:
- COCO-Dataset in GKE herunterladen und vorverarbeiten
- ImageNet in GKE herunterladen und vorverarbeiten
- Mask RCNN mit Cloud TPU und GKE trainieren
- AmoebaNet-D mit Cloud TPU und GKE trainieren
- Inception v3 mit Cloud TPU und GKE trainieren
- RetinaNet mit Cloud TPU und GKE trainieren