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

MNIST auf Cloud TPU ausführen

Diese Anleitung enthält eine allgemeine Beschreibung des MNIST-Modells, Anleitungen zum Herunterladen des TensorFlow-TPU-Codebeispiels für MNIST und eine Anleitung zum Ausführen des Codes in der Cloud TPU.

Modellbeschreibung

Das MNIST-Dataset enthält eine große Anzahl von Bildern handschriftlicher Ziffern im Bereich von 0 bis 9 sowie die Labels, die die Ziffer in jedem Bild identifizieren.

In dieser Anleitung wird ein ML-Modell trainiert, um Bilder basierend auf dem MNIST-Dataset zu klassifizieren. Nach dem Training klassifiziert das Modell eingehende Bilder in zehn Kategorien (0 bis 9) basierend auf den Erkenntnissen, die es über handgeschriebene Bilder aus dem MNIST-Dataset gewonnen hat. Sie können dem Modell dann ein Bild senden, das es zuvor noch nicht gesehen hat. Das Modell identifiziert die Ziffer im Bild basierend auf den beim Training gewonnen Erkenntnissen.

Das MNIST-Dataset besteht aus drei Teilen:

  • 55.000 Trainingsdatenbeispiele
  • 10.000 Testdatenbeispiele
  • 5.000 Validierungsdatenbeispiele

Weitere Informationen zum Dataset finden Sie auf der Website der MNIST-Datenbank.

Das Modell besteht aus sieben Ebenen:

  • 2 x Faltung
  • 2 x max. Pooling
  • 2 x Dichte (vollständig verbunden)
  • 1 x Dropout

Verlust wird über Softmax berechnet.

Diese Version des MNIST-Modells verwendet tf.estimator – eine TensorFlow API auf übergeordneter Ebene –, die zur Erstellung und Ausführung eines maschinellen Lernmodells in einer Cloud TPU empfohlen wird.

Die Tensorflow Estimator API vereinfacht den Modellentwicklungsprozess. Sie blendet die meisten Implementierungen auf untergeordneter Ebene aus, wodurch auch zwischen der TPU und anderen Testplattformen wie GPUs oder CPUs einfacher gewechselt werden kann.

Ziele

  • Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
  • Trainingsjob ausführen
  • Ausgabeergebnisse überprüfen

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Sie können mithilfe des Preisrechners die Kosten für Ihre voraussichtliche Nutzung kalkulieren.

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

  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 das gcloud-Befehlszeilentool für das Projekt, in dem Sie eine 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, GCP API-Aufrufe mit Ihren Anmeldedaten durchzuführen.

  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:

    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. Mit dem Befehl gcloud in dieser Anleitung werden Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet. 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.

  6. Starten Sie die dafür erforderlichen Compute Engine-Ressourcen mit dem Befehl gcloud.

    $ gcloud compute tpus execution-groups create \
     --name=mnist-tutorial \
     --zone=europe-west4-a \
     --tf-version=1.15.5 \
     --machine-type=n1-standard-1 \
     --accelerator-type=v3-8
    

    Beschreibung der Befehls-Flags

    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, die der Befehl gcloud auf Ihrer VM installiert.
    machine-type
    Der Maschinentyp der zu erstellenden Compute Engine-VM.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.

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

  7. Wenn Sie dazu aufgefordert werden, drücken Sie auf y, um Ihre Cloud TPU-Ressourcen zu erstellen.

Wenn der Befehl gcloud ausgeführt wurde, prüfen Sie, ob die Shell-Eingabeaufforderung von username@projectname in username@vm-name geändert wurde. Diese Änderung bedeutet, dass Sie jetzt bei Ihrer Compute Engine-VM angemeldet sind. Wenn Sie nicht mit der Compute Engine-Instanz verbunden sind, führen Sie den folgenden Befehl aus:

  gcloud compute ssh mnist-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.

  1. Erstellen Sie Umgebungsvariablen für den Storage-Bucket und das Modellverzeichnis. Ersetzen Sie bucket-name durch den Namen Ihres Cloud Storage-Buckets.
    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export TPU_NAME=mnist-tutorial
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mnist
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data
    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
    

Daten abrufen

Das MNIST-Dataset wird auf der Website der MNIST-Datenbank gehostet. Folgen Sie der nachstehenden Anleitung, um die Daten herunterzuladen, in das erforderliche Format zu konvertieren und die konvertierten Daten in Cloud Storage hochzuladen.

MNIST-Daten herunterladen und konvertieren

Das Skript convert_to_records.py lädt die Daten herunter und konvertiert sie in das Format TFRecord, das vom MNIST-Beispielmodell erwartet wird.

Verwenden Sie die folgenden Befehle, um das Skript auszuführen und die Dateien zu dekomprimieren:

(vm)$ python3 /usr/share/tensorflow/tensorflow/examples/how_tos/reading_data/convert_to_records.py --directory=./data
(vm)$ gunzip ./data/*.gz

Daten in Cloud Storage hochladen

Laden Sie die Daten in Ihren Cloud Storage-Bucket hoch, sodass der TPU-Server darauf zugreifen kann.

(vm)$ gsutil cp -r ./data ${DATA_DIR}

MNIST-TPU-Modell ausführen

Das MNIST-TPU-Modell ist auf Ihrer Compute Engine-VM im folgenden Verzeichnis vorinstalliert:

/usr/share/tpu/models/official/mnist/

Der Quellcode für das MNIST-TPU-Modell ist auch auf GitHub verfügbar. Sie können das Modell in einer Cloud TPU ausführen. Alternativ können Sie sich informieren, wie sich das Modell auf einer virtuellen Maschine ausführen lässt.

Modell in der Cloud TPU ausführen

In den folgenden Schritten bedeutet das Präfix (vm)$, dass Sie den Befehl auf Ihrer Compute Engine-VM ausführen sollten:

  1. Wechseln Sie in das Modellverzeichnis:

      (vm)$ cd /usr/share/tpu/models/official/mnist/
    
  2. Führen Sie das MNIST-Modell aus:

    (vm)$ python3 mnist_tpu.py \
      --tpu=${TPU_NAME} \
      --data_dir=${DATA_DIR} \
      --model_dir=${MODEL_DIR} \
      --use_tpu=True \
      --iterations=500 \
      --train_steps=2000
     

    Beschreibung der Befehls-Flags

    tpu
    Der Name der Cloud TPU. Wenn beim Einrichten der Compute Engine VM und Cloud TPU kein Name angegeben wird, wird standardmäßig Ihr Nutzername verwendet.
    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.
    use_tpu
    Legen Sie den Wert true fest, um auf einer Cloud TPU zu trainieren.
    iterations
    Die Anzahl der Batches, die für eine vollständige Epoche erforderlich sind.
    iterations
    Die Anzahl der Batches, die für eine vollständige Epoche erforderlich sind.

Modell auf einem lokalen (Nicht-TPU-)Computer ausführen

Wenn Sie das Modell auf einem Nicht-TPU-Computer ausführen möchten, lassen Sie --tpu weg und legen Sie --use_tpu=False fest.

Dadurch wird die Berechnung auf einer GPU ausgeführt, wenn eine vorhanden ist. Ist keine GPU vorhanden, wird die Berechnung von der CPU ausgeführt.

Was Sie erwarten können

Standardmäßig zeigt das tf.estimator-Modell den Verlustwert und die Schrittzeit im folgenden Format an:

Run stats:
{
  'accuracy_top_1': 0.9762369990348816,
  'eval_loss': 0.07863274961709976,
  'loss': 0.1111728847026825,
  'training_accuracy_top_1': 0.966645359992981
}

Bereinigen

So vermeiden Sie, dass Ihrem GCP-Konto die in diesem Thema verwendeten Ressourcen in Rechnung gestellt werden:

  1. Trennen Sie die Verbindung zur Compute Engine-VM:

    (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 execution-groups delete mnist-tutorial \
      --zone=europe-west4-a
    
  3. 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
    
       NAME             STATUS
    
  4. 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
    

Nächste Schritte

In dieser Anleitung haben Sie das MNIST-Modell mit einem Beispiel-Dataset trainiert. Die Ergebnisse dieses Trainings sind in den meisten Fällen 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. Für Modelle, die auf Cloud TPUs trainiert wurden, müssen Datasets das Format TFRecord haben.

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

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.