Questo tutorial ti mostra come addestrare il modello ResNet-50 su un dispositivo Cloud TPU con PyTorch. Puoi applicare lo stesso pattern ad altri modelli di classificazione delle immagini ottimizzati per TPU che utilizzano PyTorch e il set di dati ImageNet.
Il modello di questo tutorial è basato su Deep Residual Learning for Image Recognition, che introduce per prima l'architettura ResNet (ResNet). Il tutorial utilizza la variante a 50 livelli, ResNet-50, e dimostra l'addestramento del modello utilizzando PyTorch/XLA.
Obiettivi
- Prepara il set di dati.
- Esegui il job di addestramento.
- Verifica i risultati dell'output.
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cloud TPU
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 componenti fatturabili di Google Cloud. Consulta la pagina Prezzi di Cloud TPU per una stima dei costi. Assicurati di pulire le risorse che crei quando hai finito di utilizzarle per evitare addebiti inutili.
Configurare un'istanza di Compute Engine
Apri una finestra di Cloud Shell.
Crea una variabile per l'ID del tuo progetto.
export PROJECT_ID=project-id
Configura l'interfaccia a riga di comando di Google Cloud per 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 GCP con le tue credenziali.Avvia la risorsa Compute Engine richiesta per questo tutorial.
gcloud compute instances create resnet50-tutorial \ --zone=us-central1-a \ --machine-type=n1-highmem-96 \ --image-family=torch-xla \ --image-project=ml-images \ --boot-disk-size=300GB \ --scopes=https://www.googleapis.com/auth/cloud-platform
Se prevedi di addestrare Resnet50 su dati reali, scegli il tipo di macchina con il maggior numero di CPU possibile. Resnet50 prevede generalmente un input elevato, quindi l'addestramento può essere molto lento a meno che non ci siano molti worker da inserire nei dati e una RAM sufficiente per mantenere un numero elevato di thread di worker. Per risultati ottimali, seleziona
n1-highmem-96
tipo di macchina.Se intendi scaricare ImageNet, specifica una dimensione del disco di almeno 300 GB. Se prevedi di utilizzare solo dati falsi, puoi specificare la dimensione predefinita del disco di 20 GB. Questo tutorial ti consiglia di utilizzare entrambi i set di dati.
Avvia una risorsa Cloud TPU
Dalla macchina virtuale Compute Engine, avvia una risorsa Cloud TPU utilizzando il seguente comando:
(vm) $ gcloud compute tpus create resnet50-tutorial \ --zone=us-central1-a \ --network=default \ --version=pytorch-1.11 \ --accelerator-type=v3-8
Identifica l'indirizzo IP per la risorsa Cloud TPU.
(vm) $ gcloud compute tpus list --zone=us-central1-a
Creare e configurare l'ambiente PyTorch
Connettiti alla nuova istanza di Compute Engine.
gcloud compute ssh resnet50-tutorial --zone=us-central1-a
Da questo momento in poi, un prefisso (vm)$
significa che devi eseguire il comando sull'istanza VM di Compute Engine.
Avvia un ambiente
conda
.(vm) $ conda activate torch-xla-1.11
Configura le variabili di ambiente per la risorsa Cloud TPU.
(vm) $ export TPU_IP_ADDRESS=ip-address
(vm) $ export XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"
Addestramento con il set di dati falsi
Ti consigliamo di utilizzare il set di dati fasulli per l'esecuzione iniziale anziché il set reale ImageNet, poiché fake_data
viene installato automaticamente nella tua VM e richiede meno tempo e meno risorse per l'elaborazione.
(vm) $ python /usr/share/torch-xla-1.11/pytorch/xla/test/test_train_mp_imagenet.py --fake_data --model=resnet50 --num_epochs=2 --batch_size=128 --log_steps=20
Addestramento con il set di dati reale
Se tutto sembra a posto con il flag --fake_data
, puoi provare l'addestramento su dati reali, come ImageNet.
In generale, test_train_mp_imagenet.py
utilizza torchvision.datasets.ImageFolder
per consentirti di usare qualsiasi set di dati che sia strutturato correttamente. Consulta la documentazione di ImageCartella.
Alcune modifiche suggerite nella riga di comando per l'utilizzo di dati reali, supponendo che il set di dati sia stato memorizzato in ~/imagenet:
(vm) $ python /usr/share/torch-xla-1.11/pytorch/xla/test/test_train_mp_imagenet.py --datadir=~/imagenet --model=resnet50 --num_epochs=90 --num_workers=8 --batch_size=128 --log_steps=200
Richiesta di quota CPU aggiuntiva
Pianifica e richiedi risorse aggiuntive con qualche giorno di anticipo per assicurarti che ci sia tempo sufficiente per soddisfare la tua richiesta.
- Vai alla pagina Quote.
- Dal menu Servizio, seleziona API Cloud TPU.
- Seleziona l'area geografica o le zone in cui vuoi utilizzare le CPU.
- Dal menu Metrica, seleziona Nessuno e inserisci le CPU nella casella di ricerca.
- Seleziona CPU.
- Nell'elenco, seleziona API Compute Engine - CPU, quindi fai clic su Modifica quote nella parte superiore della pagina.
- Inserisci l'importo della quota richiesta e una descrizione (obbligatoria), quindi fai clic su Fine. Viene inviata una richiesta di approvazione al fornitore di servizi.
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 di Compute Engine, se non l'hai ancora fatto:
(vm)$ exit
Il tuo prompt dovrebbe ora essere
user@projectname
, a indicare che ti trovi in Cloud Shell.In Cloud Shell, esegui i
ctpu delete
con i flag--zone
e--name
utilizzati quando hai configurato la VM di Compute Engine e Cloud TPU. Verranno eliminate sia la VM che Cloud TPU.$ ctpu delete --project=${PROJECT_ID} \ --name=resnet50-tutorial \ --zone=us-central1-a
Esegui
ctpu status
per assicurarti di non avere istanze allocate per evitare addebiti non necessari per l'utilizzo della TPU. L'eliminazione può richiedere qualche minuto. Una risposta come quella seguente indica che non ci sono più istanze allocate:$ ctpu status --project=${PROJECT_ID} \ --zone=us-central1-a
2018/04/28 16:16:23 WARNING: Setting zone to "us-central1-a" No instances currently exist. Compute Engine VM: -- Cloud TPU: --
Passaggi successivi
Prova i lab di PyTorch:
- Introduzione a PyTorch su Cloud TPU
- Addestramento MNIST sulle TPU
- Addestramento ResNet18 sulle TPU con set di dati Cifar10
- Inferenza con modello ResNet50 preaddestrato
- Trasferimento di tipo neurale veloce
- MultiCore Training AlexNet su Fashion MNIST
- AlexNet, il corso di formazione per singolo core su Fashion MNIST