Esecuzione di MNIST su Cloud TPU (TF 2.x)


Questo tutorial contiene una descrizione di alto livello del modello MNIST, istruzioni per scaricare il codice di esempio di TPU TensorFlow MNIST e una guida per l'esecuzione del codice su Cloud TPU.

Disclaimer

Questo tutorial utilizza un set di dati di terze parti. Google non fornisce alcuna dichiarazione, o altre garanzie circa la validità o qualsiasi altro aspetto di questo del set di dati.

Descrizione del modello

Il set di dati MNIST contiene un gran numero di immagini di cifre scritte a mano libera comprese tra 0 e 9, nonché le etichette che identificano il cifra in ogni immagine.

Questo tutorial addestra un modello di machine learning per classificare le immagini in base al set di dati MNIST. Dopo l'addestramento, il modello classifica le immagini in arrivo in 10 categorie (da 0 a 9) in base a ciò che ha appreso sulle immagini scritte a mano dal set di dati MNIST. Puoi quindi inviare al modello un'immagine che non ha rilevato e il modello identifica la cifra nell'immagine in base a ciò che il modello appreso durante l'addestramento.

Il set di dati MNIST è stato suddiviso in tre parti:

  • 60.000 esempi di dati di addestramento
  • 10.000 esempi di dati di test
  • 5000 esempi di dati di convalida

Il modello è composto da una combinazione di sette strati:

  • Convoluzione 2 x
  • 2 x max pooling
  • 2 volte più denso (completamente connesso)
  • 1 interruzione

La perdita viene calcolata utilizzando l'entropia incrociata categorica.

Questa versione del modello MNIST utilizza l'API Keras, un modo consigliato per creare e eseguire un modello di machine learning su una Cloud TPU.

Keras semplifica il processo di sviluppo del modello nascondendo la maggior parte dell'implementazione a basso livello, il che ti consente anche di passare da TPU ad altre piattaforme di test come GPU o CPU.

Obiettivi

  • Crea un bucket Cloud Storage per contenere il set di dati e l'output del modello.
  • Esegui il job di addestramento.
  • Verifica i risultati dell'output.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Prima di iniziare

Questa sezione fornisce informazioni sulla configurazione del bucket Cloud Storage di una VM di Compute Engine.

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. Crea una variabile per l'ID del progetto.

    export PROJECT_ID=project-id
  3. Configura Google Cloud CLI per utilizzare il progetto in cui vuoi creare con Cloud TPU.

    gcloud config set project ${PROJECT_ID}

    La prima volta che esegui questo comando in una nuova VM Cloud Shell, Pagina Authorize Cloud Shell visualizzata. Fai clic su Authorize nella parte inferiore della pagina per consentire a gcloud di effettuare chiamate alle API Google Cloud con le tue credenziali.

  4. Creare un account di servizio per il progetto Cloud TPU.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID

    Il comando restituisce un account di servizio Cloud TPU con il seguente formato:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Crea un bucket Cloud Storage utilizzando il seguente comando:

    gcloud storage buckets create gs://bucket-name \
    --project=${PROJECT_ID} \
    --location=us-central1

    Questo bucket Cloud Storage archivia i dati che utilizzi per addestrare il modello e i risultati dell'addestramento. Il comando gcloud utilizzato in questo tutorial configura le autorizzazioni predefinite per l'account di servizio Cloud TPU passaggio precedente. Per autorizzazioni più granulari, rivedi il autorizzazioni a livello di accesso.

  6. Crea una VM TPU utilizzando il comando gcloud.

    $ gcloud compute tpus tpu-vm create mnist-tutorial \
       --zone=us-central1-b \
       --accelerator-type=v3-8 \
       --version=tpu-vm-tf-2.17.0-pjrt \
     

    Descrizioni flag di comando

    zone
    La zona in cui prevedi di creare la tua Cloud TPU.

    accelerator-type
    Il tipo di acceleratore specifica la versione e le dimensioni della Cloud TPU che vuoi creare. Per ulteriori informazioni sui tipi di acceleratori supportati per ogni versione di TPU, consulta Versioni TPU.

    version
    La versione software di Cloud TPU.

    Per ulteriori informazioni sul comando gcloud, consulta la documentazione di riferimento di gcloud.

  7. Connettiti all'istanza Compute Engine tramite SSH. Quando sei connesso alla VM, il prompt della shell cambia da username@projectname a username@vm-name:

    gcloud compute tpus tpu-vm ssh mnist-tutorial --zone=us-central1-b
  8. Crea una variabile di ambiente per il nome della TPU.

    (vm)$ export TPU_NAME=local
  9. Installa i requisiti di TensorFlow.

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

Addestra il modello

Il codice sorgente per il modello MNIST TPU è disponibile su GitHub.

  1. Imposta le seguenti variabili. Sostituisci bucket-name con il tuo bucket nome:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mnist
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data
  2. Imposta la variabile di ambiente PYTHONPATH.

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
  3. Durante la creazione della TPU, se imposti il parametro --version su una versione che termina con -pjrt, imposta le seguenti variabili di ambiente per abilitare il runtime PJRT:

      (vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true
      (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
  4. Passa alla directory in cui si trova il modello:

    (vm)$ cd /usr/share/tpu/models/official/legacy/image_classification
  5. Esegui lo script di addestramento MNIST:

    (vm)$ python3 mnist_main.py \
      --tpu=${TPU_NAME} \
      --model_dir=${MODEL_DIR} \
      --data_dir=${DATA_DIR} \
      --train_epochs=10 \
      --distribution_strategy=tpu \
      --download

    Descrizioni dei flag dei comandi

    tpu
    Il nome del Cloud TPU. Se non specificato durante l'impostazione per la VM di Compute Engine e Cloud TPU, il nome predefinito è il tuo nome utente.
    model_dir
    Il bucket Cloud Storage in cui vengono visualizzati i punti di controllo e i riepiloghi archiviati durante l'addestramento. Puoi utilizzare una cartella esistente per caricare i checkpoint generati in precedenza creati su una TPU delle stesse dimensioni e della stessa versione di TensorFlow.
    data_dir
    Il percorso Cloud Storage dell'input di addestramento. In questo esempio è impostato sul set di dati fake_imagenet.
    train_epochs
    Il numero di epoche in cui addestrare il modello.
    distribution_strategy
    Per addestrare il modello ResNet su una Cloud TPU, imposta distribution_strategy a tpu.
    download
    Se impostato su true, lo script viene scaricato e pre-elaborato il set di dati MNIST, se non è già stato scaricato.

Lo script di addestramento viene eseguito in meno di cinque minuti su una Cloud TPU v3-8 e mostra un output simile al seguente:

Run stats:
{
  'accuracy_top_1': 0.9762369990348816,
  'eval_loss': 0.07863274961709976,
  'loss': 0.1111728847026825,
  'training_accuracy_top_1': 0.966645359992981
}

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  1. Se non l'hai ancora fatto, disconnetti dall'istanza Compute Engine:

    (vm)$ exit

    Il tuo prompt dovrebbe ora essere username@projectname, a indicare che ti trovi in Cloud Shell.

  2. Elimina le tue risorse Cloud TPU e Compute Engine.

    $ gcloud compute tpus tpu-vm delete mnist-tutorial \
      --zone=us-central1-b
  3. Verifica che le risorse siano state eliminate eseguendo gcloud compute tpus tpu-vm list. L'eliminazione potrebbe richiedere alcuni minuti. L'output del comando seguente non devono includere nessuna delle risorse create in questo tutorial:

    $ gcloud compute tpus tpu-vm list --zone=us-central1-b
  4. Elimina il bucket Cloud Storage utilizzando il seguente comando. Sostituisci bucket-name con il nome del tuo bucket Cloud Storage.

    $ gcloud storage rm gs://bucket-name --recursive

Passaggi successivi

I tutorial su TensorFlow Cloud TPU in genere addestrano il modello utilizzando una un set di dati di esempio. I risultati di questo addestramento non sono utilizzabili per l'inferenza. A per l'inferenza, puoi addestrare i dati su una o il tuo set di dati. Modelli TensorFlow addestrati su Cloud TPU richiedono generalmente che i set di dati siano TFRecord.

Puoi utilizzare lo strumento di conversione dei set di dati sample per convertire un'immagine in formato TFRecord. Se non utilizzi un modello di classificazione delle immagini, dovrai convertire autonomamente il tuo set di dati in formato TFRecord. Per ulteriori informazioni, consulta TFRecord e tf.Example.

Ottimizzazione degli iperparametri

Per migliorare le prestazioni del modello con il tuo set di dati, puoi ottimizzare i suoi parametri iperbolici. Puoi trovare informazioni sugli iperparametri comuni a tutti i modelli supportati da TPU su GitHub. Puoi trovare informazioni sugli iperparametri specifici del modello nella fonte per ciascuno un modello di machine learning. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta la Panoramica dell'ottimizzazione degli iperparametri e Ottimizzare gli iperparametri.

Inferenza

Una volta addestrato il modello, puoi utilizzarlo per l'inferenza (chiamato anche previsione). Puoi utilizzare lo strumento di conversione per l'inferenza Cloud TPU per preparare e ottimizzare un modello TensorFlow per l'inferenza su Cloud TPU v5e. Per ulteriori informazioni sull'inferenza su Cloud TPU v5e, consulta l'introduzione all'inferenza su Cloud TPU v5e.