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


Questo tutorial contiene una descrizione generale del modello MNIST, istruzioni su come scaricare l'esempio di codice MNIST TensorFlow TPU, e una guida all'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 MNIST. Dopo l'addestramento, il modello classifica le immagini in arrivo in 10 (da 0 a 9) in base a ciò che ha appreso sulle immagini scritte a mano libera il 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 ha una combinazione di sette strati:

  • Convoluzione 2 x
  • 2 x max pooling
  • 2 x Densa (completamente connessa)
  • 1 interruzione

La perdita viene calcolata utilizzando l'entropia incrociata categorica.

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

Keras semplifica il processo di sviluppo del modello nascondendo la maggior parte delle che consente anche di passare dalla TPU ad altre piattaforme di test come GPU o CPU.

Obiettivi

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

Costi

In questo documento vengono utilizzati 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 in basso della pagina per consentire a gcloud di effettuare chiamate 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 comando seguente:

    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, vedi 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 la connessione è attiva alla VM, il prompt della shell passa 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 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 è archiviato 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 flag di comando

    tpu
    Il nome della 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 durante l'addestramento. Puoi utilizzare una cartella esistente per caricarla in precedenza checkpoint generati creati su una TPU delle stesse dimensioni e con TensorFlow completamente gestita.
    data_dir
    Il percorso Cloud Storage dell'input di addestramento. È impostato su in questo esempio.
    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 5 minuti su una Cloud TPU v3-8 e visualizza simile a:

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. Disconnettiti dall'istanza Compute Engine, se non l'hai già fatto. Fatto:

    (vm)$ exit
    

    Il tuo prompt ora dovrebbe essere username@projectname, a indicare che ti trovi in 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. La l'eliminazione potrebbe richiedere diversi 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 comando seguente. 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'immagine di classificazione, dovrai convertire il tuo set di dati in Formato TFRecord per te. Per ulteriori informazioni, vedi TFRecord e tf.Example.

Ottimizzazione degli iperparametri

Per migliorare le prestazioni del modello con il tuo set di dati, puoi ottimizzare e regolare gli iperparametri. Puoi trovare informazioni sugli iperparametri comuni a tutti 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 delle ottimizzazione degli iperparametri e Tune e regolare gli iperparametri.

Inferenza

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