EfficientNet auf Cloud TPU trainieren (TF 2.x)

In dieser Anleitung erfahren Sie, wie Sie ein Keras EfficientNet-Modell auf Cloud TPU mit tf.distribute.TPUStrategy trainieren.

Wenn Sie nicht mit Cloud TPU vertraut sind, sollten Sie sich die Kurzanleitung durchlesen, um zu erfahren, wie Sie eine Cloud TPU und eine Compute Engine-VM erstellen.

Ziele

  • Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
  • Bereiten Sie ein Imitaten-Dataset vor, das dem ImageNet-Dataset ähnlich ist.
  • Trainingsjob ausführen
  • Ausgabeergebnisse überprüfen

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

Ressourcen einrichten

Dieser Abschnitt enthält Informationen zum Einrichten von Cloud Storage-, VM- und Cloud TPU-Ressourcen für Anleitungen.

  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.

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

  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 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 gcloud compute tpus execution-groups-Befehl 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.

    Der Bucket-Standort muss sich in derselben Region wie Ihre Compute Engine (VM) und Ihr Cloud TPU-Knoten befinden.

  6. Dataset vorbereiten oder fake_imagenet verwenden

    ImageNet ist eine Bilddatenbank. Die Bilder in der Datenbank sind hierarchisch angeordnet, wobei jeder Knoten der Hierarchie durch Hunderte und Tausende von Bildern dargestellt wird.

    In dieser Anleitung wird eine Demoversion des vollständigen ImageNet-Datasets verwendet, die als fake_imagenet bezeichnet wird. Wenn Sie die Anleitung mit dieser Demoversionen durcharbeiten, können Sie den Speicher- und Zeitaufwand reduzieren, der normalerweise mit dem Ausführen eines Modells für die gesamte ImageNet-Datenbank verbunden ist.

    Das Dataset "fake_imagenet" befindet sich an diesem Speicherort in Cloud Storage:

    gs://cloud-tpu-test-datasets/fake_imagenet

    Das Dataset "fake_imagenet" dient nur zum Verständnis, wie eine Cloud TPU verwendet wird und wie die End-to-End-Leistung validiert wird. Die Genauigkeitszahlen und das gespeicherte Modell sind nicht aussagekräftig.

    Wenn Sie das vollständige ImageNet-Dataset verwenden möchten, finden Sie weitere Informationen unter ImageNet-Dataset herunterladen, vorverarbeiten und hochladen.

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

    TPU-VM

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

    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 \
    --name=efficientnet-tutorial \
    --zone=europe-west4-a \
    --disk-size=300 \
    --machine-type=n1-standard-16 \
    --tf-version=2.5.0 \
    --accelerator-type=v3-8
    

    Beschreibung der Befehls-Flags

    project
    Die ID Ihres GCP-Projekts
    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 erstellt wurde.
    machine-type
    Der Maschinentyp der zu erstellenden Compute Engine-VM.
    tf-version
    Die Version von Tensorflow, die von gcloud auf der VM installiert wird.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.

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

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

    TPU-VM

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

    TPU-Knoten

    gcloud compute ssh efficientnet-tutorial --zone=europe-west4-a
    
  9. Legen Sie die Cloud TPU-Namensvariable fest.

    TPU-VM

    (vm)$ export TPU_NAME=local
    

    TPU-Knoten

    (vm)$ export TPU_NAME=efficientnet-tutorial
    
  10. Cloud Storage-Bucket-Variablen festlegen

    Ersetzen Sie bucket-name durch den Namen Ihres Cloud Storage-Buckets.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/efficientnet-2x
    (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
    

    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.

  11. Installieren Sie TensorFlow-Anforderungen.

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

    TPU-VM

    (vm)$ git clone https://github.com/tensorflow/models.git
    (vm)$ pip3 install -r models/official/requirements.txt
    

    TPU-Knoten

    (vm)$ sudo pip3 install -r /usr/share/models/official/requirements.txt
    
  12. Das EfficientNet-Trainingsskript erfordert zusätzliche Pakete. Installieren Sie diese jetzt:

    (vm)$ sudo pip3 install tensorflow-addons
    (vm)$ sudo pip3 install tensorflow-model-optimization>=0.1.3
    
  13. Legen Sie die Umgebungsvariable PYTHONPATH fest:

    TPU-VM

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

    TPU-Knoten

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

    Das EfficientNet-Modell ist auf Ihrer Compute Engine-VM vorinstalliert.

  14. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    TPU-VM

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

    TPU-Knoten

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

Modell trainieren

  1. Führen Sie das Trainingsskript aus. Dies verwendet ein fake_imagenet-Dataset und trainiert EfficientNet für eine Epoche.

    (vm)$ python3 classifier_trainer.py \
      --mode=train_and_eval \
      --model_type=efficientnet \
      --dataset=imagenet \
      --tpu=${TPU_NAME} \
      --data_dir=${DATA_DIR} \
      --model_dir=${MODEL_DIR} \
      --params_override="train.epochs=1, train_dataset.builder=records, validation_dataset.builder=records"
    

    Beschreibung der Befehls-Flags

    mode
    Entweder train, eval oder train_and_eval.
    model_type
    Der Typ des Modells. Beispiel: efficientnet.
    dataset
    Der Name des Datasets. Beispiel: imagenet.
    tpu
    Der Name der Cloud TPU, um das Training oder die Bewertung auszuführen.
    data_dir
    Gibt den Cloud Storage-Pfad für die Trainingseingabe an. In diesem Beispiel ist er auf das Dataset "fake_imagenet" festgelegt.
    model_dir
    Der Cloud Storage-Pfad, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner wiederverwenden, um zuvor generierte Prüfpunkte 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.
    config_file
    Der Pfad zur JSON-Datei, die das vortrainierte Modell EfficientNet enthält. Diese Datei enthält die Modellarchitektur.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter /usr/share/models/official/vision/detection/main.py.

    Dadurch wird EfficientNet für eine Epoche trainiert und auf einem Cloud TPU-Knoten von v3-8 in weniger als 10 Minuten abgeschlossen. Wenn das Trainingsskript abgeschlossen ist, wird eine Ausgabe wie die folgende angezeigt:

    Run stats:
    {
      'accuracy_top_1': 0.0010172526817768812,
      'eval_loss': 7.104171276092529,
      'loss': 7.113735675811768,
      'training_accuracy_top_1': 0.0009773431811481714,
      'step_timestamp_log': [
        'BatchTimestamp<batch_index: 0,
        timestamp: 1604960724.2224622>',
        'BatchTimestamp<batch_index: 1251,
        timestamp: 1604961281.3745298>'
      ],
      'train_finish_time': 1604961342.6359076,
      'avg_exp_per_second': 2071.493269569079
    }
    

    Führen Sie zum Trainieren von EfficientNet für die Konvergenz 90 Epochen aus, wie im folgenden Skript gezeigt. Training und Bewertung werden gemeinsam durchgeführt. Jede Epoche umfasst 1251 Schritte für insgesamt 112590 Trainingsschritte und 48 Bewertungsschritte.

    (vm)$ python3 classifier_trainer.py \
         --mode=train_and_eval \
         --model_type=efficientnet \
         --dataset=imagenet \
         --tpu=${TPU_NAME} \
         --data_dir=${DATA_DIR} \
         --model_dir=${MODEL_DIR} \
         --config_file=configs/examples/efficientnet/imagenet/efficientnet-b0-tpu.yaml \
         --params_override="train_dataset.builder=records, validation_dataset.builder=records"
    

    Beschreibung der Befehls-Flags

    mode
    train, eval oder train_and_eval.
    model_type
    Der Typ des Modells. Zum Beispiel efficientnet usw.
    dataset
    Der Name des Datasets. Beispiel: imagenet.
    tpu
    Der Name der Cloud TPU, um das Training oder die Bewertung auszuführen.
    data_dir
    Gibt den Cloud Storage-Pfad für die Trainingseingabe an. In diesem Beispiel ist er auf das Dataset "fake_imagenet" festgelegt.
    model_dir
    Der Cloud Storage-Pfad, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner wiederverwenden, um zuvor generierte Prüfpunkte 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.
    config_file
    Der Pfad zur JSON-Datei, die das vortrainierte Modell EfficientNet enthält. Diese Datei enthält die Modellarchitektur.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter /usr/share/models/official/vision/detection/main.py.

    Da das Dataset fake_imagenet für das Training verwendet wurde, weichen die Ergebnisse von der tatsächlichen Ausgabe ab, die Sie bei Ausführung des Trainings mit einem echten Dataset erhalten hätten.

    Du hast eine Schulung für einzelne Geräte abgeschlossen. Führen Sie die folgenden Schritte aus, um die aktuellen TPU-Ressourcen mit einem einzelnen Gerät zu löschen.

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

  3. Löschen Sie die TPU-Ressource.

    TPU-VM

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

    Beschreibung der Befehls-Flags

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

    TPU-Knoten

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

    Beschreibung der Befehls-Flags

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

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

Modell mit Cloud TPU Pods skalieren

TPU-VM-Pod-Training

Dieser Abschnitt enthält Informationen zum Einrichten eines Cloud Storage-Buckets und Cloud TPU-Ressourcen für das 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.

    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
    

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, und die Trainingsergebnisse. Der in dieser Anleitung verwendete Befehl gcloud richtet Standardberechtigungen für das Cloud TPU-Dienstkonto ein, 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-VM befinden.

  6. Dataset vorbereiten oder fake_imagenet verwenden

    ImageNet ist eine Bilddatenbank. Die Bilder in der Datenbank sind hierarchisch angeordnet, wobei jeder Knoten der Hierarchie durch Hunderte und Tausende von Bildern dargestellt wird.

    Das Standard-Pod-Training greift auf eine Demoversion des vollständigen ImageNet-Datasets zu, die als fake_imagenet bezeichnet wird. Mit dieser Demoversion können Sie Pod-Training testen und gleichzeitig den Speicher- und Zeitaufwand reduzieren, der normalerweise mit dem Training eines Modells auf der gesamten ImageNet-Datenbank verbunden ist.

    Das Dataset "fake_imagenet" dient nur zum Verständnis, wie eine Cloud TPU verwendet wird und wie die End-to-End-Leistung validiert wird. Die Genauigkeitszahlen und das gespeicherte Modell sind nicht aussagekräftig.

    Wenn Sie das vollständige ImageNet-Dataset verwenden möchten, finden Sie weitere Informationen unter Das ImageNet-Dataset herunterladen, vorverarbeiten und hochladen.

  7. Starten Sie mit dem Befehl gcloud alpha compute tpus tpu-vm einen TPU-VM-Pod. In dieser Anleitung wird ein v3-32-Pod angegeben. Weitere Pod-Optionen finden Sie auf der Seite mit den verfügbaren TPU-Typen.

    $ gcloud alpha compute tpus tpu-vm create efficientnet-tutorial \
    --zone=europe-west4-a \
    --accelerator-type=v3-32 \
    --version=v2-alpha-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.
  8. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet sind, melden Sie sich mit dem folgenden ssh-Befehl an. Wenn Sie bei der VM angemeldet sind, ändert sich Ihre Shell-Eingabeaufforderung von username@projectname in username@vm-name:

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

  9. Legen Sie die Cloud TPU-Namensvariable fest.

    (vm)$ export TPU_NAME=efficientnet-tutorial
    
  10. 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
    
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/efficientnet-2x-pod
    (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
    

    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.

  11. Installieren Sie TensorFlow-Anforderungen.

      (vm)$ git clone https://github.com/tensorflow/models.git
      (vm)$ pip3 install -r models/official/requirements.txt
      

  12. Legen Sie erforderliche Umgebungsvariablen fest:

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

  13. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    (vm)$ cd ~/models/official/vision/image_classification
    
  14. Modell trainieren

    (vm)$ python3 classifier_trainer.py \
    --mode=train_and_eval \
    --model_type=efficientnet \
    --dataset=imagenet \
    --tpu=${TPU_NAME} \
    --data_dir=${DATA_DIR} \
    --model_dir=${MODEL_DIR} \
    --config_file=configs/examples/efficientnet/imagenet/efficientnet-b0-tpu.yaml \
    --params_override="train.epochs=1, train_dataset.builder=records, validation_dataset.builder=records"
    

    Beschreibung der Befehls-Flags

    mode
    Wenn train_and_eval festgelegt ist, wird dieses Modell trainiert und bewertet. Wenn dieses Skript auf export_only gesetzt ist, exportiert es ein gespeichertes Modell.
    model_type
    Der Typ des Modells. Zum Beispiel efficientnet usw.
    dataset
    Der Name des Datasets. Beispiel: imagenet
    tpu
    Verwendet den in der Variable TPU_NAME angegebenen Namen.
    data_dir
    Gibt den Cloud Storage-Pfad für die Trainingseingabe an. In diesem Beispiel ist er auf das Dataset "fake_imagenet" festgelegt.
    model_dir
    Der Cloud Storage-Pfad, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner wiederverwenden, um zuvor generierte Prüfpunkte 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.
    config_file
    Der Pfad zur JSON-Datei, die das vortrainierte Modell EfficientNet enthält. Diese Datei enthält die Modellarchitektur.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter /usr/share/models/official/vision/detection/main.py.

Mit diesem Verfahren wird das Modell für das fake_imagenet-Dataset auf eine Epoche (insgesamt 312 Trainingsschritte und 12 Bewertungsschritte) trainiert. Dieses Training dauert bei einer v3-32 Cloud TPU etwa 5 Minuten. Wenn das Training und die Bewertung abgeschlossen ist, wird eine Meldung wie die folgende angezeigt:

312/312 - 272s - loss: 7.1147 - accuracy: 0.0010 - top_5_accuracy: 0.0051
- val_loss: 7.1048 - val_accuracy: 9.9691e-04 - val_top_5_accuracy: 0.0049

12/12 - 6s - loss: 7.1048 - accuracy: 9.9691e-04 - top_5_accuracy: 0.0049
I0414 00:41:46.632883 140326444914496 classifier_trainer.py:445] Run stats:
{'accuracy_top_1': 0.0009969075908884406, 'eval_loss': 7.104842185974121,
'loss': 7.114657878875732, 'training_accuracy_top_1': 0.0010086450492963195,
'step_timestamp_log': ['BatchTimestamp', 'BatchTimestamp'], 'train_finish_time': 1618360899.2756596,
'avg_exp_per_second': 4564.777920838655}

TPU-Knoten-Pod-Training

Wenn Sie eine TPU-Knotenkonfiguration verwenden, führen Sie die folgenden Schritte aus, um das Modell auf einem Pod zu trainieren.

  1. Erstellen Sie einen neuen Cloud TPU Pod. Führen Sie den Befehl gcloud compute tpus execution-groups mit dem Parameter accelerator-type aus, um das Pod-Slice anzugeben, das Sie verwenden möchten. Der folgende Befehl verwendet beispielsweise ein v3-32-Pod-Slice.

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

    Beschreibung der Befehls-Flags

    name
    Der Name der zu erstellenden Cloud TPU.
    accelerator-type
    Der Typ der zu erstellenden Cloud TPU.
    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    tf-version
    Die Version von Tensorflow, die von gcloud auf der VM installiert wird.
    tpu-only
    Erstellen Sie nur eine Cloud TPU. Standardmäßig werden mit dem Befehl gcloud eine VM und eine Cloud TPU erstellt.
  2. Wenn Sie nicht automatisch bei der Compute Engine-Instanz angemeldet sind, melden Sie sich mit dem folgenden ssh-Befehl an. Wenn Sie bei der VM angemeldet sind, ändert sich Ihre Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    gcloud compute ssh efficientnet-tutorial --zone=europe-west4-a
    
  3. Aktualisieren Sie das Verzeichnis MODEL_DIR, um die Cloud TPU Pod-Trainingsdaten zu speichern.

    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/efficientnet-2x-pod
    
  4. Definieren Sie Ihren Cloud TPU-Namen.

    (vm)$ export TPU_NAME=efficientnet-tutorial
    
  5. Navigieren Sie zum Modellverzeichnis:

    (vm)$ cd /usr/share/models/official/vision/image_classification/
    
  6. Modell trainieren

    (vm)$ python3 classifier_trainer.py \
    --mode=train_and_eval \
    --model_type=efficientnet \
    --dataset=imagenet \
    --tpu=${TPU_NAME} \
    --data_dir=${DATA_DIR} \
    --model_dir=${MODEL_DIR} \
    --config_file=configs/examples/efficientnet/imagenet/efficientnet-b0-tpu.yaml \
    --params_override="train.epochs=1, train_dataset.builder=records, validation_dataset.builder=records"
    

    Beschreibung der Befehls-Flags

    mode
    Wenn train_and_eval festgelegt ist, wird dieses Modell trainiert und bewertet. Wenn dieses Skript auf export_only gesetzt ist, exportiert es ein gespeichertes Modell.
    model_type
    Der Typ des Modells. Zum Beispiel efficientnet usw.
    dataset
    Der Name des Datasets. Beispiel: imagenet
    tpu
    Verwendet den in der Variable TPU_NAME angegebenen Namen.
    data_dir
    Gibt den Cloud Storage-Pfad für die Trainingseingabe an. In diesem Beispiel ist er auf das Dataset "fake_imagenet" festgelegt.
    model_dir
    Der Cloud Storage-Pfad, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner wiederverwenden, um zuvor generierte Prüfpunkte 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.
    config_file
    Der Pfad zur JSON-Datei, die das vortrainierte Modell EfficientNet enthält. Diese Datei enthält die Modellarchitektur.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter /usr/share/models/official/vision/detection/main.py.

Mit dem Verfahren wird das Modell für das fake_imagenet-Dataset auf eine Epoche (insgesamt 312 Trainingsschritte und 12 Bewertungsschritte) trainiert. Dieses Training dauert bei einer v3-32 Cloud TPU etwa 2 Minuten. Wenn das Training und die Bewertung abgeschlossen sind, wird eine Meldung wie die folgende angezeigt:

Run stats:
{
  'accuracy_top_1': 0.0009969075908884406,
  'eval_loss': 7.105168342590332,
  'loss': 7.114983081817627,
  'training_accuracy_top_1': 0.0010031675919890404,
  'step_timestamp_log': [
    'BatchTimestamp<batch_index: 0,
    timestamp: 1605041621.4997303>',
    'BatchTimestamp<batch_index: 312,
    timestamp: 1605041970.8633356>'
  ],
  'train_finish_time': 1605042032.2274444,
  'avg_exp_per_second': 3111.5120716536226
}

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.

    TPU-VM

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

    TPU-Knoten

    $ gcloud compute tpus execution-groups delete efficientnet-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. Eine Antwort wie die folgende gibt an, dass Ihre Instanzen erfolgreich gelöscht wurden.

    $ gcloud compute tpus execution-groups list --zone=europe-west4-a
    
    Listed 0 items.
    
  4. Löschen Sie Ihren Cloud Storage-Bucket wie unten gezeigt mit gsutil. Ersetzen Sie bucket-name durch den Namen des Cloud Storage-Buckets.

    $ gsutil rm -r gs://bucket-name
    

Nächste Schritte

In dieser Anleitung haben Sie das EfficientNet-Modell mithilfe eines Beispiel-Datasets 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.

  • In der Anleitung zur Dataset-Konvertierung erfahren Sie, wie Sie mit Ihren eigenen Daten anstelle der Datasets "fake_imagenet" oder "ImageNet" trainieren und auswerten. In dieser Anleitung wird erläutert, wie Sie mit dem Skript-Beispiel für die Konvertierung von Bildklassifizierungsdaten ein Rohdataset für die Bildklassifizierung in das von Cloud TPU Tensorflow-Modellen verwendete TFRecord-Format konvertieren.

  • Führen Sie eine Cloud TPU colab aus, die zeigt, wie Sie ein Bildklassifizierungsmodell mit Ihren eigenen Bilddaten ausführen.

  • Andere Cloud TPU-Anleitungen ansehen.

  • TPU-Monitoring-Tools in TensorBoard verwenden