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 per il tuo framework per informazioni su come creare una TPU e una VM di Compute Engine.
Obiettivi
- Crea un bucket Cloud Storage per conservare l'output del set di dati e del modello.
- Prepara un set di dati imagenet falso simile al set di dati ImageNet.
- Eseguire il job di addestramento.
- Verifica i risultati di output.
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cloud TPU
- Cloud Storage
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
Prima di iniziare questo tutorial, verifica che il tuo progetto Google Cloud sia configurato correttamente.
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
-
Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
Questa procedura dettagliata utilizza i componenti fatturabili di Google Cloud. Controlla la pagina dei prezzi di Cloud TPU per una stima dei costi. Al termine, pulisci le risorse che crei per evitare addebiti inutili.
Addestramento di un singolo dispositivo Cloud TPU
Questa sezione fornisce informazioni sulla configurazione delle risorse Cloud Storage, del bucket e della VM Cloud TPU per l'addestramento di un singolo dispositivo.
Apri una finestra di Cloud Shell.
Crea una variabile per l'ID del tuo progetto.
$ export PROJECT_ID=project-id
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 di Cloud Shell, viene visualizzata una pagina
Authorize Cloud Shell
. Fai clic suAuthorize
in fondo alla 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 comando seguente:
$ gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 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 per configurare la TPU configura anche le autorizzazioni predefinite per l'account di servizio Cloud TPU configurato nel passaggio precedente. Se vuoi autorizzazioni granulari, rivedi le autorizzazioni a livello di accesso.Prepara il tuo set di dati o utilizza fake_imagenet
ImageNet è un database di immagini. Le immagini nel database sono organizzate in una gerarchia, con ciascun nodo della gerarchia raffigurato da centinaia e migliaia di immagini.
Questo tutorial utilizza una versione dimostrativa del set di dati ImageNet completo, indicato come fake_imagenet. Questa versione dimostrativa consente di testare il tutorial, riducendo allo stesso tempo i requisiti di archiviazione e tempo in genere associati all'esecuzione di un modello rispetto al database ImageNet completo.
Il set di dati falsi_imagenet si trova in questa posizione in Cloud Storage:
gs://cloud-tpu-test-datasets/fake_imagenet
Il set di datifalse_imagenet è utile solo per capire come utilizzare Cloud TPU e convalidare le prestazioni end-to-end. I valori di accuratezza e il modello salvato non saranno significativi.
Se vuoi utilizzare il set di dati ImageNet completo, consulta Download, pre-elaborazione e caricamento del set di dati ImageNet.
Avvia le risorse TPU utilizzando il comando
gcloud
. Il comando utilizzato varia a seconda che tu stia utilizzando VM TPU o nodi TPU. Per ulteriori informazioni sull'architettura delle due VM, consulta Architettura di sistema.VM TPU
$ gcloud compute tpus tpu-vm create resnet-tutorial \ --zone=europe-west4-a \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.11.0
Nodo TPU
gcloud compute tpus execution-groups create \ --project=${PROJECT_ID} \ --zone=europe-west4-a \ --name=resnet-tutorial \ --disk-size=300 \ --machine-type=n1-standard-16 \ --accelerator-type=v3-8 \ --tf-version=2.11.0
Descrizioni flag comando
project
- Il tuo ID progetto Google Cloud
zone
- La zona in cui prevedi di creare la tua Cloud TPU.
name
- Il nome della Cloud TPU da creare.
disk-size
- Le dimensioni del disco rigido in GB della VM creata dal comando
gcloud
. machine-type
- Il tipo di macchina della VM di Compute Engine da creare.
accelerator-type
- Il tipo di Cloud TPU da creare.
tf-version
- La versione di Tensorflow
gcloud
viene installata sulla VM.
Per maggiori informazioni sul comando
gcloud
, consulta la sezione Riferimento gcloud.Se non hai eseguito automaticamente l'accesso all'istanza di Compute Engine, accedi eseguendo il comando
ssh
seguente. Dopo aver eseguito l'accesso alla VM, il prompt di shell passa dausername@projectname
ausername@vm-name
:VM TPU
$ gcloud compute tpus tpu-vm ssh resnet-tutorial --zone=europe-west4-a
Nodo TPU
$ gcloud compute ssh resnet-tutorial --zone=europe-west4-a
Continuando queste istruzioni, esegui ogni comando che inizia con
(vm)$
nella finestra della sessione VM.Imposta la variabile del nome Cloud TPU.
VM TPU
(vm)$ export TPU_NAME=local
Nodo TPU
(vm)$ export TPU_NAME=resnet-tutorial
Imposta le variabili del bucket Cloud Storage
Configura le seguenti variabili di ambiente, sostituendo bucket-name con il nome del 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 prevede che i tuoi 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.
Installare i requisiti di TensorFlow.
Il comando da utilizzare varia a seconda che tu stia utilizzando VM TPU o nodi TPU.
VM TPU
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Nodo TPU
(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
Lo script di addestramento ResNet richiede un pacchetto aggiuntivo. Installalo ora:
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
Passa alla directory in cui è memorizzato il modello:
VM TPU
(vm)$ cd /usr/share/tpu/models
Nodo TPU
(vm)$ cd /usr/share/models
Imposta la variabile di ambiente
PYTHONPATH
:VM TPU
(vm)$ export PYTHONPATH="/usr/share/tpu/models:${PYTHONPATH}"
Nodo TPU
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
Esegui lo script di addestramento. Utilizza un set di dati falsi_imagenet e addestra ResNet per 100 passaggi.
(vm)$ python3 official/vision/train.py \ --tpu=${TPU_NAME} \ --experiment=resnet_imagenet \ --mode=train_and_eval \ --config_file=official/vision/configs/experiments/image_classification/imagenet_resnet50_tpu.yaml \ --model_dir=${MODEL_DIR} \ --params_override="task.train_data.input_path=${DATA_DIR}/train*, task.validation_data.input_path=${DATA_DIR}/validation*,task.train_data.global_batch_size=2048,task.validation_data.global_batch_size=2048,trainer.train_steps=100"
Descrizioni flag comando
tpu
- Il nome della tua TPU.
model_dir
- Specifica la directory in cui vengono archiviati i punti di controllo e i riepiloghi durante l'addestramento del modello. Se la cartella non è presente, il programma ne crea una. Quando utilizzi una Cloud TPU,
model_dir
deve essere un percorso di Cloud Storage (gs://...
). Puoi riutilizzare una cartella esistente per caricare i dati del checkpoint attuale e archiviare quelli esistenti, purché i checkpoint precedenti siano stati creati utilizzando TPU della stessa dimensione e della stessa versione di TensorFlow.
Questo addestrerà ResNet per 100 passaggi e verrà completato su un nodo TPU v3-8 in circa 3 minuti. Al termine dei 100 passaggi, viene visualizzato un output simile al seguente:
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 per singolo dispositivo. Segui questi passaggi per eliminare le attuali risorse TPU per singolo dispositivo.
Disconnettiti dall'istanza Compute Engine:
(vm)$ exit
Il prompt ora dovrebbe essere
username@projectname
, a indicare che ti trovi in Cloud Shell.Elimina la risorsa TPU.
VM TPU
$ gcloud compute tpus tpu-vm delete resnet-tutorial \ --zone=europe-west4-a
Descrizioni flag comando
zone
- La zona in cui si trovava la tua Cloud TPU.
Nodo TPU
$ gcloud compute tpus execution-groups delete resnet-tutorial \ --zone=europe-west4-a
Descrizioni flag comando
zone
- La zona che contiene la TPU da eliminare.
A questo punto, puoi completare questo tutorial e ripulire oppure continuare ed esplorare l'esecuzione del modello sui pod Cloud TPU.
Scalabilità del modello con i pod Cloud TPU
L'addestramento del modello su pod { product_name_short }} potrebbe richiedere alcune modifiche allo script di addestramento. Per informazioni, vedi Formazione sui pod TPU.
Addestramento dei pod TPU
Questa sezione fornisce informazioni sulla configurazione di un bucket Cloud Storage e sulle risorse Cloud TPU per l'addestramento dei pod.
Apri una finestra di Cloud Shell.
Crea una variabile per l'ID del tuo progetto.
export PROJECT_ID=project-id
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 di Cloud Shell, viene visualizzata una pagina
Authorize Cloud Shell
. Fai clic suAuthorize
in fondo alla pagina per consentire agcloud
di effettuare chiamate 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 utilizza un bucket creato in precedenza per il progetto:
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 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 configurato nel passaggio precedente. Se vuoi autorizzazioni granulari, consulta le autorizzazioni per il livello di accesso.La località del bucket deve trovarsi nella stessa regione della VM VM.
Prepara il tuo set di dati o utilizza fake_imagenet
ImageNet è un database di immagini. Le immagini nel database sono organizzate in una gerarchia, con ciascun nodo della gerarchia raffigurato da centinaia e migliaia di immagini.
L'addestramento di pod predefinito accede a una versione dimostrativa del set di dati completo di ImageNet, denominato fake_imagenet. Questa versione dimostrativa consente di testare l'addestramento dei pod, riducendo al contempo i requisiti di archiviazione e tempo in genere associati all'addestramento di un modello rispetto al database ImageNet completo.
Il set di datifalse_imagenet è utile solo per capire come utilizzare Cloud TPU e convalidare le prestazioni end-to-end. I valori di accuratezza e il modello salvato non saranno significativi.
Se vuoi utilizzare il set di dati ImageNet completo, consulta Download, pre-elaborazione e caricamento del set di dati ImageNet.
Avvia le risorse Cloud TPU utilizzando il comando
gcloud
.Il comando utilizzato varia a seconda che tu stia utilizzando una VM TPU o un nodo TPU. Per ulteriori informazioni sull'architettura delle due VM, consulta Architettura di sistema. Per maggiori informazioni sul comando
gcloud
, consulta la sezione Riferimento gcloud. Questo tutorial specifica un pod v3-32. Per altre opzioni pod, consulta la pagina dei tipi di TPU disponibili.VM TPU
$ gcloud compute tpus tpu-vm create resnet-tutorial \ --zone=europe-west4-a \ --accelerator-type=v3-32 \ --version=tpu-vm-tf-2.11.0-pod
Nodo TPU
$ gcloud compute tpus execution-groups create \ --zone=europe-west4-a \ --name=resnet-tutorial \ --accelerator-type=v3-32 \ --tf-version=2.11.0
Se non hai eseguito automaticamente l'accesso all'istanza di Compute Engine, accedi eseguendo il comando
ssh
seguente. Dopo aver eseguito l'accesso alla VM, il prompt di shell passa dausername@projectname
ausername@vm-instance-name
:VM TPU
$ gcloud compute tpus tpu-vm ssh resnet-tutorial --zone=europe-west4-a
Nodo TPU
$ gcloud compute ssh resnet-tutorial --zone=europe-west4-a
Continuando queste istruzioni, esegui ogni comando che inizia con
(vm)$
nella finestra della sessione VM.Esporta le variabili di configurazione di Cloud TPU:
(vm)$ export ZONE=europe-west4-a (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 prevede che i tuoi dati di addestramento siano accessibili in Cloud Storage. L'applicazione di addestramento usa anche il bucket Cloud Storage per archiviare i checkpoint durante l'addestramento.
Lo script di addestramento ResNet richiede un pacchetto aggiuntivo. Installalo ora.:
VM TPU
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
Nodo TPU
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
Installare i requisiti di TensorFlow.
Il comando da utilizzare varia a seconda che tu stia utilizzando VM TPU o nodi TPU.
VM TPU
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Nodo TPU
(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
Imposta la variabile di ambiente
PYTHONPATH
:VM TPU
(vm)$ export PYTHONPATH="/usr/share/tpu/models:${PYTHONPATH}" (vm)$ export TPU_LOAD_LIBRARY=0
Nodo TPU
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
Passa alla directory in cui è memorizzato il modello:
VM TPU
(vm)$ cd /usr/share/tpu/models
Nodo TPU
(vm)$ cd /usr/share/models
Addestrare il modello.
(vm)$ python3 official/vision/train.py \ --tpu=${TPU_NAME} \ --experiment=resnet_imagenet \ --mode=train_and_eval \ --config_file=official/vision/configs/experiments/image_classification/imagenet_resnet50_tpu.yaml \ --model_dir=${MODEL_DIR} \ --params_override="task.train_data.input_path=${DATA_DIR}/train*, task.validation_data.input_path=${DATA_DIR}/validation*,trainer.train_steps=100"
Descrizioni flag comando
tpu
- Il nome della tua TPU.
model_dir
- Specifica la directory in cui vengono archiviati i punti di controllo e i riepiloghi durante l'addestramento del modello. Se la cartella non è presente, il programma ne crea una. Quando utilizzi una Cloud TPU,
model_dir
deve essere un percorso Cloud Storage (gs://...
). Puoi riutilizzare una cartella esistente per caricare i dati del checkpoint attuale e archiviare quelli esistenti se i checkpoint precedenti sono stati creati utilizzando Cloud TPU della stessa dimensione e della stessa versione di TensorFlow.
Questa procedura addestra il modello sul set di dati falsi_imagenet a 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 ai seguenti:
{'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:
(vm)$ exit
Il prompt ora dovrebbe essere
username@projectname
, a indicare che ti trovi in Cloud Shell.Elimina le risorse Cloud TPU e Compute Engine. Il comando utilizzato per eliminare le risorse dipende dal fatto che tu stia utilizzando VM TPU o nodi TPU. Per saperne di più, vedi Architettura di sistema.
VM TPU
$ gcloud compute tpus tpu-vm delete resnet-tutorial \ --zone=europe-west4-a
Nodo TPU
$ gcloud compute tpus execution-groups delete resnet-tutorial \ --zone=europe-west4-a
Verifica che le risorse siano state eliminate eseguendo
gcloud compute tpus execution-groups list
. L'eliminazione potrebbe richiedere alcuni minuti. L'output del comando seguente non deve includere nessuna delle risorse TPU create in questo tutorial:VM TPU
$ gcloud compute tpus tpu-vm list --zone=europe-west4-a
Nodo TPU
$ gcloud compute tpus execution-groups list --zone=europe-west4-a
Esegui
gsutil
come mostrato, sostituendo bucket-name con il nome del bucket Cloud Storage che hai creato per questo tutorial:$ gsutil rm -r gs://bucket-name
Passaggi successivi
In generale, 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 sulle Cloud TPU richiedono set di dati in formato TFRecord.
Puoi utilizzare l'esempio 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 il set di dati nel formato TFRecord autonomamente. Per ulteriori informazioni, consulta 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 per tutti i modelli TPU supportati su GitHub. Puoi trovare informazioni sugli iperparametri specifici del modello nel codice sorgente di ciascun modello. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta Panoramica sull'ottimizzazione degli iperparametri, Utilizzo del servizio di ottimizzazione degli iperparametri e Iperparametri dell'iperparametro.
Inferenza
Dopo aver addestrato il modello, puoi utilizzarlo per l'inferenza (detta anche 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 AI Platform Prediction.
- Scopri come addestrare e valutare utilizzando i tuoi dati al posto dei set di dati fake_imagenet o ImageNet seguendo il tutorial sulle conversioni dei set di dati. Il tutorial spiega come utilizzare lo script di esempio del convertitore di dati di classificazione immagini per convertire un set di dati non elaborati per la classificazione delle immagini in TFRecord utilizzabili dai modelli Tensorflow di Cloud TPU.
- Esegui un collezione Cloud TPU che dimostra come eseguire un modello di classificazione delle immagini utilizzando i tuoi dati immagine.
- Esplora gli altri tutorial di Cloud TPU.
- Scopri come utilizzare gli strumenti di monitoraggio della TPU in TensorBoard.
- Scopri come addestrare ResNet con Cloud TPU e GKE.