Mask RCNN auf Cloud TPU trainieren (TF 2.x)

Übersicht

In dieser Anleitung wird erläutert, wie Sie das Mask RCNN-Modell mit Cloud TPU mit dem COCO-Dataset ausführen.

Mask RCNN ist ein neuronales Deep-Learning-Netzwerk, das für die Objekterkennung und Bildsegmentierung entwickelt wurde, eine der komplexeren Herausforderungen beim maschinellen Sehen.

Das Mask RCNN-Modell generiert Begrenzungsrahmen und Segmentierungsmasken für jede Instanz eines Objekts im Bild. Das Modell beruht auf dem Feature Pyramid Network (FPN) und einem ResNet50-Backbone.

In dieser Anleitung wird das Modell mit Tensorflow Keras APIs trainiert. Die Keras API ist eine allgemeine TensorFlow API, mit der ein ML-Modell in Cloud TPU erstellt und ausgeführt werden kann. Die API vereinfacht den Modellentwicklungsprozess. Sie blendet die meisten Implementierungen auf untergeordneter Ebene aus, wodurch leichter zwischen der TPU und anderen Plattformen wie GPUs oder CPUs gewechselt werden kann.

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

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

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

COCO-Dataset vorbereiten

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

Wenn sich das COCO-Dataset bereits in einem Cloud Storage-Bucket befindet, der sich im Zone Zum Trainieren des Modells verwenden Sie bitte ein direktesTraining auf einzelnen Geräten. Andernfalls führen Sie die folgenden Schritte aus, um das Dataset vorzubereiten.

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Cloud Shell öffnen

  2. Erstellen Sie in Cloud Shell mit dem folgenden 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 nur zum Herunterladen und Vorverarbeiten des COCO-Datasets verwendet. Geben Sie im Feld 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.6.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 die Cloud TPU erstellen möchten.
    disk-size
    Die Größe des Laufwerks 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, die von gcloud compute tpus execution-groups auf der VM installiert wird.
  4. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet werden, führen Sie den folgenden Befehl ssh aus. 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. VM-Ressourcen bereinigen

    Nachdem das COCO-Dataset in TFRecord umgewandelt und in den DATA_DIR Ihres Cloud Storage-Buckets 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 Ihre Compute Engine-Instanz.

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

Mask RCNN auf einem TPU-Einzelgerät trainieren

Wenn Sie auf einem TPU Pod-Slice trainieren möchten, lesen Sie Auf TPU Pods trainieren, um sich über die Änderungen zu informieren, die zum Trainieren auf Pod-Slices erforderlich sind.

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Zu Cloud Shell

  2. Erstellen Sie eine Umgebungsvariable für die Projekt-ID.

    export PROJECT_ID=project-id
  3. Konfigurieren Sie das gcloud - Befehlszeilentool für die Verwendung des Projekts, in dem Sie die 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. TPU-Einrichtungsvariablen exportieren

    Exportieren Sie die Projekt-ID, den Namen, den Sie für Ihre TPU-Ressourcen verwenden möchten, und die Zone, in der Sie das Modell trainieren und alle schulungsbezogenen Daten speichern.

    $ export TPU_NAME=mask-rcnn-tutorial
    $ export ZONE=europe-west4-a

  6. Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket:

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
    

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, und die Trainingsergebnisse. Der Befehl gcloud, der in dieser Anleitung zum Einrichten der TPU verwendet wird, richtet auch Standardberechtigungen für das Cloud TPU-Dienstkonto ein, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie detailliertere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

  7. Starten Sie mit dem Befehl gcloud eine Compute Engine-VM und eine Cloud TPU. Welchen Befehl Sie verwenden, hängt davon ab, ob Sie TPU-VMs oder TPU-Knoten verwenden. Weitere Informationen zu den beiden VM-Architekturen finden Sie unter Systemarchitektur.

    TPU-VM

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

    Beschreibung der Befehls-Flags

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

    TPU-Knoten

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

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    name
    Der TPU-Name. Wenn keine Angabe erfolgt, wird standardmäßig der Nutzername verwendet.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    machine-type
    Der Maschinentyp der zu erstellenden Compute Engine-VM.
    disk-size
    Die Root-Volume-Größe Ihrer Compute Engine-VM (in GB).
    tf-version
    Die Version von Tensorflow, die von gcloud auf der VM installiert wird.

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

  8. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet werden, führen Sie den folgenden Befehl ssh aus. 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 mask-rcnn-tutorial --zone=europe-west4
    

    TPU-Knoten

    gcloud compute ssh mask-rcnn-tutorial --zone=europe-west4
    
  9. Installieren Sie TensorFlow-Anforderungen.

    Welchen Befehl Sie verwenden, hängt davon ab, ob Sie TPU-VMs oder TPU-Knoten verwenden.

    TPU-VM

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

    TPU-Knoten

    (vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
    
  10. Legen Sie die Cloud TPU-Namensvariable fest.

    TPU-VM

    (vm)$ export TPU_NAME=local
    

    TPU-Knoten

    (vm)$ export TPU_NAME=mask-rcnn-tutorial
    
  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
    
  12. Fügen Sie Umgebungsvariablen für die Daten- und Modellverzeichnisse hinzu.

    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mask-rcnn
    
  13. Fügen Sie einige zusätzliche erforderliche Umgebungsvariablen hinzu:

    (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
    
  14. Legen Sie die Umgebungsvariable PYTHONPATH fest:

    TPU-VM

    (vm)$ export PYTHONPATH="${PWD}/models:${PYTHONPATH}"
    

    TPU-Knoten

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

    TPU-VM

    (vm)$ cd ~/models/official/vision/detection
    

    TPU-Knoten

    (vm)$ cd /usr/share/models/official/vision/detection
    

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

  1. Führen Sie den folgenden Befehl aus, um das Mask-RCNN-Modell zu trainieren:

    (vm)$ python3 main.py \
       --strategy_type=tpu \
       --tpu=${TPU_NAME} \
       --model_dir=${MODEL_DIR} \
       --mode=train \
       --model=mask_rcnn \
       --params_override="{train: { total_steps: 10, 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}, eval_samples: 5000} }"
    

    Beschreibung der Befehls-Flags

    strategy_type
    Die Verteilungsstrategie.
    tpu
    Der Name Ihrer TPU.
    model_dir
    Gibt das Verzeichnis an, in dem Prüfpunkte und Zusammenfassungen während des Modelltrainings gespeichert werden. Wenn der Ordner fehlt, erstellt das Programm einen. Wenn Sie eine Cloud TPU verwenden, muss model_dir ein Cloud Storage-Pfad (`gs://...“) sein. 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 TPU derselben Größe und TensorFlow-Version erstellt wurden.

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

    Train Step: 10/10  / loss = {'total_loss': 2.6386399269104004,
    'loss': 2.6386399269104004, 'fast_rcnn_class_loss': 0.5143030881881714,
    'fast_rcnn_box_loss': 0.005997246131300926, 'mask_loss': 0.7189582586288452,
    'model_loss': 1.898547887802124, 'l2_regularization_loss': 0.7400921583175659,
    'rpn_score_loss': 0.6035243272781372, 'rpn_box_loss': 0.055764954537153244,
    'learning_rate': 0.008165999} / training metric = {'total_loss': 2.6386399269104004,
    'loss': 2.6386399269104004, 'fast_rcnn_class_loss': 0.5143030881881714,
    'fast_rcnn_box_loss': 0.005997246131300926, 'mask_loss': 0.7189582586288452,
    'model_loss': 1.898547887802124, 'l2_regularization_loss': 0.7400921583175659,
    'rpn_score_loss': 0.6035243272781372, 'rpn_box_loss': 0.055764954537153244,
    'learning_rate': 0.008165999}
    
  2. Führen Sie die Bewertung aus. Dies dauert auf einer v3-8-TPU etwa 15 Minuten:

    (vm)$ python3 main.py \
       --strategy_type=tpu \
       --tpu=${TPU_NAME} \
       --model_dir=${MODEL_DIR} \
       --checkpoint_path=${MODEL_DIR} \
       --mode=eval_once \
       --model=mask_rcnn \
       --params_override="{eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000 } }"
    

    Beschreibung der Befehls-Flags

    strategy_type
    Die Verteilungsstrategie.
    tpu
    Der Name Ihrer TPU.
    model_dir
    Gibt das Verzeichnis an, in dem Prüfpunkte und Zusammenfassungen während des Modelltrainings gespeichert werden. Wenn der Ordner fehlt, erstellt das Programm einen. Wenn Sie eine Cloud TPU verwenden, muss model_dir ein Cloud Storage-Pfad (`gs://...“) sein. 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 TPU derselben Größe und TensorFlow-Version erstellt wurden.

    Wenn die Bewertung abgeschlossen ist, wird eine Meldung wie die folgende angezeigt:

    DONE (t=5.41s).
    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 das Training und die Bewertung auf einem Gerät abgeschlossen. Führen Sie die folgenden Schritte aus, um die aktuellen TPU-Ressourcen auf einem einzelnen Gerät zu löschen.

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

  4. Löschen Sie die TPU-Ressource.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm delete mask-rcnn-tutorial \
    --zone=europe-west4
    

    Beschreibung der Befehls-Flags

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

    TPU-Knoten

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

    Beschreibung der Befehls-Flags

    tpu-only
    Löscht nur die Cloud TPU. Die VM bleibt verfügbar.
    zone
    Die Zone, die die zu löschende TPU enthält.

Sie können diese Anleitung jetzt abschließen und Bereinigen oder die Ausführung des Modells auf Cloud TPU Pods fortsetzen.

Modell mit Cloud TPU Pods skalieren

TPU Pod-Training

  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.

    Über Dienstkonten kann der Cloud TPU-Dienst auf andere Google Cloud Platform-Dienste zugreifen.

    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.

    Ersetzen Sie im folgenden Befehl europe-west4 durch den Namen der Region, die Sie zum Ausführen des Trainings verwenden möchten. Ersetzen Sie bucket-name durch den Namen, den Sie dem Bucket zuweisen möchten.

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 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 Befehl gcloud werden Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie genauere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

    Der Bucket-Standort muss sich in derselben Region wie Ihre TPU-Ressourcen befinden.

  6. Wenn Sie das COCO-Dataset bereits vorbereitet und in Ihren Storage-Bucket verschoben haben, können Sie es wieder für das Pod-Training verwenden. Wenn Sie das COCO-Dataset noch nicht vorbereitet haben, bereiten Sie es jetzt vor und kehren Sie dann hierher zurück, um das Training einzurichten.

  7. Cloud TPU Pod starten

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

    Das Beispieltraining dauert 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.

    TPU-VM

    $ gcloud alpha compute tpus tpu-vm create mask-rcnn-tutorial \
    --zone=europe-west4 \
    --accelerator-type=v3-32 \
    --version=tpu-vm-tf-2.6.0-pod
    

    Beschreibung der Befehls-Flags

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

    TPU-Knoten

    (vm)$ gcloud compute tpus execution-groups create \
    --zone=europe-west4 \
    --name=mask-rcnn-tutorial \
    --accelerator-type=v3-32  \
    --tf-version=2.6.0
    

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    tpu-only
    Erstellt nur die Cloud TPU. Standardmäßig erstellt der Befehl gcloud compute tpus execution-groups sowohl eine VM als auch eine Cloud TPU.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    tf-version
    Die Version von TensorFlow gcloud wird auf der VM installiert.
  8. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet werden, führen Sie den folgenden Befehl ssh aus. 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 mask-rcnn-tutorial --zone=europe-west4
    

    TPU-Knoten

    gcloud compute ssh mask-rcnn-tutorial --zone=europe-west4
    
  9. Installieren Sie TensorFlow-Anforderungen.

    Welchen Befehl Sie verwenden, hängt davon ab, ob Sie TPU-VMs oder TPU-Knoten verwenden.

    TPU-VM

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

    TPU-Knoten

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

    (vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
    
  11. Legen Sie die Cloud TPU-Namensvariable fest.

    (vm)$ export TPU_NAME=mask-rcnn-tutorial
    
  12. 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
    
  13. Fügen Sie einige zusätzliche 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 MODEL_DIR=${STORAGE_BUCKET}/mask-rcnn-pod
    
  14. Legen Sie die Umgebungsvariable PYTHONPATH 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"
    
  15. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    TPU-VM

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

    TPU-Knoten

    (vm)$ cd /usr/share/models/official/vision/detection
  16. Trainieren Sie das Modell:

    Mit diesem Verfahren wird das Modell im COCO-Dataset für 5.625 Trainingsschritte trainiert. Dieses Training dauert ungefähr eine Stunde auf einer v3-32-Cloud TPU. Die Prüfpunktausgabe wird ungefähr alle fünf Minuten angezeigt.

    TPU-VM

    (vm)$ python3 main.py \
    --strategy_type=tpu \
    --tpu=${TPU_NAME} \
    --model_dir=${MODEL_DIR} \
    --mode=train \
    --model=mask_rcnn \
    --params_override="{architecture: {use_bfloat16: true}, eval: {batch_size: 40, eval_file_pattern: ${EVAL_FILE_PATTERN}, val_json_file: ${VAL_JSON_FILE}}, postprocess: {pre_nms_num_boxes: 1000}, predict: {batch_size: 40}, train: {batch_size: 256, checkpoint: {path: ${RESNET_PRETRAIN_DIR}, prefix: resnet50/}, iterations_per_loop: 500, total_steps: 5625, train_file_pattern: ${TRAIN_FILE_PATTERN}, } }" 

    Beschreibung der Befehls-Flags

    tpu
    Der Name Ihrer TPU.
    model_dir
    Gibt das Verzeichnis an, in dem Prüfpunkte und Zusammenfassungen während des Modelltrainings gespeichert werden. Wenn der Ordner fehlt, erstellt das Programm einen. Wenn Sie eine Cloud TPU verwenden, muss model_dir ein Cloud Storage-Pfad (gs://...) sein. 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 Cloud TPU derselben Größe und TensorFlow-Version erstellt wurden.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter ~/models/official/vision/detection/main.py.

    TPU-Knoten

    (vm)$ python3 main.py \
    --strategy_type=tpu \
    --tpu=${TPU_NAME} \
    --model_dir=${MODEL_DIR} \
    --mode=train \
    --model=mask_rcnn \
    --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}} }"

    Beschreibung der Befehls-Flags

    tpu
    Der Name Ihrer TPU.
    model_dir
    Gibt das Verzeichnis an, in dem Prüfpunkte und Zusammenfassungen während des Modelltrainings gespeichert werden. Wenn der Ordner fehlt, erstellt das Programm einen. Wenn Sie eine Cloud TPU verwenden, muss model_dir ein Cloud Storage-Pfad (gs://...) sein. 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 Cloud TPU derselben Größe und TensorFlow-Version erstellt wurden.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter ~/models/official/vision/detection/main.py.

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

 Train Step: 20/20  / loss = {'total_loss': 2.176832675933838,
 'loss': 2.176832675933838, 'fast_rcnn_class_loss': 0.2733360528945923,
 'fast_rcnn_box_loss': 0.030380848795175552, 'mask_loss': 0.6929039359092712,
 'model_loss': 1.4366037845611572, 'l2_regularization_loss': 0.7402286529541016,
 'rpn_score_loss': 0.3818075954914093, 'rpn_box_loss': 0.05817537382245064,
 'learning_rate': 0.009632} / training metric = {'total_loss': 2.176832675933838,
 'loss': 2.176832675933838, 'fast_rcnn_class_loss': 0.2733360528945923,
 'fast_rcnn_box_loss': 0.030380848795175552, 'mask_loss': 0.6929039359092712,
 'model_loss': 1.4366037845611572, 'l2_regularization_loss': 0.7402286529541016,
 'rpn_score_loss': 0.3818075954914093, 'rpn_box_loss': 0.05817537382245064,
 'learning_rate': 0.009632}
 

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 mask-rcnn-tutorial \
    --zone=europe-west4
    

    TPU-Knoten

    $ gcloud compute tpus execution-groups delete mask-rcnn-tutorial \
    --zone=europe-west4
    
  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
    
  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 Mask-RCNN-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-Feinabstimmung

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.