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


Questo tutorial contiene una descrizione generale del modello MNIST, istruzioni sul download dell'esempio di codice TPU MNIST TensorFlow 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, garanzia o altra garanzia circa la validità o qualsiasi altro aspetto del presente set di dati.

Descrizione del modello

Il set di dati MNIST contiene un gran numero di immagini di cifre scritte a mano nell'intervallo da 0 a 9, nonché etichette che identificano la 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 entrata in 10 categorie (da 0 a 9) in base a quanto appreso sulle immagini scritte a mano dal set di dati MNIST. Puoi quindi inviare al modello un'immagine mai vista prima e il modello identifica la cifra nell'immagine sulla base di quanto appreso dal modello 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:

  • 2 volte la convoluzione
  • Pool massimo 2x
  • 2 x denso (completamente connesso)
  • 1 abbandono

La perdita viene calcolata tramite l'entropia incrociata categorica.

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

Keras semplifica il processo di sviluppo del modello nascondendo la maggior parte dell'implementazione di basso livello, il che semplifica anche il passaggio tra TPU e altre piattaforme di test come GPU o CPU.

Obiettivi

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

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

  • PVC dei dischi permanenti
  • Cloud TPU
  • Cloud Storage

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Prima di iniziare

Questa sezione fornisce informazioni sulla configurazione di un bucket Cloud Storage e su una VM di Compute Engine.

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

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

    export PROJECT_ID=project-id
    
  3. Configurare Google Cloud CLI in modo da utilizzare il progetto in cui vuoi creare Cloud TPU.

    gcloud config set project ${PROJECT_ID}
    

    La prima volta che esegui questo comando in una nuova VM Cloud Shell, viene visualizzata una pagina Authorize Cloud Shell. Fai clic su Authorize in fondo alla pagina per consentire a gcloud di effettuare chiamate API GCP 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:

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

    Questo bucket Cloud Storage archivia i dati utilizzati 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 che hai configurato nel passaggio precedente. Se vuoi autorizzazioni più granulari, consulta le autorizzazioni a livello di accesso.

  6. Avvia una VM di Compute Engine e Cloud TPU utilizzando il comando gcloud. Il comando da utilizzare varia a seconda che tu stia utilizzando VM TPU o nodi TPU. Per ulteriori informazioni, consulta la sezione Architettura del sistema.

    VM TPU

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

    Descrizioni dei flag di comando

    zone
    La zona in cui prevedi di creare il tuo Cloud TPU.
    accelerator-type
    Il tipo di Cloud TPU da creare.
    version
    La versione del software Cloud TPU.
    preemptible
    Le TPU prerilasciabili hanno un costo inferiore, ma potrebbero essere arrestate in qualsiasi momento.

    Nodo TPU

    $ gcloud compute tpus execution-groups create \
    --name=mnist-tutorial \
    --zone=us-central1-b \
    --tf-version=2.12.0 \
    --machine-type=n1-standard-1 \
    --accelerator-type=v3-8 \
    --preemptible
    

    Descrizioni dei flag di comando

    name
    Il nome della Cloud TPU da creare.
    zone
    La zona in cui prevedi di creare il tuo Cloud TPU.
    tf-version
    La versione di TensorFlow con il comando gcloud viene installata sulla tua VM.
    machine-type
    Il tipo di macchina della VM di Compute Engine da creare.
    accelerator-type
    Il tipo di Cloud TPU da creare.
    preemptible
    Le TPU prerilasciabili hanno un costo inferiore, ma potrebbero essere arrestate in qualsiasi momento.

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

  7. Al termine dell'esecuzione del comando gcloud compute tpus, verifica che il prompt shell sia cambiato da username@projectname a username@vm-name. Questa modifica mostra che hai eseguito l'accesso alla tua VM di Compute Engine.

    Se non hai eseguito la connessione all'istanza di Compute Engine, per connetterti puoi eseguire il seguente comando:

    VM TPU

    gcloud compute tpus tpu-vm ssh mnist-tutorial --zone=us-central1-b
    

    Nodo TPU

    gcloud compute ssh mnist-tutorial --zone=us-central1-b
    

    Continuando queste istruzioni, esegui ogni comando che inizia con (vm)$ nella finestra della sessione VM.

  8. Crea una variabile di ambiente per il nome TPU.

    VM TPU

    (vm)$ export TPU_NAME=local
    

    Nodo TPU

    (vm)$ export TPU_NAME=mnist-tutorial
    
  9. Installare i requisiti di TensorFlow.

    Il comando da utilizzare dipende dal fatto che tu stia usando VM TPU o nodi TPU.

    VM TPU

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

    Nodo TPU

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

Addestra il modello

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

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

    (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 TPU

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

    Nodo TPU

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  3. Passa alla directory in cui è archiviato il modello:

    VM TPU

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

    Nodo TPU

    (vm)$ cd /usr/share/models/official/legacy/image_classification
    
  4. 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 di comando

    tpu
    Il nome del Cloud TPU. Se non specificato al momento della configurazione della VM di Compute Engine e di Cloud TPU, il valore predefinito è il tuo nome utente.
    model_dir
    Il bucket Cloud Storage in cui vengono archiviati i checkpoint e i riepiloghi durante l'addestramento. Puoi utilizzare una cartella esistente per caricare 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 falsi_imagenet.
    train_epochs
    Il numero di periodi per addestrare il modello.
    distribution_strategy
    Per addestrare il modello ResNet su Cloud TPU, imposta distribution_strategy su tpu.
    download
    Se è impostato su true, lo script scarica e pre-elabora 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 un output 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 di Compute Engine, se non l'hai ancora fatto:

    (vm)$ exit
    

    La richiesta dovrebbe essere username@projectname, a indicare che sei in Cloud Shell.

  2. Eliminare le risorse Cloud TPU e Compute Engine. Il comando da utilizzare per eliminare le risorse dipende dall'utilizzo delle VM TPU o dei nodi TPU. Per ulteriori informazioni, consulta la sezione Architettura del sistema.

    VM TPU

    $ gcloud compute tpus tpu-vm delete mnist-tutorial \
    --zone=us-central1-b
    

    Nodo TPU

    $ gcloud compute tpus execution-groups delete mnist-tutorial \
    --zone=us-central1-b
    
  3. Verifica che le risorse siano state eliminate eseguendo gcloud compute tpus execution-groups list. L'eliminazione potrebbe richiedere diversi minuti. L'output del comando seguente non deve includere alcuna risorsa creata in questo tutorial:

    VM TPU

    $ gcloud compute tpus tpu-vm list --zone=us-central1-b

    Nodo TPU

    $ gcloud compute tpus execution-groups list --zone=us-central1-b
  4. Elimina il bucket Cloud Storage utilizzando gsutil, come mostrato di seguito. Sostituisci bucket-name con il nome del tuo bucket Cloud Storage.

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

Passaggi successivi

In genere, i tutorial di TensorFlow Cloud TPU addestrano il modello utilizzando un set di dati di esempio. I risultati di questo addestramento non sono utilizzabili per l'inferenza. Per utilizzare un modello per l'inferenza, puoi addestrare i dati in un set di dati disponibile pubblicamente o nel tuo set di dati. In genere, i modelli TensorFlow addestrati su Cloud TPU richiedono che i set di dati siano in formato TFRecord.

Puoi utilizzare l'esempio dello strumento di conversione del set di dati per convertire un set di dati di classificazione delle immagini in formato TFRecord. Se non utilizzi un modello di classificazione delle immagini, dovrai convertire personalmente il set di dati in formato TFRecord. Per ulteriori informazioni, vedi TFRecord e tf.Example.

Ottimizzazione degli iperparametri

Per migliorare le prestazioni del modello con il tuo set di dati, puoi regolare gli iperparametri del modello. Puoi trovare informazioni sugli iperparametri comuni a tutti i modelli TPU supportati su GitHub. Puoi trovare informazioni sugli iperparametri specifici del modello nel codice sorgente di ogni modello. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta la pagina Panoramica sull'ottimizzazione degli iperparametri, Utilizzo del servizio di ottimizzazione degli iperparametri e Sintonizzazione degli iperparametri.

Inferenza

Dopo aver addestrato il modello, puoi utilizzarlo per l'inferenza (nota anche come previsione). AI Platform è una soluzione basata su cloud per lo sviluppo, l'addestramento e il deployment dei modelli di machine learning. Una volta eseguito il deployment di un modello, puoi utilizzare il servizio di previsione AI Platform.