MNIST auf Cloud TPU ausführen (TF 2.x)

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.

Haftungsausschluss

In dieser Anleitung wird ein Dataset eines Drittanbieters verwendet. Google bietet keine Zusicherungen, Gewährleistungen oder andere Garantien hinsichtlich der Gültigkeit oder anderer Aspekte dieses Datasets.

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:

  • 60.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 kategoriale Cross-Entropie berechnet.

Diese Version des MNIST-Modells verwendet die Keras API, die neben anderen Methoden zum Erstellen und Ausführen eines Modells für maschinelles Lernen auf einer Cloud TPU empfohlen wird.

Keras vereinfacht den Modellentwicklungsprozess, indem der Großteil der Implementierungen auf untergeordneter Eben ausgeblendet wird, wodurch auch ein Wechsel zwischen TPU und anderen Testplattformen wie GPUs oder CPUs erleichtert wird.

Ziele

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

Kosten

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

  • Compute Engine
  • Cloud TPU
  • cl

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

Dieser Abschnitt enthält Informationen zum Einrichten eines Cloud Storage-Buckets und einer Compute Engine-VM.

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Cloud Shell öffnen

  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}
    
  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 us-central1 -b on gs://bucket-name
    

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, und die Trainingsergebnisse. Mit dem in dieser Anleitung verwendeten ctpu up-Tool werden Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie detailliertere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

  6. Starten Sie mit dem Befehl ctpu up eine Compute Engine-VM und eine Cloud TPU.

    $ ctpu up --zone=us-central1-b \
     --tf-version=2.3.1 \
     --name=mnist-tutorial
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    tf-version
    Die Version von Tensorflow, die von ctpu auf der VM installiert wird.
    name
    Der Name der zu erstellenden Cloud TPU.

    Weitere Informationen zum CTPU-Dienstprogramm finden Sie unter CTPU-Referenz.

  7. Die von Ihnen angegebene Konfiguration wird angezeigt. Geben Sie y zum Bestätigen oder n zum Abbrechen ein.

  8. Wenn der Befehl ctpu up ausgeführt wurde, sollten Sie prüfen, 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.

    gcloud compute ssh mnist-tutorial --zone=us-central1-b
    

    Führen Sie im weiteren Verlauf dieser Anleitung jeden Befehl, der mit (vm)$ beginnt, in Ihrem VM-Sitzungsfenster aus.

  9. Erstellen Sie eine Umgebungsvariable für den TPU-Namen.

    (vm)$ export TPU_NAME=mnist-tutorial
    
  10. Installieren Sie ein zusätzliches Paket.

    Die MNIST-Trainingsanwendung erfordert ein zusätzliches Paket. Installieren Sie es jetzt.

    (vm)$ sudo pip3 install tensorflow-model-optimization>=0.1.3
    

Einzelnes Cloud TPU-Gerät trainieren

Der Quellcode für das MNIST-TPU-Modell ist auf GitHub verfügbar.

  1. Legen Sie die folgenden Variablen fest: Ersetzen Sie bucket-name durch den Namen Ihres Buckets.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mnist
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data
    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  2. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    (vm)$ cd /usr/share/models/official/vision/image_classification
    
  3. Führen Sie das MNIST-Trainingsskript aus:

    (vm)$ python3 mnist_main.py \
      --tpu=${TPU_NAME} \
      --model_dir=${MODEL_DIR} \
      --data_dir=${DATA_DIR} \
      --train_epochs=10 \
      --distribution_strategy=tpu \
      --download
    

    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.
    model_dir
    Dies ist das Verzeichnis, das die Modelldateien enthält. In dieser Anleitung wird ein Ordner innerhalb des Cloud Storage-Buckets verwendet. Sie müssen diesen Ordner nicht vorher erstellen. Das Skript erstellt den Ordner, wenn er nicht vorhanden ist.
    data_dir
    Der Cloud Storage-Pfad der Trainingseingabe. In diesem Beispiel ist er auf das Dataset "fake_imagenet" festgelegt.
    train_epochs
    Die Anzahl der Versuche, das Modell mit dem gesamten Dataset zu trainieren.
    distribution_strategy
    Zum Trainieren des ResNet-Modells in einer Cloud TPU legen Sie für distribution_strategy den Wert tpu fest.
    download
    Ist true festgelegt, lädt das Skript das MNIST-Dataset herunter und verarbeitet es vor, sofern es noch nicht heruntergeladen wurde.

Auf einer Cloud TPU v3-8 wird das Trainingsskript in weniger als 5 Minuten ausgeführt. Die Ausgabe sieht in etwa so aus:

I1203 03:43:15.936553 140096948798912 mnist_main.py:165]
Run stats: {'loss': 0.11427700750786683, 'training_accuracy_top_1': 0.9657697677612305,
'accuracy_top_1': 0.9730902910232544, 'eval_loss': 0.08600160645114051}

Bereinigen

So vermeiden Sie, dass Ihrem Google Cloud Platform-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:

  1. Trennen Sie die Verbindung zur Compute Engine-Instanz, sofern noch nicht geschehen:

    (vm)$ exit
    

    Die Eingabeaufforderung sollte nun username@projectname lauten und angeben, dass Sie sich in Cloud Shell befinden.

  2. Führen Sie in der Cloud Shell ctpu delete mit den Flags --name und --zone aus, die Sie beim Einrichten der Compute Engine-VM und der Cloud TPU verwendet haben. Dadurch werden sowohl Ihre VM als auch Ihre Cloud TPU gelöscht.

    $ ctpu delete --name=mnist-tutorial --zone=us-central1-b
    
  3. Führen Sie ctpu status aus, um zu bestätigen, dass keine Instanzen zugeordnet wurden. So vermeiden Sie unnötige Gebühren für die TPU-Nutzung. Der Löschvorgang kann einige Minuten dauern. Eine Antwort wie die folgende gibt an, dass keine weiteren Instanzen vorhanden sind:

    $ ctpu status --name=mnist-tutorial --zone=us-central1-b
    
    2018/04/28 16:16:23 WARNING: Setting zone to "us-central1-b"
    No instances currently exist.
        Compute Engine VM:     --
        Cloud TPU:             --
    
  4. Führen Sie gsutil wie angegeben aus und ersetzen Sie dabei bucket-name durch den Namen des Cloud Storage-Buckets, den Sie für diese Anleitung erstellt haben:

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