Questo tutorial mostra come addestrare un modello Keras ResNet su Cloud TPU utilizzando
tf.distribute.TPUStrategy
.
Se non hai dimestichezza con Cloud TPU, ti consigliamo vivamente di consultare la guida rapida il tuo framework per imparare a creare una TPU e una VM di Compute Engine.
Obiettivi
- Crea un bucket Cloud Storage per contenere il set di dati e l'output del modello.
- Prepara un set di dati ImageNet falso simile al set di dati ImageNet.
- 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.
Prima di iniziare
Prima di iniziare questo tutorial, controlla che il progetto Google Cloud sia configurato correttamente.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
Questa procedura dettagliata utilizza i componenti fatturabili di Google Cloud. Controlla il Pagina dei prezzi di Cloud TPU per stimare i costi. Una volta terminato il loro utilizzo, pulisci le risorse create per evitare addebiti non necessari.
Addestramento con un singolo dispositivo Cloud TPU
.Questa sezione fornisce informazioni sulla configurazione del bucket Cloud Storage, delle VM e delle risorse Cloud TPU per l'addestramento di un singolo dispositivo.
Apri una finestra di Cloud Shell.
Crea una variabile per l'ID del progetto.
$ export PROJECT_ID=project-id
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 suAuthorize
in basso della pagina per consentire agcloud
di effettuare chiamate API con le tue credenziali.Creare un account di servizio per il progetto Cloud TPU.
Gli account di servizio consentono al servizio Cloud TPU di accedere ad altri servizi Google Cloud.
$ 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
Crea un bucket Cloud Storage utilizzando il seguente comando:
$ gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central2
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 per configurare la TPU configura anche le autorizzazioni predefinite per l'account di servizio Cloud TPU configurato nel passaggio precedente. Se vuoi autorizzazioni più granulari, esamina le autorizzazioni a livello di accesso.Prepara il set di dati o utilizza fake_imagenet
ImageNet è un database di immagini. Le immagini nel database sono organizzate in una gerarchia, in cui ogni nodo è rappresentato da centinaia e migliaia di immagini.
Questo tutorial utilizza una versione di dimostrazione del set di dati ImageNet completo, indicata come fake_imagenet. Questa versione dimostrativa consente di testare del tuo tutorial, riducendo al contempo i requisiti tipici di archiviazione e tempo associate all'esecuzione di un modello sull'intero database ImageNet.
Il set di dati fake_imagenet si trova in questa posizione su Cloud Storage:
gs://cloud-tpu-test-datasets/fake_imagenet
Il set di dati falsa_imagenet è utile solo per capire come utilizzare un Cloud TPU e convalida delle prestazioni end-to-end. I valori di accuratezza e il modello salvato non avranno significato.
Se vuoi utilizzare il set di dati ImageNet completo, consulta Scaricare, pre-elaborare e caricare il set di dati ImageNet.
Avvia le risorse TPU utilizzando il comando
gcloud
. Il comando che utilizzi dipende dall'utilizzo di VM TPU o nodi TPU. Per ulteriori informazioni sulle due architetture delle VM, consulta Architettura del sistema.$ gcloud compute tpus tpu-vm create resnet-tutorial \ --zone=us-central2-b \ --accelerator-type=v4-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 di TPU.
version
- La versione software di Cloud TPU.
Per ulteriori informazioni sul comando
gcloud
, consulta le Riferimento gcloud.Connettiti all'istanza VM TPU tramite SSH. Quando la connessione alla VM è attiva, il prompt shell passa da
username@projectname
ausername@vm-name
:gcloud compute tpus tpu-vm ssh resnet-tutorial --zone=us-central2-b
Imposta la variabile nome Cloud TPU.
(vm)$ export TPU_NAME=local
Imposta le variabili del bucket Cloud Storage
Configura le seguenti variabili di ambiente, sostituendo bucket-name con il nome del tuo bucket Cloud Storage:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/resnet-2x (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet
L'applicazione di addestramento si aspetta che i dati di addestramento siano accessibili in Cloud Storage. L'applicazione di addestramento utilizza anche Bucket Cloud Storage per archiviare i checkpoint durante l'addestramento.
Quando crei la TPU, se imposti il parametro
--version
su una versione che termina con-pjrt
, imposta le seguenti variabili di ambiente per attivare il runtime PJRT:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
Installa i requisiti di TensorFlow.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Lo script di addestramento di ResNet richiede un pacchetto aggiuntivo. Installalo ora:
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
Passa alla directory in cui si trova il modello:
(vm)$ cd /usr/share/tpu/tensorflow/resnet50_keras
Imposta la variabile di ambiente
PYTHONPATH
:(vm)$ /usr/share/tpu/tensorflow/resnet50_keras"
Esegui lo script di addestramento. Viene utilizzato un set di dati falsa_imagenet e addestra ResNet per 100 passi.
(vm)$ resnet50.py --tpu=local --data=gs://cloud-tpu-test-datasets/fake_imagenet
Descrizioni flag di comando
tpu
- Il nome della TPU.
data
- Specifica la directory in cui vengono archiviati i controlli regolari e i riepiloghi
durante l'addestramento del modello. Se la cartella risulta mancante, il programma ne crea
una. Se utilizzi una Cloud TPU,
model_dir
deve essere un percorso Cloud Storage (gs://...
). Puoi riutilizzare una cartella esistente per caricare i dati del checkpoint corrente e per archiviare checkpoint aggiuntivi, a condizione che i checkpoint precedenti siano stati creati utilizzando una TPU delle stesse dimensioni e della stessa versione di TensorFlow.
Verrà addestrato ResNet per 100 passaggi e l'operazione verrà completata su un nodo TPU v3-8 in circa 3 minuti. Alla fine dei 100 passaggi, genera un output simile al appare quanto segue:
I0624 17:04:26.974905 140457742666816 controller.py:290] eval | step: 100 | eval time: 23.3 sec | output: {'accuracy': 0.0010141226, 'top_5_accuracy': 0.0051457332, 'validation_loss': 8.448798} eval | step: 100 | eval time: 23.3 sec | output: {'accuracy': 0.0010141226, 'top_5_accuracy': 0.0051457332, 'validation_loss': 8.448798}
Hai completato l'esempio di addestramento con un solo dispositivo. Per eliminare le risorse TPU attuali a un solo dispositivo:
Disconnettiti dall'istanza Compute Engine:
(vm)$ exit
Il tuo prompt ora dovrebbe essere
username@projectname
, a indicare che ti trovi in in Cloud Shell.Elimina la risorsa TPU.
$ gcloud compute tpus tpu-vm delete resnet-tutorial \ --zone=us-central2-b
Descrizioni flag di comando
zone
- La zona in cui si trovava la tua Cloud TPU.
Scalabilità del modello con i pod di Cloud TPU
L'addestramento del modello sui pod di Cloud TPU può richiedere alcune modifiche lo script di addestramento. Per informazioni, consulta Addestramento su pod di TPU.
Addestramento di pod TPU
Questa sezione fornisce informazioni sulla configurazione di un bucket Cloud Storage Risorse Cloud TPU per l'addestramento dei pod.
Configura
Apri una finestra di Cloud Shell.
Crea una variabile per l'ID del progetto.
export PROJECT_ID=project-id
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 suAuthorize
nella parte inferiore della pagina per consentire agcloud
di effettuare chiamate alle API Google Cloud con le tue credenziali.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
Crea un bucket Cloud Storage utilizzando il comando seguente o un bucket che hai creato in precedenza per il tuo progetto:
gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central2
Questo bucket Cloud Storage archivia i dati che utilizzi per addestrare il modello e i risultati dell'addestramento. Il comando
gcloud
utilizzato in questa il 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.La posizione del bucket deve trovarsi nella stessa regione della VM TPU.
Prepara il set di dati o utilizza fake_imagenet
ImageNet è un database di immagini. Le immagini nel database sono organizzate in una gerarchia, con ogni nodo della gerarchia rappresentato da centinaia e migliaia di immagini.
L'addestramento del pod predefinito accede a una versione di dimostrazione del set di dati ImageNet completo, denominato fake_imagenet. Questa versione di dimostrazione ti consente di testare l'addestramento dei pod, riducendo al contempo i requisiti di spazio di archiviazione e tempo in genere associati all'addestramento di un modello rispetto al database ImageNet completo.
Il set di dati falsa_imagenet è utile solo per capire come utilizzare un Cloud TPU e convalida delle prestazioni end-to-end. L'accuratezza i numeri e il modello salvato non saranno significativi.
Per utilizzare l'intero set di dati ImageNet, consulta Download, pre-elaborazione e caricamento del set di dati ImageNet.
Creazione di risorse Cloud TPU
Avvia le risorse Cloud TPU utilizzando il comando
gcloud
.Questo tutorial specifica un pod v3-32. Per altre opzioni di pod, vedi Versioni TPU.
$ gcloud compute tpus tpu-vm create resnet-tutorial \ --zone=us-central2-b \ --accelerator-type=4-32 \ --version=tpu-vm-tf-2.17.0-pod-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.
Connettiti all'istanza VM TPU tramite SSH. Quando la connessione alla VM è attiva, il prompt shell passa da
username@projectname
ausername@vm-name
:gcloud compute tpus tpu-vm ssh resnet-tutorial --zone=us-central2-b
Esporta le variabili di configurazione di Cloud TPU:
(vm)$ export ZONE=us-central2-b (vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export TPU_NAME=resnet-tutorial (vm)$ export DATA_DIR=gs://cloud-tpu-test-datasets/fake_imagenet (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/resnet-2x-pod
L'applicazione di addestramento si aspetta che i dati di addestramento siano accessibili in Cloud Storage. L'applicazione di addestramento utilizza anche il tuo bucket Cloud Storage per archiviare i checkpoint durante l'addestramento.
Lo script di addestramento di ResNet richiede un pacchetto aggiuntivo. Installalo ora:
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
Installa i requisiti di TensorFlow. {: id='setup-env'}:
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Imposta la variabile di ambiente
PYTHONPATH
:(vm)$ export PYTHONPATH="PYTHONPATH=/usr/share/tpu/tensorflow/resnet50_keras" (vm)$ export TPU_LOAD_LIBRARY=0
Passa alla directory in cui è archiviato il modello:
(vm)$ cd /usr/share/tpu/tensorflow/resnet50_keras
Addestrare il modello.
(vm)$ resnet50.py --tpu=${TPU_NAME} --data=gs://cloud-tpu-test-datasets/fake_imagenet
Descrizioni dei flag dei comandi
tpu
- Il nome della TPU.
data
- Specifica la directory in cui vengono archiviati i controlli regolari e i riepiloghi
durante l'addestramento del modello. Se la cartella non è presente, il programma ne crea una.
Se utilizzi una Cloud TPU,
model_dir
deve essere un percorso Cloud Storage (gs://...
). Puoi riutilizzare una cartella esistente per caricare i dati dei checkpoint attuali e per archiviare checkpoint aggiuntivi, a condizione che i checkpoint precedenti siano stati creati utilizzando una Cloud TPU delle stesse dimensioni e della stessa versione di TensorFlow.
Questa procedura addestra il modello sul set di dati fake_imagenet con 100 passaggi di addestramento e 13 passaggi di valutazione. Questo addestramento richiede circa 2 minuti su una Cloud TPU v3-32. Al termine dell'addestramento e della valutazione, vengono visualizzati messaggi simili al seguente:
{'accuracy': 0.0009716797, 'learning_rate': 0.10256411, 'top_5_accuracy': 0.0049560545, 'training_loss': 8.5587225} train | step: 100 | steps/sec: 1.2 | output: {'accuracy': 0.0009716797, 'learning_rate': 0.10256411, 'top_5_accuracy': 0.0049560545, 'training_loss': 8.5587225} eval | step: 100 | eval time: 24.8 sec | output: {'accuracy': 0.0010141226, 'top_5_accuracy': 0.004356971, 'validation_loss': 8.50038} eval | step: 100 | eval time: 24.8 sec | output: {'accuracy': 0.0010141226, 'top_5_accuracy': 0.004356971, 'validation_loss': 8.50038}
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.
Disconnettiti dall'istanza Compute Engine, se non lo hai già fatto Fatto:
(vm)$ exit
Il tuo prompt ora dovrebbe essere
username@projectname
, a indicare che ti trovi in in Cloud Shell.Elimina le risorse Cloud TPU e Compute Engine.
$ gcloud compute tpus tpu-vm delete resnet-tutorial \ --zone=us-central2-b
Verifica che le risorse siano state eliminate eseguendo
gcloud compute tpus tpu-vm list
. La l'eliminazione potrebbe richiedere diversi minuti. L'output del seguente comando non deve includere le risorse TPU create in questo tutorial:$ gcloud compute tpus tpu-vm list --zone=us-central2-b
Elimina il bucket Cloud Storage che hai creato per questo tutorial:
$ gcloud storage rm gs://bucket-name --recursive
Passaggi successivi
I tutorial di TensorFlow Cloud TPU generalmente addestrano il modello utilizzando 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. I modelli TensorFlow addestrati su Cloud TPU generalmente richiedono che i set di dati siano in formato TFRecord.
Puoi utilizzare il sample dello strumento di conversione dei 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 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 e regolare gli iperparametri. Puoi trovare informazioni sugli iperparametri comuni a tutti i modelli supportati da TPU su GitHub. Le informazioni sugli iperparametri specifici del modello sono disponibili nel codice fonte di ciascun modello. 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 (chiamata 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.
- Scopri come eseguire l'addestramento e la valutazione utilizzando i tuoi dati al posto dei set di dati fake_imagenet o ImageNet seguendo il tutorial sulla conversione dei set di dati. Il tutorial spiega come utilizzare il convertitore dei dati di classificazione delle immagini script di esempio per convertire un set di dati non elaborato per la classificazione delle immagini TFRecord utilizzabili dai modelli TensorFlow di Cloud TPU.
- Esegui un colab Cloud TPU che mostra come eseguire un modello di classificazione delle immagini utilizzando i tuoi dati sulle immagini.
- Esplora gli altri tutorial su Cloud TPU.
- Scopri come utilizzare gli strumenti di monitoraggio TPU in TensorBoard.
- Scopri come addestrare ResNet con Cloud TPU e GKE.