Le unità di elaborazione grafica (GPU) possono accelerare notevolmente il processo di addestramento per molti modelli di deep learning. L'addestramento dei modelli per attività come la classificazione delle immagini, l'analisi video e l'elaborazione del linguaggio naturale comporta la moltiplicazione di matrici ad alta intensità di calcolo e altre operazioni che possono sfruttare l'architettura altamente parallela di una GPU.
L'addestramento di un modello di deep learning che prevede attività di calcolo intensive su set di dati estremamente grandi può richiedere giorni su un singolo processore. Tuttavia, se progetti il tuo programma in modo da scaricare queste attività su una o più GPU, puoi ridurre il tempo di addestramento a ore anziché a giorni.
Prima di iniziare
AI Platform Training ti consente di eseguire l'applicazione di addestramento TensorFlow su una macchina con GPU. Leggi la guida di TensorFlow all'utilizzo delle GPU e la sezione di questo documento relativa all'aggiustamento del codice di addestramento per l'utilizzo delle GPU per assicurarti che la tua applicazione utilizzi le GPU disponibili.
Puoi anche utilizzare le GPU con framework di machine learning diversi da TensorFlow, se utilizzi un container personalizzato per l'addestramento.
Alcuni modelli non traggono vantaggio dall'esecuzione su GPU. Consigliamo le GPU per modelli di grandi dimensioni e complessi che prevedono molte operazioni matematiche. Anche in questo caso, ti consigliamo di testare il vantaggio del supporto GPU eseguendo l'addestramento su un piccolo campione di dati.
Richiesta di macchine con GPU
Per utilizzare le GPU nel cloud, configura il job di addestramento in modo che acceda alle macchine con GPU in uno dei seguenti modi:
- Utilizza il livello della bilancia
BASIC_GPU
. - Utilizza i tipi di macchine di Compute Engine e collega le GPU.
- Utilizza i tipi di macchine precedenti con GPU.
Macchina di base con GPU integrata
Se stai imparando a utilizzare AI Platform Training o
sperimentando con macchine con GPU, puoi impostare il livello di scala su
BASIC_GPU
per ottenere una singola istanza worker con una GPU.
Tipi di macchine Compute Engine con GPU collegate
Se configuri il job di addestramento con i tipi di macchine Compute Engine, puoi collegare un numero personalizzato di GPU per accelerare il job:
- Imposta il livello della scala su
CUSTOM
. - Configura il tuo worker master e qualsiasi altro tipo di compito (worker, server dei parametri o valutatore) che fa parte del tuo job in modo da utilizzare tipi di macchine Compute Engine validi.
- Aggiungi un campo
acceleratorConfig
con il tipo e il numero di GPU damasterConfig
,workerConfig
,parameterServerConfig
oevaluatorConfig
, a seconda delle istanze di macchine virtuali (VM) da accelerare. Puoi utilizzare i seguenti tipi di GPU:NVIDIA_TESLA_A100
NVIDIA_TESLA_P4
NVIDIA_TESLA_P100
NVIDIA_TESLA_T4
NVIDIA_TESLA_V100
Per creare un acceleratorConfig
valido, devi tenere conto di diverse limitazioni:
Nella configurazione puoi utilizzare solo un determinato numero di GPU. Ad esempio, puoi collegare 2 o 4 NVIDIA Tesla T4, ma non 3. Per sapere quali conteggi sono validi per ciascun tipo di GPU, consulta la tabella di compatibilità riportata di seguito.
Devi assicurarti che ciascuna delle configurazioni GPU fornisca CPU e memoria virtuali sufficienti al tipo di macchina a cui la colleghi. Ad esempio, se utilizzi
n1-standard-32
per i tuoi worker, ogni worker dispone di 32 vCPU e 120 GB di memoria. Poiché ogni NVIDIA Tesla V100 può fornire fino a 12 CPU virtuali e 76 GB di memoria, devi collegarne almeno 4 a ognin1-standard-32
worker per supportarne i requisiti. (2 GPU forniscono risorse insufficienti e non puoi specificare 3 GPU).Esamina l'elenco dei tipi di macchine per AI Platform Training e il confronto delle GPU per i carichi di lavoro di calcolo per determinare queste compatibilità oppure consulta la tabella di compatibilità riportata di seguito.
Tieni presente la seguente limitazione aggiuntiva sulle risorse GPU per AI Platform Training in casi particolari:
- Una configurazione con 4 GPU NVIDIA Tesla P100 supporta solo fino a 64 vCPU e fino a 208 GB di memoria in tutte le regioni e le zone.
Devi inviare il job di addestramento a una regione che supporta la configurazione della GPU. Scopri di più sul supporto per le regioni di seguito.
La tabella seguente fornisce una guida rapida per il numero di acceleratori di ciascun tipo che puoi collegare a ciascun tipo di macchina Compute Engine:
Numeri validi di GPU per ogni tipo di macchina | ||||||
---|---|---|---|---|---|---|
Tipo di macchina | NVIDIA A100 | NVIDIA Tesla K80 | NVIDIA Tesla P4 | NVIDIA Tesla P100 | NVIDIA Tesla T4 | NVIDIA Tesla V100 |
n1-standard-4 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-standard-8 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-standard-16 |
2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 2, 4, 8 | |
n1-standard-32 |
4, 8 | 2, 4 | 2, 4 | 2, 4 | 4, 8 | |
n1-standard-64 |
4 | 4 | 8 | |||
n1-standard-96 |
4 | 4 | 8 | |||
n1-highmem-2 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-highmem-4 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-highmem-8 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-highmem-16 |
2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 2, 4, 8 | |
n1-highmem-32 |
4, 8 | 2, 4 | 2, 4 | 2, 4 | 4, 8 | |
n1-highmem-64 |
4 | 4 | 8 | |||
n1-highmem-96 |
4 | 4 | 8 | |||
n1-highcpu-16 |
2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 2, 4, 8 | |
n1-highcpu-32 |
4, 8 | 2, 4 | 2, 4 | 2, 4 | 4, 8 | |
n1-highcpu-64 |
8 | 4 | 4 | 4 | 8 | |
n1-highcpu-96 |
4 | 4 | 8 | |||
a2-highgpu-1g |
1 | |||||
a2-highgpu-2g |
2 | |||||
a2-highgpu-4g |
4 | |||||
a2-highgpu-8g |
8 | |||||
a2-megagpu-16g |
16 |
Di seguito è riportato un esempio di invio di un job che utilizza tipi di macchine Compute Engine con GPU collegate.
Tipi di macchine con GPU incluse
In alternativa, anziché utilizzare un acceleratorConfig
, puoi selezionare un tipo di macchina legacy con GPU incluse:
- Imposta il livello della scala su
CUSTOM
. - Configura il tuo worker principale e qualsiasi altro tipo di compito (worker, server di parametri o valutatore) che vuoi accelerare in modo da utilizzare uno dei seguenti tipi di macchine con GPU, in base al numero di GPU e al tipo di acceleratore richiesto per il compito:
standard_gpu
: una singola GPUcomplex_model_m_gpu
: quattro GPUcomplex_model_l_gpu
: otto GPUstandard_p100
: una singola GPU NVIDIA Tesla P100complex_model_m_p100
: quattro GPU NVIDIA Tesla P100standard_v100
: una singola GPU NVIDIA Tesla V100large_model_v100
: una singola GPU NVIDIA Tesla V100complex_model_m_v100
: quattro GPU NVIDIA Tesla V100complex_model_l_v100
: otto GPU NVIDIA Tesla V100
Di seguito è riportato un esempio di invio di un job con tipi di macchine abilitati per GPU utilizzando il comando gcloud
.
Scopri di più sui tipi di macchina per AI Platform Training.
Regioni che supportano le GPU
Devi eseguire il job in una regione che supporta le GPU. Al momento, le seguenti regioni forniscono accesso alle GPU:
us-west1
us-west2
us-central1
us-east1
us-east4
northamerica-northeast1
southamerica-east1
europe-west1
europe-west2
europe-west4
asia-south1
asia-southeast1
asia-east1
asia-northeast1
asia-northeast3
australia-southeast1
Inoltre, alcune di queste regioni forniscono l'accesso solo a determinati tipi di GPU. Per comprendere appieno le regioni disponibili per i servizi AI Platform Training, tra cui l'addestramento dei modelli e le previsioni online/collettive, consulta la guida alle regioni.
Se il job di addestramento utilizza più tipi di GPU, queste devono essere tutte disponibili in un'unica zona della tua regione. Ad esempio, non puoi eseguire un job in us-central1
con un worker principale che utilizza GPU NVIDIA Tesla T4, server di parametri che utilizzano GPU NVIDIA Tesla K80 e worker che utilizzano GPU NVIDIA Tesla P100. Sebbene tutte queste GPU siano disponibili per i job di addestramento in
us-central1
, nessuna singola zona in quella regione fornisce tutti e tre i tipi di GPU. Per approfondire la disponibilità delle GPU in base alla zona, consulta il confronto delle GPU per i workload di calcolo.
Invio del job di addestramento
Puoi inviare il job di addestramento utilizzando il comando gcloud ai-platform jobs submit
training
.
Definisci un file
config.yaml
che descriva le opzioni GPU che preferisci. La struttura del file YAML rappresenta la risorsa Job. Di seguito sono riportati due esempi di fileconfig.yaml
.Il primo esempio mostra un file di configurazione per un job di addestramento che utilizza i tipi di macchine Compute Engine, alcuni dei quali hanno GPU collegate:
trainingInput: scaleTier: CUSTOM # Configure a master worker with 4 T4 GPUs masterType: n1-highcpu-16 masterConfig: acceleratorConfig: count: 4 type: NVIDIA_TESLA_T4 # Configure 9 workers, each with 4 T4 GPUs workerCount: 9 workerType: n1-highcpu-16 workerConfig: acceleratorConfig: count: 4 type: NVIDIA_TESLA_T4 # Configure 3 parameter servers with no GPUs parameterServerCount: 3 parameterServerType: n1-highmem-8
L'esempio seguente mostra un file di configurazione per un job con una configurazione simile a quella riportata sopra. Tuttavia, questa configurazione utilizza tipi di macchine legacy che includono GPU anziché collegare le GPU con un
acceleratorConfig
:trainingInput: scaleTier: CUSTOM # Configure a master worker with 4 GPUs masterType: complex_model_m_gpu # Configure 9 workers, each with 4 GPUs workerCount: 9 workerType: complex_model_m_gpu # Configure 3 parameter servers with no GPUs parameterServerCount: 3 parameterServerType: large_model
Utilizza il comando
gcloud
per inviare il job, incluso un argomento--config
che rimandi al fileconfig.yaml
. L'esempio seguente presuppone che tu abbia configurato le variabili di ambiente, indicate da un segno$
seguito da lettere maiuscole, per i valori di alcuni argomenti:gcloud ai-platform jobs submit training $JOB_NAME \ --package-path $APP_PACKAGE_PATH \ --module-name $MAIN_APP_MODULE \ --job-dir $JOB_DIR \ --region us-central1 \ --config config.yaml \ -- \ --user_arg_1 value_1 \ ... --user_arg_n value_n
In alternativa, puoi specificare i dettagli di configurazione del cluster con i flag della riga di comando anziché in un file di configurazione. Scopri di più su come utilizzare questi indicatori.
L'esempio seguente mostra come inviare un job con la stessa configurazione del primo esempio (utilizzando i tipi di macchine Compute Engine con GPU collegate), ma senza utilizzare un file config.yaml
:
gcloud ai-platform jobs submit training $JOB_NAME \
--package-path $APP_PACKAGE_PATH \
--module-name $MAIN_APP_MODULE \
--job-dir $JOB_DIR \
--region us-central1 \
--scale-tier custom \
--master-machine-type n1-highcpu-16 \
--master-accelerator count=4,type=nvidia-tesla-t4 \
--worker-count 9 \
--worker-machine-type n1-highcpu-16 \
--worker-accelerator count=4,type=nvidia-tesla-t4 \
--parameter-server-count 3 \
--parameter-server-machine-type n1-highmem-8 \
-- \
--user_arg_1 value_1 \
...
--user_arg_n value_n
Note:
- Se specifichi un'opzione sia nel file di configurazione
(
config.yaml
) sia come flag della riga di comando, il valore nella riga di comando sostituisce il valore nel file di configurazione. - Il flag
--
vuoto indica la fine dei flag specificigcloud
e l'inizio dei flagUSER_ARGS
che vuoi passare all'applicazione. - I flag specifici per AI Platform Training, ad esempio
--module-name
,--runtime-version
e--job-dir
, devono precedere il flag--
vuoto. Il servizio AI Platform Training interpreta questi flag. - Il flag
--job-dir
, se specificato, deve precedere il flag--
vuoto, perché AI Platform Training utilizza il--job-dir
per convalidare il percorso. - L'applicazione deve gestire anche il flag
--job-dir
, se specificato. Anche se il flag precede il--
vuoto,--job-dir
viene passato anche all'applicazione come flag a riga di comando. - Puoi definire tutti i
USER_ARGS
necessari. AI Platform Training passa--user_first_arg
,--user_second_arg
e così via alla tua applicazione.
Per maggiori dettagli sulle opzioni di invio dei job, consulta la guida su come avviare un job di addestramento.
Modificare il codice di addestramento per utilizzare le GPU
Se utilizzi Keras o Estimators per il tuo job di addestramento di TensorFlow e vuoi eseguire l'addestramento utilizzando una singola VM con una GPU, non devi personalizzare il codice per la GPU.
Se il cluster di addestramento contiene più GPU, utilizza l'API tf.distribute.Strategy
nel codice di addestramento:
- Per l'addestramento su una singola VM con più GPU, consigliamo di utilizzare il
MirroredStrategy
, che è completamente supportato per Keras in TensorFlow 2.1 e versioni successive. - Per l'addestramento su più VM con GPU, consulta i consigli per l'addestramento distribuito.
Per personalizzare il modo in cui TensorFlow assegna operazioni specifiche alle GPU, consulta la guida di TensorFlow all'utilizzo delle GPU. In questo
caso, potrebbe essere utile anche scoprire come AI Platform Training imposta la variabile di ambiente TF_CONFIG
su ogni VM.
Stringhe dei dispositivi GPU
La singola GPU di una macchina standard_gpu
è identificata come "/gpu:0"
.
Le macchine con più GPU utilizzano identificatori che iniziano con "/gpu:0"
, poi
"/gpu:1"
e così via. Ad esempio, le macchine complex_model_m_gpu
hanno quattro GPU identificate come "/gpu:0"
, "/gpu:3"
e così via.
Pacchetti Python su macchine con GPU
Le macchine con GPU sono preinstallate con tensorflow-gpu, il pacchetto Python di TensorFlow con supporto GPU. Consulta l'elenco delle versioni del runtime per un elenco di tutti i pacchetti preinstallati.
Eventi di manutenzione
Le VM con GPU che eseguono job di AI Platform Training sono occasionalmente soggette alla manutenzione dell'host Compute Engine.
Le VM sono configurate per riavviarsi automaticamente dopo questi eventi di manutenzione, ma potresti dover svolgere qualche operazione aggiuntiva per assicurarti che il tuo job sia resiliente a questi arresti. Configura l'applicazione di addestramento in modo da salvare regolarmente i checkpoint del modello (di solito nel percorso Cloud Storage specificato tramite l'argomento --job-dir
a gcloud ai-platform jobs submit training
) e per ripristinare il checkpoint più recente nel caso in cui ne esista già uno.
TensorFlow Estimators
implementa questa funzionalità per te, a condizione che tu specifichi un model_dir
.
Gli estimatori salvano regolarmente i checkpoint in model_dir
e tentano di caricarli dall'ultimo checkpoint, quindi non devi preoccuparti degli eventi di manutenzione sui tuoi worker GPU.
Se esegui l'addestramento con Keras, utilizza il callback ModelCheckpoint
per salvare regolarmente i progressi dell'addestramento. Se utilizzi tf.distribute.Strategy
con Keras, le VM utilizzano i checkpoint per recuperare automaticamente dai riavvii.
In caso contrario, aggiungi la logica al codice di addestramento per controllare l'esistenza di un checkpoint recente
e ripristinare dal checkpoint se esistente.
Per casi più avanzati, leggi la guida di TensorFlow ai checkpoint.
Passaggi successivi
- Leggi una panoramica del funzionamento dell'addestramento.
- Scopri i limiti all'uso simultaneo di GPU.
- Scopri di più sull'utilizzo delle GPU con TensorFlow.
- Leggi un confronto delle prestazioni e dei costi delle GPU più recenti, come la NVIDIA Tesla T4.