Deeplab-v3 in Cloud TPU ausführen

In dieser Anleitung erfahren Sie, wie Sie das Deeplab-v3-Modell in Cloud TPU trainieren.

In der folgenden Anleitung wird davon ausgegangen, dass Sie bereits mit dem Ausführen eines Modells auf Cloud TPU vertraut sind. Wenn Sie Cloud TPU noch nicht kennen, finden Sie in der Kurzanleitung eine grundlegende Einführung.

Wenn Sie auf einem TPU Pod-Slice trainieren möchten, lesen Sie Auf TPU Pods trainieren, um mehr über Parameteränderungen für Pod-Slices zu erfahren.

Dieses Modell ist ein bildsemantisches Segmentierungsmodell. Solche Modelle konzentrieren sich auf das Identifizieren und Lokalisieren mehrerer Objekte in einem einzigen Bild. Diese Art von Modell wird häufig bei der Anwendung von maschinellem Lernen wie beim autonomen Fahren, bei geospatialer Bildverarbeitung und bei medizinischer Bildgebung verwendet.

In dieser Anleitung führen Sie ein Trainingsmodell anhand des PASCAL VOC 2012-Datasets aus. Weitere Informationen zu diesem Dataset finden Sie auf der Startseite zu PASCAL Visual Object Classes.

Ziele

  • Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
  • Installieren Sie die erforderlichen Pakete:
  • PASCAL VOC 2012-Dataset herunterladen und konvertieren
  • Trainieren Sie das Deeplab-Modell.
  • Bewerten Sie das Deeplab-Modell.

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

    Damit die Cloud TPU im Storage-Bucket lesen und schreiben kann, benötigt das Dienstkonto für Ihr Projekt dafür Lese-/Schreib- oder Administratorberechtigungen. Weitere Informationen zum Aufrufen und Festlegen dieser Berechtigungen finden Sie im Abschnitt zu Storage-Buckets.

  5. Starten Sie mit dem Befehl ctpu up eine Compute Engine-VM.

    $ ctpu up --zone=us-central1-b \
     --machine-type=n1-standard-8 \
     --vm-only \
     --tf-version=1.15.3 \
     --name=deeplab-tutorial
    
  6. Die von Ihnen angegebene Konfiguration wird angezeigt. Geben Sie y zum Bestätigen oder n zum Abbrechen ein.

  7. 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 deeplab-tutorial --zone=us-central1-b
    

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

Zusätzliche Pakete installieren

Für dieses Modell müssen Sie die folgenden zusätzlichen Pakete in Ihrer Compute Engine-Instanz installieren:

  • jupyter
  • matplotlib
  • PrettyTable
  • tf_slim
  (vm)$ pip3 install --user jupyter
  (vm)$ pip3 install --user matplotlib
  (vm)$ pip3 install --user PrettyTable
  (vm)$ pip3 install --user tf_slim
  1. Erstellen Sie Umgebungsvariablen für Ihren Storage-Bucket und den TPU-Namen.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export TPU_NAME=deeplab-tutorial
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/deeplab_data
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/deeplab_model
    (vm)$ export PYTHONPATH=${PYTHONPATH}:/usr/share/models/research:/usr/share/models/research/slim
    

Dataset vorbereiten

  1. PASCAL VOC 2012-Dataset herunterladen und konvertieren

    Bei diesem Modell wird das PASCAL VOC 2012-Dataset für Training und Bewertung verwendet. Führen Sie das folgende Skript aus, um das Dataset herunterzuladen und in das Format TFRecord von TensorFlow zu konvertieren:

     (vm)$ bash /usr/share/models/research/deeplab/datasets/download_and_convert_voc2012.sh
    
  2. Vortrainierten Prüfpunkt herunterladen

    In diesem Schritt laden Sie den geänderten vorab ausgegebenen Prüfpunkt "resnet 101" herunter. Verwenden Sie dazu folgenden Befehl:

     (vm)$ wget http://download.tensorflow.org/models/resnet_v1_101_2018_05_04.tar.gz
    

    Extrahieren Sie dann den Inhalt der tar-Datei:

     (vm)$ tar -vxf resnet_v1_101_2018_05_04.tar.gz
    
  3. Daten in den Cloud Storage-Bucket hochladen

    Jetzt können Sie Ihre Daten in den zuvor erstellten Cloud Storage-Bucket hochladen:

    (vm)$ gsutil -m cp -r pascal_voc_seg/tfrecord ${DATA_DIR}/tfrecord
    
    (vm)$ gsutil -m cp -r resnet_v1_101 ${DATA_DIR}
    

Erstellen Sie eine Cloud TPU-Ressource

Führen Sie den folgenden Befehl aus, um die Cloud TPU zu erstellen.

  (vm)$ ctpu up --tpu-only \
  --tf-version=1.15.3 \
  --tpu-size=v3-8 \
  --name=deeplab-tutorial

Modell trainieren

Führen Sie das Trainingsskript für 2.000 Trainingsschritte aus. Dies dauert etwa 20 Minuten. Entfernen Sie das Flag --train_steps=2000 aus der Befehlszeile des Trainingsskripts, um Konvergenze auszuführen. Die Ausführung bis zur Konverenz dauert etwa 10 Stunden.

(vm)$ python3 /usr/share/tpu/models/experimental/deeplab/main.py \
--mode='train' \
--num_shards=8 \
--alsologtostderr=true \
--model_dir=${MODEL_DIR} \
--dataset_dir=${DATA_DIR}/tfrecord \
--init_checkpoint=${DATA_DIR}/resnet_v1_101/model.ckpt \
--model_variant=resnet_v1_101_beta \
--image_pyramid=1. \
--aspp_with_separable_conv=false \
--multi_grid=1 \
--multi_grid=2 \
--multi_grid=4 \
--decoder_use_separable_conv=false \
--train_split='train' \
--train_steps=2000 \
--tpu=${TPU_NAME}

Modell auf einem Cloud TPU-Gerät bewerten

Wenn das Training abgeschlossen ist, können Sie das Modell bewerten. Ändern Sie dazu das Flag --mode von train in eval:

(vm)$ python3 /usr/share/tpu/models/experimental/deeplab/main.py \
--mode='eval' \
--num_shards=8 \
--alsologtostderr=true \
--model_dir=${MODEL_DIR} \
--dataset_dir=${DATA_DIR}/tfrecord \
--init_checkpoint=${DATA_DIR}/resnet_v1_101/model.ckpt \
--model_variant=resnet_v1_101_beta \
--image_pyramid=1. \
--aspp_with_separable_conv=false \
--multi_grid=1 \
--multi_grid=2 \
--multi_grid=4 \
--decoder_use_separable_conv=false \
--train_split='train' \
--tpu=${TPU_NAME}

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-VM:

    (vm)$ exit
    

    Die Eingabeaufforderung sollte nun username@projectname lauten, womit angezeigt wird, dass Sie sich in Cloud Shell befinden.

  2. Führen Sie in Cloud Shell den Befehl ctpu delete mit dem Flag "--zone" aus, das Sie auch beim Einrichten der Cloud TPU angegeben haben, um die Compute Engine-VM und die Cloud TPU zu löschen:

    $ ctpu delete --zone=us-central1-b \
      --name=deeplab-tutorial
    
  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:

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