Das Modell in dieser Anleitung basiert auf dem Framework Deep Residual Learning for Image Recognition, in dem erstmalig die Residualnetzwerkarchitektur (ResNet-Architektur) eingeführt wurde. In der Anleitung wird anhand der 50-Schichten-Variante "ResNet-50" gezeigt, wie Sie das Modell mit TPUEstimator trainieren. Das ResNet-50-Modell ist auf Ihrer Compute Engine-VM vorinstalliert.
Lernziele
- Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
- Bereiten Sie eine Testversion des ImageNet-Datasets vor, die als Dataset fake_imagenet bezeichnet wird.
- Trainingsjob ausführen
- Ausgabeergebnisse überprüfen
Kosten
In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:
- Compute Engine
- Cloud TPU
- Cloud Storage
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
Bevor Sie mit dieser Anleitung beginnen, prüfen Sie, ob Ihr Google Cloud-Projekt ordnungsgemäß eingerichtet ist.
- 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.
-
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 ein Projekt aktiviert ist.
-
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 ein Projekt aktiviert ist.
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.
Ressourcen einrichten
Dieser Abschnitt enthält Informationen zum Einrichten von Cloud Storage-, VM- und Cloud TPU-Ressourcen für Anleitungen.
Öffnen Sie ein Cloud Shell-Fenster.
Erstellen Sie eine Variable für Ihre Projekt-ID.
export PROJECT_ID=project-id
Konfigurieren Sie die Google Cloud-Befehlszeile für das Projekt, 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 aufAuthorize
unten auf der Seite, damitgcloud
GCP API-Aufrufe mit Ihren Anmeldedaten durchführen kann.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
Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket:
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 -b on gs://bucket-name
Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, und die Trainingsergebnisse. Das in dieser Anleitung verwendete Tool
gcloud compute tpus execution-groups
richtet Standardberechtigungen für das Cloud TPU-Dienstkonto ein. Wenn Sie weitere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.Der Bucket-Speicherort muss sich in derselben Region wie die virtuelle Maschine (VM) und der TPU-Knoten befinden. VMs und TPU-Knoten befinden sich in bestimmten Zonen, die Untergruppen innerhalb einer Region sind.
Starten Sie mit dem Befehl
gcloud
eine Compute Engine-VM und eine Cloud TPU.$ gcloud compute tpus execution-groups create \ --vm-only \ --name=resnet-tutorial \ --zone=europe-west4-a \ --disk-size=300 \ --machine-type=n1-standard-8 \ --tf-version=1.15.5
Beschreibung der Befehls-Flags
vm-only
- Erstellen Sie nur eine VM. Standardmäßig werden mit dem Befehl
gcloud compute tpus execution-groups
eine VM und eine Cloud TPU erstellt. name
- Der Name der zu erstellenden Cloud TPU.
zone
- Die Zone, in der Sie die Cloud TPU erstellen möchten.
disk-size
- Die Größe des Laufwerks in GB der VM, die mit dem Befehl
gcloud compute tpus execution-groups
erstellt wurde. machine-type
- Der Maschinentyp der zu erstellenden Compute Engine-VM.
tf-version
- Die Version von TensorFlow
ctpu
wird auf der VM installiert.
Weitere Informationen zum Befehl
gcloud
finden Sie in der gcloud-Referenz.Wenn Sie dazu aufgefordert werden, drücken Sie auf y, um Ihre Cloud TPU-Ressourcen zu erstellen.
Wenn der Befehl
gcloud compute tpus execution-groups
ausgeführt wurde, prüfen Sie, ob die Shell-Eingabeaufforderung vonusername@projectname
inusername@vm-name
geändert wurde. Diese Änderung bedeutet, dass Sie jetzt bei Ihrer Compute Engine-VM angemeldet sind.gcloud compute ssh resnet-tutorial --zone=europe-west4-a
Ab jetzt bedeutet das Präfix (vm)$
, dass Sie den Befehl in der Compute Engine-VM-Instanz ausführen sollten.
Speicher-, Modell- und Datenpfade konfigurieren
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 (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
Die Trainingsanwendung erwartet, dass Ihre Trainingsdaten in Cloud Storage verfügbar sind. Die Trainingsanwendung verwendet Ihren Cloud Storage-Bucket zum Speichern von Prüfpunkten während des Trainings.
ResNet-Modell mit fake_imagenet trainieren und evaluieren
ImageNet ist eine Bilddatenbank. Die Bilder in der Datenbank sind in einer Hierarchie organisiert. Jeder Knoten der Hierarchie enthält Hunderte und Tausende von Bildern.
In dieser Anleitung wird eine Demoversion des vollständigen ImageNet-Datasets verwendet, die als fake_imagenet bezeichnet wird. Wenn Sie die Anleitung mit dieser Demoversionen durcharbeiten, können Sie den Speicher- und Zeitaufwand reduzieren, der normalerweise mit dem Ausführen eines Modells für die gesamte ImageNet-Datenbank verbunden 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.
Informationen zum Herunterladen und Verarbeiten des vollständigen ImageNet-Datasets finden Sie unter Das ImageNet-Dataset herunterladen, vorverarbeiten und hochladen.
Starten Sie mit dem ctpu-Dienstprogramm eine Cloud TPU-Ressource.
(vm)$ gcloud compute tpus execution-groups create \ --tpu-only \ --accelerator-type=v3-8 \ --name=resnet-tutorial \ --zone=europe-west4-a \ --tf-version=1.15.5
Beschreibung der Befehls-Flags
tpu-only
- Erstellt die Cloud TPU, ohne eine VM zu erstellen. Standardmäßig werden mit dem Befehl
gcloud compute tpus execution-groups
eine VM und eine Cloud TPU erstellt. accelerator-type
- Der Typ der zu erstellenden Cloud TPU.
name
- Der Name der zu erstellenden Cloud TPU.
zone
- Die Zone, in der Sie die Cloud TPU erstellen möchten.
tf-version
- Die Version von TensorFlow
ctpu
wird auf der VM installiert.
Legen Sie die Cloud TPU-Namensvariable fest.
(vm)$ export TPU_NAME=resnet-tutorial (vm)$ export ACCELERATOR_TYPE=v3-8
Navigieren Sie zum Modellverzeichnis:
(vm)$ cd /usr/share/tpu/models/official/resnet/
Führen Sie das Trainingsskript aus.
Bei einem einzelnen Cloud TPU-Gerät wird das ResNet-50-Modell über 90 Epochen trainiert und die Ergebnisse werden nach jedem Trainingsschritt bewertet. Die Anzahl der Trainingsschritte wird mit dem Flag
train_steps
festgelegt. Mit der folgenden Skriptbefehlszeile sollte das Modell in etwa 15 Minuten trainiert werden.Da das Training und die Bewertung für das fake_imagenet-Dataset durchgeführt werden, weichen die Trainings- und Bewertungsergebnisse von den tatsächlichen Ergebnisse ab, die Sie bei der Ausführung des Trainings und der Bewertung mit einem echten Dataset erhalten hätten.
Wenn Sie dieses Skript für ein echtes Dataset ausführen, verwenden Sie das Flag
train_steps
, um die Anzahl der Trainingsschritte anzugeben. In den.yaml
-Dateien im Verzeichnis/usr/share/tpu/models/official/resnet/configs/cloud
sehen Sie, wie viele Trainingsschritte Sie verwenden sollten.(vm)$ python3 resnet_main.py \ --tpu=${TPU_NAME} \ --data_dir=${DATA_DIR} \ --model_dir=${MODEL_DIR} \ --train_steps=500 \ --config_file=configs/cloud/${ACCELERATOR_TYPE}.yaml
Beschreibung der Befehls-Flags
tpu
- Gibt den Namen der Cloud TPU an. Beachten Sie, dass
ctpu
diesen Namen als Umgebungsvariable (TPU_NAME
) an die Compute Engine-VM übergibt. data_dir
- Der Cloud Storage-Pfad der Trainingseingabe. In diesem Beispiel ist er auf das Dataset "fake_imagenet" festgelegt.
model_dir
- Der Cloud Storage-Bucket, in dem während des Trainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner verwenden, um zuvor generierte Prüfpunkte zu laden, die auf einer TPU mit derselben Größe und TensorFlow-Version erstellt wurden.
config_file
- Gibt die YAML-Konfigurationsdatei an, die während des Trainings verwendet werden soll. Der Name dieser Datei entspricht dem verwendeten TPU-Typ. Beispiel:
v2-8.yaml
.
Die Ausgabe des Trainingsskripts sollte so aussehen:
Eval results at step 500: { 'top_1_accuracy': 0.0010579427, 'top_5_accuracy': 0.005391439, 'global_step': 500, 'loss': 8.253192 }
An dieser Stelle können Sie entweder diese Anleitung beenden und Ihre GCP-Ressourcen bereinigen oder die Ausführung des Modells auf Cloud TPU Pods kennenlernen.
Modell mit Cloud TPU Pods skalieren
Wenn Sie ein Modell mit Cloud TPU Pods skalieren, können Sie schneller Ergebnisse erzielen. Das vollständig unterstützte ResNet50-Modell kann mit den folgenden Pod-Slices verwendet werden:
- v2-32
- v2-128
- v2-256
- v2-512
- v3-32
- v3-128
- v3-256
- v3-512
- v3-1024
- v3-2048
Wenn Sie Cloud TPU Pods verwenden, trainieren Sie zuerst das Modell mit einem Pod und verwenden dann ein einzelnes Cloud TPU-Gerät, um das Modell zu bewerten.
Cloud TPU Pods trainieren
Löschen Sie die Cloud TPU-Ressource, die Sie zum Trainieren des Modells auf einem einzelnen Gerät erstellt haben.
(vm)$ gcloud compute tpus execution-groups delete resnet-tutorial \ --zone=europe-west4-a \ --tpu-only
Führen Sie den Befehl
gcloud compute tpus execution-groups
mit dem Parameteraccelerator-type
aus, um den Pod-Slice anzugeben, den Sie verwenden möchten. Der folgende Befehl verwendet beispielsweise einen v3-32-Pod-Slice.(vm)$ gcloud compute tpus execution-groups create --name=resnet-tutorial \ --accelerator-type=v2-32 \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --tpu-only
Beschreibung der Befehls-Flags
name
- Der Name der zu erstellenden Cloud TPU.
accelerator-type
- Der Typ der zu erstellenden Cloud TPU.
zone
- Die Zone, in der Sie die Cloud TPU erstellen möchten.
tf-version
- Die Version von TensorFlow
gcloud
wird auf der VM installiert. tpu-only
- Erstellen Sie nur eine Cloud TPU. Standardmäßig werden mit dem Befehl
gcloud
eine VM und eine Cloud TPU erstellt.
Aktualisieren Sie die Umgebungsvariablen
TPU_NAME
undACCELERATOR_TYPE
, um einen TPU-Pod-Namen als Beschleunigertyp anzugeben.(vm)$ export TPU_NAME=resnet-tutorial (vm)$ export ACCELERATOR_TYPE=v2-32
Aktualisieren Sie das Verzeichnis
MODEL_DIR
, um die Trainingsdaten zu speichern.(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/resnet-tutorial
Trainieren Sie das Modell und aktualisieren Sie den Parameter
config_file
, um die Konfigurationsdatei zu verwenden, die dem Pod-Slice entspricht, den Sie verwenden möchten. Das Trainingsskript verwendet beispielsweise die Konfigurationsdateiv2-32.yaml
.Das Skript trainiert das Modell für das Dataset "fake_im oben" in 35 Epochen. Die Ausführung auf einer v3-128 Cloud TPU dauert ungefähr 90 Minuten.
(vm)$ python3 resnet_main.py \ --tpu=${TPU_NAME} \ --data_dir=${DATA_DIR} \ --model_dir=${MODEL_DIR} \ --train_steps=500 \ --config_file=configs/cloud/${ACCELERATOR_TYPE}.yaml
Beschreibung der Befehls-Flags
tpu
- Der Name Ihrer Cloud TPU.
data_dir
- Der Cloud Storage-Pfad der Trainingseingabe. In diesem Beispiel ist er auf das Dataset "fake_imagenet" festgelegt.
model_dir
- Der Cloud Storage-Bucket, in dem während des Trainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner verwenden, um zuvor generierte Prüfpunkte zu laden, die auf einer TPU mit derselben Größe und TensorFlow-Version erstellt wurden.
train_steps
- Die Anzahl der Schritte für das Training.
config_file
- Gibt die YAML-Konfigurationsdatei an, die während des Trainings verwendet werden soll. Der Name dieser Datei entspricht dem verwendeten TPU-Typ. Beispiel:
v2-8.yaml
.
Modell bewerten
In diesem Schritt verwenden Sie Cloud TPU, um das oben trainierte Modell anhand der Bewertungsdaten von "fake_imagenet" zu bewerten.
Löschen Sie die Cloud TPU-Ressource, die Sie zum Trainieren des Modells erstellt haben.
(vm)$ gcloud compute tpus execution-groups delete resnet-tutorial \ --zone=europe-west4-a \ --tpu-only
Erstellen Sie eine v3-8 Cloud TPU-Pod-Ressource.
(vm)$ gcloud compute tpus execution-groups create \ --tpu-only \ --name=resnet-tutorial \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --accelerator-type=v2-8
Beschreibung der Befehls-Flags
Aktualisieren Sie die Umgebungsvariable
TPU_NAME
.(vm)$ export TPU_NAME=resnet-eval
Führen Sie die Modellbewertung aus. Fügen Sie dieses Mal das Flag
mode
hinzu und setzen Sie es aufeval
.(vm)$ python3 resnet_main.py \ --tpu=${TPU_NAME} \ --data_dir=${DATA_DIR} \ --model_dir=${MODEL_DIR} \ --mode=eval \ --config_file=configs/cloud/${ACCELERATOR_TYPE}.yaml
Beschreibung der Befehls-Flags
tpu
- Die Cloud TPU, die für das Training verwendet werden soll.
data_dir
- Hier muss der Cloud Storage-Pfad zu den gespeicherten Trainingsdaten angegeben werden. In diesem Beispiel ist er auf das Dataset „fake_imagenet“ festgelegt.
model_dir
- Der Cloud Storage-Pfad, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner wiederverwenden, um zuvor generierte Prüfpunkte zu laden und zusätzliche Prüfpunkte zu speichern, sofern die vorherigen Prüfpunkte mit einer Cloud TPU derselben Größe und TensorFlow-Version erstellt wurden.
mode
- Eine der folgenden Werte:
train
,eval
,train_and_eval
oderpredict
. config_file
- Gibt die YAML-Konfigurationsdatei an, die während des Trainings verwendet werden soll. Der Name dieser Datei entspricht dem verwendeten TPU-Typ. Beispiel:
v2-8.yaml
.
Dadurch wird eine Ausgabe generiert, die etwa so aussieht:
Eval results: { 'loss': 8.255788, 'top_1_accuracy': 0.0009969076, 'global_step': 0, 'top_5_accuracy': 0.005126953 }. Elapsed seconds: 76
Da das Dataset fake_imagenet für das Training und die Bewertung verwendet wurde, weichen die Ergebnisse von der tatsächlichen Ausgabe ab, die Sie bei Ausführung des Trainings und der Bewertung mit einem echten Dataset erhalten hätten.
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.
Trennen Sie die Verbindung zur Compute Engine-Instanz, sofern noch nicht geschehen:
(vm)$ exit
Die Eingabeaufforderung sollte nun
username@project
lauten und angeben, dass Sie sich in Cloud Shell befinden.Verwenden Sie in Cloud Shell den folgenden Befehl, um Ihre Compute Engine-VM und Cloud TPU zu löschen:
$ gcloud compute tpus execution-groups delete resnet-tutorial \ --zone=europe-west4-a
Prüfen Sie, ob die Ressourcen gelöscht wurden. Führen Sie dazu
gcloud compute tpus execution-groups list
aus. Der Löschvorgang kann einige Minuten dauern. Eine Antwort wie die folgende gibt an, dass Ihre Instanzen erfolgreich gelöscht wurden.$ gcloud compute tpus execution-groups list \ --zone=europe-west4-a
Sie sollten eine leere Liste der TPUs sehen, die in etwa so aussieht:
NAME STATUS
Löschen Sie Ihren Cloud Storage-Bucket wie unten gezeigt mit
gsutil
. Ersetzen Sie bucket-name durch den Namen des Cloud Storage-Buckets.$ gsutil rm -r gs://bucket-name
Weitere Informationen
In den Cloud TPU-Anleitungen von TensorFlow wird das Modell in der Regel mithilfe eines Beispiel-Datasets trainiert. Die Ergebnisse dieser Schulung können nicht für Inferenzen verwendet werden. Wenn Sie ein Inferenzmodell verwenden möchten, können Sie die Daten mit einem öffentlich verfügbaren Dataset oder Ihrem eigenen Dataset trainieren. TensorFlow-Modelle, die auf Cloud TPUs trainiert werden, benötigen im Allgemeinen Datasets im Format TFRecord.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 TFRecords-Format konvertieren. Weitere Informationen finden Sie unter TFRecord und tf.Example
Hyperparameter-Feinabstimmung
Sie können die Hyperparameter des Modells optimieren, um die Leistung des Modells mit Ihrem Dataset zu verbessern. Informationen zu Hyperparametern, die für alle TPU-unterstützten Modelle üblich sind, finden Sie auf GitHub. Informationen zu modellspezifischen Hyperparametern finden Sie im Quellcode für die einzelnen Modelle. Weitere Informationen zur Hyperparameter-Abstimmung finden Sie unter Übersicht über Hyperparameter-Abstimmung, Hyperparameter-Abstimmungsdienst und Hyperparameter abstimmen.
Inferenz
Sobald Ihr Modell trainiert ist, können Sie es für Inferenz (auch als Vorhersage bezeichnet) verwenden. AI Platform ist eine cloudbasierte Lösung, mit der Sie Modelle für maschinelles Lernen entwickeln, trainieren und bereitstellen können. Sobald ein Modell bereitgestellt wurde, können Sie den AI Platform Prediction-Dienst verwenden.
- Mehr über
ctpu
und die Installation auf einem lokalen Computer - TPU-Tools in TensorBoard
- ResNet mit Cloud TPU und GKE trainieren
- Anleitung für das RetinaNet-Objekterkennungsmodell durcharbeiten
- SqueezeNet-Modell von TensorFlow auf Cloud TPU ausführen. Verwenden Sie dazu die Anleitung oben als Ausgangspunkt. Die Modellarchitekturen für SqueezeNet und ResNet-50 sind ähnlich. Sie können dieselben Daten und Befehlszeilen-Flags zum Trainieren des Modells verwenden.