ShapeMask auf Cloud TPU trainieren (TF 2.x)

In diesem Dokument wird dargestellt, wie das ShapeMask-Modell mithilfe von Cloud TPU mit dem COCO-Dataset ausgeführt wird.

In der folgenden Anleitung wird davon ausgegangen, dass Sie mit dem Ausführen eines Modells in 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.

Ziele

  • COCO-Dataset vorbereiten
  • Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
  • TPU-Ressourcen für Training und Evaluierung einrichten
  • Training und Bewertung auf einer einzelnen Cloud TPU oder einem Cloud TPU Pod ausführen

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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

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 ein Projekt aktiviert ist.

  4. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  5. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.

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

Cloud TPU-Training mit Einzelgerät

Dieser Abschnitt enthält Informationen zum Einrichten von Cloud Storage-, VM- und Cloud TPU-Ressourcen für das Training mit einem Einzelgerät.

Wenn Sie auf einem TPU Pod-Slice trainieren möchten, lesen Sie Auf TPU Pods trainieren, um mehr über die Änderungen nötig für Trainieren auf Pod-Slices zu erfahren.

  1. Erstellen Sie in Cloud Shell eine Variable für die ID Ihres Projekts.

    export PROJECT_ID=project-id
    
  2. Konfigurieren Sie die Google Cloud-Befehlszeile so, dass sie das Projekt verwendet, 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 auf Authorize unten auf der Seite, damit gcloud GCP API-Aufrufe mit Ihren Anmeldedaten durchführen kann.

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

COCO-Dataset vorbereiten

In dieser Anleitung wird das COCO-Dataset verwendet. Das Dataset muss im TFRecord-Format in einem Cloud Storage-Bucket vorliegen, der für das Training verwendet werden soll.

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.

Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, sowie die Trainingsergebnisse. Mit dem in dieser Anleitung verwendeten gcloud compute tpus execution-groups-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.

Wenn Sie das COCO-Dataset bereits in einem Cloud Storage-Bucket vorbereitet haben, der sich in der Zone befindet, die Sie zum Trainieren des Modells verwenden, können Sie die TPU-Ressourcen starten und die Cloud TPU für das Training vorbereiten. Führen Sie andernfalls folgende Schritte aus, um das Dataset vorzubereiten.

  1. Konfigurieren Sie gcloud in Ihrer Cloud Shell mit Ihrer Projekt-ID.

    export PROJECT_ID=project-id
    gcloud config set project ${PROJECT_ID}
    
  2. Erstellen Sie in Ihrer Cloud Shell mit folgendem Befehl einen Cloud Storage-Bucket:

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
    
  3. Starten Sie eine Compute Engine-VM-Instanz.

    Diese VM-Instanz wird ausschließlich zum Herunterladen und Vorverarbeiten des COCO-Datasets verwendet. Geben Sie in instance-name einen Namen Ihrer Wahl ein.

    $ gcloud compute tpus execution-groups create \
     --vm-only \
     --name=instance-name \
     --zone=europe-west4-a \
     --disk-size=300 \
     --machine-type=n1-standard-16 \
     --tf-version=2.8.0
    

    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 Ihre Cloud TPU erstellen möchten.
    disk-size
    Die Größe der Festplatte 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 gcloud compute tpus execution-groups auf der VM installiert.
  4. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet werden, melden Sie sich mit dem folgenden ssh-Befehl an. Wenn Sie bei der VM angemeldet sind, ändert sich die Shell-Eingabeaufforderung von username@projectname in username@vm-name:

      $ gcloud compute ssh instance-name --zone=europe-west4-a
      

  5. Richten Sie zwei Variablen ein, eine für den zuvor erstellten Storage-Bucket und eine für das Verzeichnis, das die Trainingsdaten (DATA_DIR) im Storage-Bucket enthält.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
  6. Installieren Sie die Pakete, die für die Vorverarbeitung der Daten erforderlich sind.

    (vm)$ sudo apt-get install -y python3-tk && \
      pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow && \
      pip3 install --user "git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI"
    
  7. Führen Sie das Skript download_and_preprocess_coco.sh aus, um das COCO-Dataset in einen Satz von TFRecords (*.tfrecord) zu konvertieren, der von der Trainingsanwendung erwartet wird.

    (vm)$ git clone https://github.com/tensorflow/tpu.git
    (vm)$ sudo bash tpu/tools/datasets/download_and_preprocess_coco.sh ./data/dir/coco
    

    Dadurch werden die erforderlichen Bibliotheken installiert und das Skript für die Vorverarbeitung ausgeführt. Dann werden verschiedene *.tfrecord-Dateien in Ihr lokales Datenverzeichnis ausgegeben. Der COCO-Download und das Ausführen des Konvertierungsskripts dauern ungefähr eine Stunde.

  8. Daten in den Cloud Storage-Bucket kopieren

    Nachdem Sie die Daten in TFRecords konvertiert haben, kopieren Sie sie mit dem Befehl gsutil aus dem lokalen Speicher in den Cloud Storage-Bucket. Die Annotationsdateien müssen ebenfalls kopiert werden. Diese Dateien helfen dabei, die Leistung des Modells zu validieren.

    (vm)$ gsutil -m cp ./data/dir/coco/*.tfrecord ${DATA_DIR}
    (vm)$ gsutil cp ./data/dir/coco/raw-data/annotations/*.json ${DATA_DIR}
    
  9. Bereinigen Sie die VM-Ressourcen.

    Nachdem das COCO-Dataset in TFRecords konvertiert und in DATA_DIR in Ihrem Cloud Storage-Bucket kopiert wurde, können Sie die Compute Engine-Instanz löschen.

    Trennen Sie die Verbindung zur Compute Engine-Instanz:

    (vm)$ exit
    

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

  10. Löschen Sie die Compute Engine-Instanz.

      $ gcloud compute instances delete instance-name
        --zone=europe-west4-a
      

TPU-Ressourcen starten und Modell trainieren

  1. Verwenden Sie den Befehl gcloud, um die TPU-Ressourcen zu starten. Der verwendete Befehl hängt davon ab, ob Sie TPU-VMs oder TPU-Knoten verwenden. Weitere Informationen zu beiden VM-Architekturen finden Sie unter Systemarchitektur.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm create shapemask-tutorial \
    --zone=europe-west4-a \
    --accelerator-type=v3-8 \
    --version=tpu-vm-tf-2.8.0
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie Ihre Cloud TPU erstellen möchten.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    version
    Die Version der Cloud TPU-Laufzeit.

    TPU-Knoten

    $ gcloud compute tpus execution-groups create  \
     --zone=europe-west4-a \
     --name=shapemask-tutorial \
     --accelerator-type=v3-8 \
     --machine-type=n1-standard-8 \
     --disk-size=300 \
     --tf-version=2.8.0
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie Ihre Cloud TPU erstellen möchten.
    name
    Der TPU-Name. Ist standardmäßig Ihr Nutzername, wenn nichts anderes angegeben ist.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    machine-type
    Der Maschinentyp der zu erstellenden Compute Engine-VM.
    disk-size
    Die Größe des Stamm-Volumes Ihrer Compute Engine-VM (in GB).
    tf-version
    Die Version von TensorFlow gcloud auf der VM installiert.

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

  2. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet werden, melden Sie sich mit dem folgenden ssh-Befehl an. Wenn Sie bei der VM angemeldet sind, ändert sich die Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    TPU-VM

    gcloud alpha compute tpus tpu-vm ssh shapemask-tutorial --zone=europe-west4-a
    

    TPU-Knoten

    gcloud compute ssh shapemask-tutorial --zone=europe-west4-a
    

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

  3. Installieren Sie TensorFlow-Anforderungen.

    TPU-VM

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
    

    TPU-Knoten

    (vm)$ pip3 install -r /usr/share/models/official/requirements.txt
    
  4. Für das Trainingsskript ist ein zusätzliches Paket erforderlich. Installieren Sie es jetzt.

    TPU-VM

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

    TPU-Knoten

    (vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
    
  5. Legen Sie die Variable für den Storage-Bucket-Namen fest. Ersetzen Sie bucket-name durch den Namen Ihres Storage-Buckets.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
  6. Legen Sie die Cloud TPU-Namensvariable fest.

    TPU-VM

    (vm)$ export TPU_NAME=local
    

    TPU-Knoten

    (vm)$ export TPU_NAME=shapemask-tutorial
    
  7. Legen Sie die Umgebungsvariable PYTHONPATH fest:

    TPU-VM

    (vm)$ export PYTHONPATH="/usr/share/tpu/models:${PYTHONPATH}"
    

    TPU-Knoten

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  8. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    TPU-VM

    (vm)$ cd /usr/share/tpu/models/official/legacy/detection
    

    TPU-Knoten

    (vm)$ cd /usr/share/models/official/legacy/detection
    
  9. Fügen Sie einige erforderliche Umgebungsvariablen hinzu:

    (vm)$ export RESNET_CHECKPOINT=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
    (vm)$ export SHAPE_PRIOR_PATH=gs://cloud-tpu-checkpoints/shapemask/kmeans_class_priors_91x20x32x32.npy
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/shapemask
    
  10. Trainieren Sie das ShapeMask-Modell:

    Das folgende Skript führt ein Beispieltraining aus, das mit nur 100 Schritten trainiert wird und etwa 10 Minuten auf einer v3-8-TPU benötigt. Das Training zur Konvergenz dauert etwa 22.500 Schritte und ca. 6 Stunden auf einer v3-8-TPU.

    (vm)$ python3 main.py \
      --strategy_type=tpu \
      --tpu=${TPU_NAME} \
      --model_dir=${MODEL_DIR} \
      --mode=train \
      --model=shapemask \
      --params_override="{train: {total_steps: 100, learning_rate: {init_learning_rate: 0.08, learning_rate_levels: [0.008, 0.0008], learning_rate_steps: [15000, 20000], }, checkpoint: { path: ${RESNET_CHECKPOINT},prefix: resnet50}, train_file_pattern: ${TRAIN_FILE_PATTERN}}, shapemask_head: {use_category_for_mask: true, shape_prior_path: ${SHAPE_PRIOR_PATH}}, shapemask_parser: {output_size: [640, 640]}}"
    

    Beschreibung der Befehls-Flags

    strategy_type
    Wenn Sie das Shapemask-Modell auf einer TPU trainieren möchten, müssen Sie distribution_strategy auf tpu festlegen.
    tpu
    Der Name der Cloud TPU. Dies wird mit der Umgebungsvariable TPU_NAME festgelegt.
    model_dir
    Das Verzeichnis, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Wenn der Ordner fehlt, wird er vom Programm erstellt. Wenn eine Cloud TPU verwendet wird, muss model_dir ein Cloud Storage-Pfad sein (gs://...). Sie können einen vorhandenen Ordner wiederverwenden, um aktuelle Prüfpunktdaten 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
    Legen Sie diesen Wert auf train fest, um das Modell zu trainieren, oder auf eval, um es zu bewerten.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter /usr/share/models/official/legacy/detection/main.py.

    Wenn das Training abgeschlossen ist, wird eine Meldung wie diese angezeigt:

    Train Step: 100/100  / loss = {'total_loss': 10.815635681152344,
    'loss': 10.815635681152344, 'retinanet_cls_loss': 1.4915691614151,
    'l2_regularization_loss': 4.483549118041992,
    'retinanet_box_loss': 0.013074751943349838,
    'shapemask_prior_loss': 0.17314358055591583,
    'shapemask_coarse_mask_loss': 1.953366756439209,
    'shapemask_fine_mask_loss': 2.216097831726074, 'model_loss': 6.332086086273193,
    'learning_rate': 0.021359999} / training metric = {'total_loss': 10.815635681152344,
    'loss': 10.815635681152344, 'retinanet_cls_loss': 1.4915691614151,
    'l2_regularization_loss': 4.483549118041992,
    'retinanet_box_loss': 0.013074751943349838,
    'shapemask_prior_loss': 0.17314358055591583,
    'shapemask_coarse_mask_loss': 1.953366756439209,
    'shapemask_fine_mask_loss': 2.216097831726074,
    'model_loss': 6.332086086273193, 'learning_rate': 0.021359999}
    
  11. Führen Sie das Skript aus, um das ShapeMask-Modell zu bewerten. Dies dauert auf einer v3-8-TPU etwa zehn Minuten:

    (vm)$ python3 main.py \
        --strategy_type=tpu \
        --tpu=${TPU_NAME} \
        --model_dir=${MODEL_DIR} \
        --checkpoint_path=${MODEL_DIR} \
        --mode=eval_once \
        --model=shapemask \
        --params_override="{eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000 }, shapemask_head: {use_category_for_mask: true, shape_prior_path: ${SHAPE_PRIOR_PATH}}, shapemask_parser: {output_size: [640, 640]}}"
    

    Beschreibung der Befehls-Flags

    strategy_type
    Wenn du das Shapemask-Modell auf einer TPU trainieren möchtest, musst du distribution_strategy auf tpu festlegen.
    tpu
    Der Name der Cloud TPU. Dieser wird mit der Umgebungsvariable TPU_NAME festgelegt.
    model_dir
    Das Verzeichnis, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Wenn der Ordner fehlt, wird er vom Programm erstellt. Wenn eine Cloud TPU verwendet wird, muss model_dir ein Cloud Storage-Pfad sein (gs://...). Sie können einen vorhandenen Ordner wiederverwenden, um aktuelle Prüfpunktdaten 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
    Legen Sie diesen Wert auf train fest, um das Modell zu trainieren, oder auf eval, um es zu bewerten.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter /usr/share/models/official/legacy/detection/main.py.

    Sobald die Beurteilung abgeschlossen ist, wird eine Meldung wie diese angezeigt:

    DONE (t=5.47s).
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
    

    Sie haben jetzt das Training und die Bewertung für ein Einzelgerät abgeschlossen. Führen Sie die folgenden Schritte aus, um die aktuellen Ressourcen des TPU-Einzelgeräts zu löschen.

  12. Trennen Sie die Verbindung zur Compute Engine-Instanz:

    (vm)$ exit
    

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

  13. Löschen Sie die TPU-Ressource.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm delete shapemask-tutorial \
    --zone=europe-west4-a
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der sich Ihre Cloud TPU befindet.

    TPU-Knoten

    $ gcloud compute tpus execution-groups delete shapemask-tutorial \
    --tpu-only \
    --zone=europe-west4-a
    

    Beschreibung der Befehls-Flags

    tpu-only
    Löscht nur die Cloud TPU. Die VM bleibt verfügbar.
    zone
    Die Zone, in der die zu löschende TPU enthalten ist.

    An dieser Stelle können Sie entweder diese Anleitung beenden und eine Bereinigung durchführen oder die Ausführung des Modells auf Cloud TPU Pods fortsetzen.

Modell mit Cloud TPU Pods skalieren

oder TPU-Knoten.

Zum Trainieren eines Modells auf Cloud TPU Pods müssen Sie möglicherweise einige Änderungen an Ihrem Trainingsskript vornehmen. Weitere Informationen finden Sie unter Training auf TPU-Pods.

TPU-Pod-Training

  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 die Google Cloud-Befehlszeile so, dass sie das Projekt verwendet, 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 auf Authorize unten auf der Seite, damit gcloud GCP API-Aufrufe mit Ihren Anmeldedaten durchführen kann.

  4. Erstellen Sie ein Dienstkonto für das Cloud TPU-Projekt.

    Dienstkonten ermöglichen dem Cloud TPU-Dienst, auf andere Google Cloud Platform-Dienste zuzugreifen.

    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 oder verwenden Sie einen Bucket, den Sie zuvor für Ihr Projekt erstellt haben:

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
    
  6. Wenn Sie das COCO-Dataset bereits vorbereitet und in den Storage-Bucket verschoben haben, können Sie es für das Pod-Training wiederverwenden. Wenn Sie das COCO-Dataset noch nicht vorbereitet haben, bereiten Sie es jetzt vor und kehren Sie dann hierher zurück, um das Pod-Training einzurichten.

  7. Cloud TPU-Pod starten

    In dieser Anleitung wird ein v3-32-Pod angegeben. Weitere Pod-Optionen finden Sie auf der Seite zu verfügbaren TPU-Typen.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm create shapemask-tutorial \
    --zone=europe-west4-a \
    --accelerator-type=v3-32 \
    --version=tpu-vm-tf-2.8.0-pod
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie Ihre Cloud TPU erstellen möchten.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    version
    Die Version der Cloud TPU-Laufzeit.

    TPU-Knoten

    $ gcloud compute tpus execution-groups create  \
     --zone=europe-west4-a \
     --name=shapemask-tutorial \
     --accelerator-type=v3-32 \
     --machine-type=n1-standard-8 \
     --disk-size=300 \
     --tf-version=2.8.0
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie Ihre Cloud TPU erstellen möchten.
    name
    Der TPU-Name. Ist standardmäßig Ihr Nutzername, wenn nichts anderes angegeben ist.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    machine-type
    Der Maschinentyp der zu erstellenden Compute Engine-VM.
    disk-size
    Die Größe des Stamm-Volumes Ihrer Compute Engine-VM (in GB).
    tf-version
    Die Version von TensorFlow gcloud auf der VM installiert.
  8. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet werden, melden Sie sich mit dem folgenden ssh-Befehl an. Wenn Sie bei der VM angemeldet sind, ändert sich die Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    TPU-VM

    gcloud alpha compute tpus tpu-vm ssh shapemask-tutorial --zone=europe-west4-a
    

    TPU-Knoten

    gcloud compute ssh shapemask-tutorial --zone=europe-west4-a
    

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

  9. Installieren Sie TensorFlow-Anforderungen.

    TPU-VM

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
    

    TPU-Knoten

    (vm)$ pip3 install -r /usr/share/models/official/requirements.txt
    
  10. Für das Trainingsskript ist ein zusätzliches Paket erforderlich. Installieren Sie es jetzt.

    TPU-VM

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

    TPU-Knoten

    (vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
    
  11. 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
    

    Die Trainingsanwendung erwartet, dass Ihre Trainingsdaten in Cloud Storage verfügbar sind. Die Trainingsanwendung verwendet auch Ihren Cloud Storage-Bucket, um während des Trainings Prüfpunkte zu speichern.

  12. Aktualisieren Sie die erforderlichen Trainingsvariablen.

    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/shapemask-pods
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
    (vm)$ export RESNET_CHECKPOINT=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
    (vm)$ export SHAPE_PRIOR_PATH=gs://cloud-tpu-checkpoints/shapemask/kmeans_class_priors_91x20x32x32.npy
    
  13. Legen Sie erforderliche Umgebungsvariablen fest:

    TPU-VM

    (vm)$ export PYTHONPATH="/usr/share/tpu/models:${PYTHONPATH}"
    (vm)$ export TPU_LOAD_LIBRARY=0
    

    TPU-Knoten

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  14. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    TPU-VM

    (vm)$ cd /usr/share/tpu/models/official/legacy/detection
    

    TPU-Knoten

    (vm)$ cd /usr/share/models/official/legacy/detection
    
  15. Starten Sie das Pod-Training.

    Das Beispieltraining erfordert nur 20 Schritte und dauert etwa 10 Minuten auf einem v3-32-TPU-Knoten. Das Training zur Konvergenz erfordert etwa 11.250 Schritte und dauert etwa 2 Stunden auf einem v3-32-TPU-Pod.

    (vm)$ python3 main.py \
     --strategy_type=tpu \
     --tpu=${TPU_NAME} \
     --model_dir=${MODEL_DIR} \
     --mode=train \
     --model=shapemask \
     --params_override="{train: { batch_size: 128, iterations_per_loop: 500, total_steps: 20, learning_rate: {'learning_rate_levels': [0.008, 0.0008], 'learning_rate_steps': [10000, 13000] }, checkpoint: { path: ${RESNET_CHECKPOINT}, prefix: resnet50/ }, train_file_pattern: ${TRAIN_FILE_PATTERN} }, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}}, shapemask_head: {use_category_for_mask: true, shape_prior_path: ${SHAPE_PRIOR_PATH}} }"
    

    Beschreibung der Befehls-Flags

    strategy_type
    Wenn du das Shapemask-Modell auf einer TPU trainieren möchtest, musst du distribution_strategy auf tpu festlegen.
    tpu
    Der Name der Cloud TPU. Dieser wird mit der Umgebungsvariable TPU_NAME festgelegt.
    model_dir
    Das Verzeichnis, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Wenn der Ordner fehlt, wird er vom Programm erstellt. Wenn eine Cloud TPU verwendet wird, muss model_dir ein Cloud Storage-Pfad sein (gs://...). Sie können einen vorhandenen Ordner wiederverwenden, um aktuelle Prüfpunktdaten 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
    Legen Sie diesen Wert auf train fest, um das Modell zu trainieren, oder auf eval, um es zu bewerten.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter /usr/share/models/official/legacy/detection/main.py.

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.

  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. Löschen Sie Ihre Cloud TPU- und Compute Engine-Ressourcen. Der Befehl zum Löschen Ihrer Ressourcen hängt davon ab, ob Sie TPU-VMs oder TPU-Knoten verwenden. Weitere Informationen finden Sie unter Systemarchitektur.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm delete shapemask-tutorial \
    --zone=europe-west4-a
    

    TPU-Knoten

    $ gcloud compute tpus execution-groups delete shapemask-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. Die Ausgabe des folgenden Befehls sollte keine der in dieser Anleitung erstellten TPU-Ressourcen enthalten:

    $ gcloud compute tpus execution-groups list --zone=europe-west4-a
    
  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
    

Weitere Informationen

Mit verschiedenen Bildgrößen trainieren

Sie können auch ein neuronales Netzwerk wie ResNet-101 statt ResNet-50 ausprobieren. Ein größeres Eingabebild und ein leistungsfähigeres neuronales Netzwerk ergeben ein langsameres, aber präziseres Modell.

Andere Grundlage verwenden

Alternativ können Sie versuchen, ein ResNet-Modell im Voraus mit Ihrem eigenen Dataset zu trainieren und es als Grundlage für Ihr ShapeMask-Modell zu verwenden. Sie haben auch die Möglichkeit, ResNet durch ein alternatives neuronales Netzwerk zu ersetzen, was etwas arbeitsaufwändiger ist. Wenn Sie Ihre eigenen Objekterkennungsmodelle implementieren möchten, ist dieses Netzwerk möglicherweise eine gute Basis für weitere Experimente.