Verteilten TensorFlow-Code in Compute Engine ausführen

In dieser Anleitung wird erläutert, wie Sie ein Modell vom Typ Convolutional Neural Network mit dem MNIST-Dataset trainieren und dafür eine verteilte Konfiguration von TensorFlow in mehreren Compute Engine-Instanzen nutzen. Das MNIST-Dataset ermöglicht die Erkennung handgeschriebener Zahlen und ist ein weit verbreiteter Traningssatz für maschinelles Lernen bei der Bilderkennung.

TensorFlow ist eine durchgängige Open-Source-Plattform für maschinelles Lernen. Sie stellt eine umfassende, flexible Umgebung mit Tools, Bibliotheken und Community-Ressourcen dar, mit der Forscher den neuesten Stand der Technik in Bezug auf ML vorantreiben und Entwickler ML-basierte Anwendungen erstellen und bereitstellen können. TensorFlow wurde für die Ausführung auf mehreren Computern konzipiert, um die Trainingsarbeitslasten zu verteilen. In dieser Anleitung führen Sie TensorFlow auf mehreren VM-Instanzen von Compute Engine aus, um das Modell zu trainieren. Sie können auch stattdessen die AI Platform verwenden, die die Aufgaben zur Ressourcenzuweisung für Sie verwaltet und Ihre trainierten Modelle hostet. Wir empfehlen, die AI Platform zu verwenden, falls nichts dagegenspricht. Weitere Informationen finden Sie in der Version dieser Anleitung, in der die AI Platform und Cloud Datalab verwendet werden.

Im folgenden Diagramm wird die Architektur zum Ausführen einer verteilten TensorFlow-Konfiguration in Compute Engine und die Verwendung von AI Platform mit Cloud Datalab zum Ausführen von Vorhersagen mit Ihrem trainierten Modell dargestellt.

Diagramm zur Ausführung von Tensorflow in Compute Engine

In der vorliegenden Anleitung wird beschrieben, wie Sie diese Architektur einrichten und nutzen können. Dazu werden einige Konzepte erklärt.

Ziele

  • Compute Engine einrichten, um einen VM-Cluster zum Ausführen von TensorFlow zu erstellen.
  • Verteilten TensorFlow-Beispielcode auf Ihrem Compute Engine-Cluster zum Trainieren eines Modells ausführen. Dabei nutzt der Beispielcode die neuesten TensorFlow-Bibliotheken und -Muster und dient so als Referenz für den eigenen Trainingscode.
  • Trainiertes Modell auf der AI Platform bereitstellen, um eine benutzerdefinierte API für Vorhersagen zu erstellen und anschließend Vorhersagen mit einem Cloud Datalab-Notebook auszuführen.

Kosten

Die geschätzten Kosten zum Ausführen dieser Anleitung (sofern Sie jede Ressource einen ganzen lang Tag nutzen) betragen laut diesem Preisrechner ca. 1,20 $.

Vorbereitung

  1. Melden Sie sich in Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, registrieren Sie sich hier für ein neues Konto.

  2. Wählen Sie ein Google Cloud Platform-Projekt aus oder erstellen Sie eines.

    Zur Seite "Ressourcen verwalten"

  3. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Platform-Projekt aktiviert ist.

    Informationen zum Aktivieren der Abrechnung

  4. Aktivieren Sie die Compute Engine API and AI Platform Training and Prediction API erforderlichen APIs.

    Aktivieren Sie die APIs.

Vorlageninstanz erstellen

In dieser Anleitung wird Cloud Shell, eine voll funktionsfähige Linux-Shell in der Google Cloud Platform Console, verwendet.

  1. Rufen Sie Cloud Shell auf.

    Cloud Shell öffnen

  2. Legen Sie Ihre Compute Engine-Standardzone und Ihr Standardprojekt fest. Ersetzen Sie [YOUR_PROJECT_ID] durch Ihr GCP-Projekt (Google Cloud Platform).

    gcloud config set compute/zone us-east1-c
    gcloud config set project [YOUR_PROJECT_ID]
  3. Klonen Sie das GitHub-Repository:

    git clone https://github.com/GoogleCloudPlatform/cloudml-dist-mnist-example
    cd cloudml-dist-mnist-example
  4. Erstellen Sie die erste VM-Instanz aus einem Ubuntu Wily-Image:

    gcloud compute instances create template-instance \
    --image-project ubuntu-os-cloud \
    --image-family ubuntu-1604-lts \
    --boot-disk-size 10GB \
    --machine-type n1-standard-1
  5. Stellen Sie über ssh eine Verbindung zu der VM her:

    gcloud compute ssh template-instance
  6. Installieren Sie pip:

    sudo apt-get update
    sudo apt-get -y upgrade \
    && sudo apt-get install -y python-pip python-dev
  7. Installieren Sie TensorFlow:

    sudo pip install tensorflow
    
  8. (Optional) Befolgen Sie die Schritte zur Prüfung Ihrer Installation.

  9. Geben Sie exit ein, um zu Cloud Shell zurückzukehren.

  10. Überprüfen Sie die Version von TensorFlow, die in Ihrer Compute Engine-Instanz ausgeführt wird:

    sudo python -c 'import tensorflow as tf; print(tf.__version__)'
  11. Wenn die Version niedriger als 1.2.1 ist, benutzen Sie pip, um ein Upgrade auszuführen:

    sudo pip install --upgrade tensorflow

Cloud Storage-Bucket erstellen

Erstellen Sie als Nächstes einen Cloud Storage-Bucket, um Ihre MNIST-Dateien zu speichern. Gehen Sie dazu so vor:

  1. Erstellen Sie einen regionalen Cloud Storage-Bucket für die MNIST-Datendateien, die für die Worker-Instanzen freigegeben werden sollen:

    MNIST_BUCKET="mnist-$RANDOM"
    gsutil mb -c regional -l us-east1 gs://${MNIST_BUCKET}
  2. Laden Sie mit dem folgenden Skript die MNIST-Datendateien herunter und kopieren Sie diese in den Bucket:

    sudo ./scripts/create_records.py
    gsutil cp /tmp/data/train.tfrecords gs://${MNIST_BUCKET}/data/
    gsutil cp /tmp/data/test.tfrecords gs://${MNIST_BUCKET}/data/

Vorlagenimage und Trainingsinstanzen erstellen

Wenn Sie die Worker-, Master- und Parameterserverinstanzen erstellen möchten, wandeln Sie die Vorlageninstanz in ein Image um und verwenden Sie dieses Image, um jede neue Instanz zu erstellen.

  1. Deaktivieren Sie die automatische Löschfunktion für die VM template-instance. Dadurch bleibt das Laufwerk erhalten, wenn die VM gelöscht wird:

    gcloud compute instances set-disk-auto-delete template-instance \
    --disk template-instance --no-auto-delete
  2. Löschen Sie template-instance:

    gcloud compute instances delete template-instance
  3. Erstellen Sie das Image template-image aus dem Laufwerk template-instance:

    gcloud compute images create template-image \
    --source-disk template-instance
  4. Erstellen Sie die weiteren Instanzen. Erstellen Sie für diese Anleitung vier Instanzen mit den Namen master-0, worker-0,worker-1, und ps-0. Der Bereich storage-rw ermöglicht den Instanzen, auf Ihren Cloud Storage-Bucket zuzugreifen. Achten Sie darauf, die Instanznamen mit Leerzeichen voneinander zu trennen:

    gcloud compute instances create \
    master-0 worker-0 worker-1 ps-0 \
    --image template-image \
    --machine-type n1-standard-4 \
    --scopes=default,storage-rw

Der Cluster ist für die verteilte Ausführung von TensorFlow bereit.

Verteilten TensorFlow-Code ausführen

In diesem Abschnitt führen Sie ein Skript aus, das alle Ihre VM-Instanzen anweist, TensorFlow-Code auszuführen, um das Modell zu trainieren.

  1. Führen Sie in Cloud Shell den folgenden Befehl im Verzeichnis cloudml-dist-mnist-example aus:

    ./scripts/start-training.sh gs://${MNIST_BUCKET}

    Das Skript mit dem Namen start-training.sh verschiebt den Code auf jede VM und sendet die erforderlichen Parameter, um den TensorFlow-Prozess zum Erstellen des verteilten Clusters auf jedem Rechner zu starten. Der Ausgabestream in Cloud Shell zeigt die Verlust- und Genauigkeitswerte für das Test-Dataset an.

    Genauigkeitswerte im Terminal

    Wenn das Training abgeschlossen ist, gibt das Skript den Speicherort der neu erstellten Modelldateien aus:

    Trained model is stored in gs://${MNIST_BUCKET}/job_[TIMESTAMP]/export/Servo/[JOB_ID]/
  2. Kopieren Sie den Standort des Bucketpfads für die Verwendung in späteren Schritten.

Modell für Prognosen veröffentlichen

Sie haben ein neues Modell generiert, mit dem Sie Prognosen erstellen können. Zum Trainieren anspruchsvollerer Modelle ist komplexerer TensorFlow-Code erforderlich. Die Konfiguration der Rechen- und Speicherressourcen ist jedoch ähnlich.

Das Trainieren des Modells ist jedoch nicht alles. Sie müssen Ihr Modell in Ihre Anwendung integrieren oder in einen API-Service mit Authentifizierung einbetten und schließlich die Skalierung anpassen. Es ist also noch eine Menge Entwicklungsarbeit nötig, bis Ihr Modell effizient und einsatzbereit ist.

Die AI Platform kann einen Teil dieser Arbeit erleichtern. Sie bietet eine vollständig verwaltete Version von TensorFlow, die auf der Google Cloud Platform ausgeführt wird. Über die AI Platform erhalten Sie alle leistungsstarken Funktionen von TensorFlow, ohne dass Sie eine zusätzliche Infrastruktur einrichten oder Software installieren müssen. Sie können Ihr verteiltes Training automatisch skalieren, sodass Sie so viele CPUs oder GPUs verwenden, wie Sie benötigen. Sie zahlen nur für das, was Sie tatsächlich nutzen.

Da die AI Platform TensorFlow im Hintergrund ausführt, ist Ihre gesamte Arbeit portierbar und Sie sind nicht auf ein proprietäres Tool angewiesen.

Arbeiten Sie die Anleitung Verteilten TensorFlow-Code mit Cloud Datalab verwenden durch, um denselben Beispielcode für das Trainieren Ihres Modells mithilfe der AI Platform zu verwenden.

Sie können Ihr Modell auch für Vorhersagen auf der AI Platform bereitstellen. Führen Sie die folgenden Schritte aus, um Ihr Modell auf der AI Platform bereitzustellen. Durch die Bereitstellung Ihres Modells können Sie es schnell testen und skaliert anwenden. Dabei stehen Ihnen alle Sicherheits- und Zuverlässigkeitsfunktionen zur Verfügung, die Sie von einem von Google verwalteten Dienst erwarten.

In den folgenden Schritten wird der Bucket-Pfad des Modells verwendet, der vorher vom Skript start-training.sh ausgegeben wurde.

  1. Rufen Sie den Ausgabepfad zu Ihrem Cloud Storage-Bucket mit generierten Modellen auf. Er hat das folgende Format, wobei [JOB_ID] die Job-ID ist. Diesen Pfad verwenden Sie im nächsten Schritt:

    MODEL_BUCKET: gs://${MNIST_BUCKET}/job_[TIMESTAMP]/export/Servo/[JOB_ID]
  2. Definieren Sie mit dem gcloud-Befehlszeilentool eine neue Version v1 Ihres Modells und verweisen Sie auf die Modelldateien in Ihrem Bucket. Die Ausführung des folgenden Befehls kann einige Minuten dauern. Ersetzen Sie [YOUR_BUCKET_PATH] durch den Ausgabepfad aus dem vorherigen Schritt. Der Pfad beginnt mit gs://.

    MODEL="MNIST"
    MODEL_BUCKET=[YOUR_BUCKET_PATH]
    gcloud ml-engine models create ${MODEL} --regions us-east1
    gcloud ml-engine versions create \
     --origin=${MODEL_BUCKET} --model=${MODEL} v1
  3. Legen Sie v1 als Standardversion für Ihr Modell fest:

    gcloud ml-engine versions set-default --model=${MODEL} v1

Das Modell wird jetzt mit der AI Platform ausgeführt und kann Vorhersagen verarbeiten. Im nächsten Abschnitt wird Cloud Datalab verwendet, um Vorhersagen zu erstellen und zu visualisieren.

Vorhersagen mit Cloud Datalab ausführen

Erstellen Sie zum Testen Ihrer Vorhersagen eine Cloud Datalab-Instanz, die Code mithilfe von interaktiven Jupyter-Notebooks ausführt.

  1. Geben Sie den folgenden Befehl in Cloud Shell ein, um eine Cloud Datalab-Instanz zu erstellen:

    datalab create mnist-datalab
    
  2. Rufen Sie in Cloud Shell die Seite mit der Liste der Cloud Datalab-Notebooks auf. Klicken Sie dazu auf das quadratische Symbol Cloud Shell-Webvorschau rechts oben.

  3. Wählen Sie Port ändern und dann Port 8081 aus, um einen neuen Tab in Ihrem Browser zu öffnen.

  4. Erstellen Sie ein neues Notebook in der Cloud Datalab-Anwendung. Klicken Sie dazu oben rechts auf +Notebook.

  5. Fügen Sie den folgenden Text in die erste Zelle des neuen Notebooks ein:

    %%bash
    wget https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-dist-mnist-example/master/notebooks/Online%20prediction%20example.ipynb
    cat Online\ prediction\ example.ipynb > Untitled\ Notebook.ipynb
  6. Klicken Sie auf Ausführen oben auf der Seite, um das Notebook Online prediction example.ipynb herunterzuladen. Das Skript kopiert den Inhalt des Remotenotebooks in das aktuelle Notebook.

  7. Aktualisieren Sie die Browserseite, um den neuen Notebookinhalt zu laden. Wählen Sie danach die erste Zelle aus, die den JavaScript-Code enthält, und klicken Sie dann auf Ausführen.

  8. Scrollen Sie auf der Seite nach unten bis zum Feld für das Zeichnen von Zahlen und zeichnen Sie mit dem Cursor eine Zahl:

    Die mit einem Cursor gezeichnete Zahl 3

  9. Klicken Sie in die nächste Zelle, um sie zu aktivieren. Klicken Sie dann oben auf der Seite auf den Abwärtspfeil neben der Schaltfläche Ausführen und wählen Sie Von dieser Zelle ausführen aus.

    Die Ausgabe der Vorhersage ist ein Array der Länge 10, in dem jeder Index (0-9) eine Zahl enthält, die mit der betreffenden Zahl übereinstimmt. Je näher diese Zahl an 1 liegt, desto eher entspricht der Index der von Ihnen eingegebenen Zahl. Der in der Liste hervorgehobene Slot 3 liegt sehr nahe an 1 und stimmt daher mit hoher Wahrscheinlichkeit mit der Zahl überein.

    PROBABILITIES
    [4.181503356903704e-07,
    7.12400151314796e-07,
    0.00017898145597428083,
    0.9955494403839111,
    5.323939553103507e-11,
    0.004269002005457878,
    7.927398321116996e-11,
    1.2688398953741853e-07,
    1.0825967819982907e-06,
    2.2037748692582682e-07]

Das Balkendiagramm in der letzten Zelle des Notebooks zeigt deutlich, dass Ihre Zahl (3) vorhergesagt wurde.

Das Balkendiagramm zeigt, dass die Zahl 3 ausgewählt wurde.

Bereinigen

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

  1. Löschen Sie die Version Ihres Modells:

    gcloud ml-engine versions delete v1 --model=MNIST
  2. Löschen Sie das Modell:

    gcloud ml-engine models delete MNIST
  3. Löschen Sie Ihren Cloud Storage-Bucket:

    gsutil rm -r gs://${MNIST_BUCKET}
  4. Löschen Sie Ihre VMs, einschließlich Cloud Datalab:

    gcloud compute instances delete master-0 worker-0 worker-1 ps-0 mnist-datalab
  5. Löschen Sie Ihre VM-Vorlagenimage:

    gcloud compute images delete template-image
  6. Löschen Sie Ihr persistentes Cloud Datalab-Laufwerk:

    gcloud compute disks delete mnist-datalab-pd --zone us-east1-c

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...