Le GPU (Graphics Processing Unit) possono accelerare notevolmente il processo di addestramento per molti modelli di deep learning. L'addestramento di modelli per attività come la classificazione delle immagini, l'analisi video e l'elaborazione del linguaggio naturale prevede una moltiplicazione delle matrici ad alta intensità di calcolo e altre operazioni che possono sfruttare l'architettura a parallelismo massivo di una GPU.
L'addestramento di un modello di deep learning che prevede attività di calcolo intense su set di dati molto grandi può richiedere giorni per l'esecuzione su un singolo processore. Tuttavia, se progetti il tuo programma in modo da trasferire queste attività a una o più GPU, puoi ridurre il tempo di addestramento a ore anziché giorni.
Prima di iniziare
AI Platform Training consente di eseguire l'applicazione di addestramento TensorFlow su una macchina abilitata per GPU. Leggi la guida di TensorFlow all'utilizzo delle GPU e la sezione di questo documento sulla regolazione del codice di addestramento per l'utilizzo delle GPU al fine di garantire che la tua applicazione utilizzi le GPU disponibili.
Puoi anche utilizzare GPU con framework di machine learning diversi da TensorFlow se usi un container personalizzato per l'addestramento.
Alcuni modelli non traggono vantaggio dall'esecuzione sulle GPU. Consigliamo le GPU per i modelli complessi e di grandi dimensioni che prevedono molte operazioni matematiche. Anche in questo caso, dovresti testare il vantaggio del supporto GPU eseguendo un piccolo campione di dati durante l'addestramento.
Richiesta di macchine abilitate per GPU
Per utilizzare le GPU nel cloud, configura il job di addestramento per accedere alle macchine abilitate per GPU in uno dei seguenti modi:
- Utilizza il livello di scalabilità
BASIC_GPU
. - Utilizza i tipi di macchine di Compute Engine e collega le GPU.
- Utilizza tipi di macchine legacy abilitati per GPU.
Macchina di base abilitata per GPU
Se stai imparando a utilizzare AI Platform Training o sperimentando macchine abilitate per GPU, puoi impostare il livello di scalabilità su BASIC_GPU
per ottenere una singola istanza worker con una singola GPU NVIDIA Tesla K80.
Tipi di macchine Compute Engine con collegamenti GPU
Se configuri il job di addestramento con tipi di macchine di Compute Engine, puoi collegare un numero personalizzato di GPU per accelerare il job:
- Imposta il livello di scalabilità su
CUSTOM
. - Configura il worker master e qualsiasi altro tipo di attività (worker, server dei parametri o valutatore) che fanno parte del job per utilizzare tipi di macchine Compute Engine validi.
- Aggiungi un campo
acceleratorConfig
con il tipo e il numero di GPU che vuoimasterConfig
,workerConfig
,parameterServerConfig
oevaluatorConfig
, a seconda delle istanze di macchine virtuali (VM) che vuoi accelerare. Puoi utilizzare i seguenti tipi di GPU:NVIDIA_TESLA_A100
NVIDIA_TESLA_K80
NVIDIA_TESLA_P4
NVIDIA_TESLA_P100
NVIDIA_TESLA_T4
NVIDIA_TESLA_V100
Per creare un acceleratorConfig
valido, devi tenere conto di diverse limitazioni:
Puoi utilizzare solo un determinato numero di GPU nella tua configurazione. Ad esempio, puoi collegare 2 o 4 NVIDIA Tesla T4, ma non 3. Per sapere quali conteggi sono validi per ogni tipo di GPU, consulta la tabella di compatibilità di seguito.
Devi assicurarti che ciascuna delle configurazioni GPU fornisca CPU e memoria virtuali sufficienti per il tipo di macchina a cui la colleghi. Ad esempio, se utilizzi
n1-standard-32
per i worker, ogni worker avrà 32 CPU virtuali 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 ciascun workern1-standard-32
per supportare i relativi requisiti. (2 GPU forniscono risorse insufficienti e non puoi specificare 3 GPU).Consulta l'elenco dei tipi di macchine per AI Platform Training e il confronto delle GPU per i carichi di lavoro di computing per determinare queste compatibilità oppure fai riferimento alla tabella di compatibilità riportata di seguito.
Tieni presente le seguenti limitazioni aggiuntive sulle risorse GPU per AI Platform Training in casi specifici:
- Una configurazione con 8 GPU NVIDIA Tesla K80 fornisce solo fino a 208 GB di memoria in tutte le regioni e le zone.
- Una configurazione con 4 GPU NVIDIA Tesla P100 supporta solo fino a 64 CPU virtuali e fino a 208 GB di memoria in tutte le regioni e le zone.
Devi inviare il job di addestramento a una regione che supporti la configurazione della tua GPU. Scopri di più sul supporto per regione di seguito.
La tabella seguente fornisce un riferimento rapido del numero di acceleratori di ciascun tipo che puoi collegare a ciascun tipo di macchina di 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 utilizzando i tipi di macchine di Compute Engine con GPU collegate.
Tipi di macchina con GPU incluse
In alternativa, invece di utilizzare un acceleratorConfig
, puoi selezionare un tipo di macchina legacy che includa le GPU:
- Imposta il livello di scalabilità su
CUSTOM
. - Configura il tuo worker master e qualsiasi altro tipo di attività (worker, server dei parametri o valutatore) che vuoi accelerare per utilizzare uno dei seguenti tipi di macchine abilitate per GPU, in base al numero di GPU e al tipo di acceleratore richiesto per l'attività:
standard_gpu
: una singola GPU NVIDIA Tesla K80complex_model_m_gpu
: quattro GPU NVIDIA Tesla K80complex_model_l_gpu
: otto GPU NVIDIA Tesla K80standard_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 abilitate per GPU utilizzando il comando gcloud
.
Leggi ulteriori informazioni sui tipi di macchine per AI Platform Training.
Regioni che supportano le GPU
Devi eseguire il job in una regione che supporta le GPU. Le seguenti regioni forniscono attualmente 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 accesso solo a determinati tipi di GPU. Per comprendere appieno le regioni disponibili per i servizi di AI Platform Training, inclusi l'addestramento di modelli e la previsione online/batch, leggi la guida alle regioni.
Se il job di addestramento utilizza più tipi di GPU, devono essere tutti disponibili in un'unica zona nella tua regione. Ad esempio, non puoi eseguire un job in us-central1
con un master worker che utilizza GPU NVIDIA Tesla T4, server dei 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 ulteriori informazioni sulla disponibilità a livello di zona delle GPU, consulta il confronto delle GPU per i carichi di lavoro di computing.
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 ti interessano. 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 tipi di macchine di Compute Engine, alcuni dei quali con 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 successivo 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 elemento
acceleratorConfig
:trainingInput: scaleTier: CUSTOM # Configure a master worker with 4 K80 GPUs masterType: complex_model_m_gpu # Configure 9 workers, each with 4 K80 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 rimanda al fileconfig.yaml
. L'esempio seguente presuppone che tu abbia configurato le variabili di ambiente, indicate dal 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 flag della riga di comando, anziché in un file di configurazione. Scopri di più su come utilizzare questi flag.
L'esempio seguente mostra come inviare un job con la stessa configurazione
del primo esempio (utilizzando tipi di macchine di Compute Engine con GPU
allegate), 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 contrassegna la fine dei flag specificigcloud
e l'inizio diUSER_ARGS
che vuoi passare alla tua applicazione. - I flag specifici per AI Platform Training, come
--module-name
,--runtime-version
e--job-dir
, devono precedere il flag--
vuoto. Questi flag vengono interpretati dal servizio AI Platform Training. - Il flag
--job-dir
, se specificato, deve precedere il flag--
vuoto, perché AI Platform Training utilizza--job-dir
per convalidare il percorso. - L'applicazione deve gestire anche il flag
--job-dir
, se specificato. Anche se il flag precede il carattere--
vuoto,--job-dir
viene passato anche all'applicazione sotto forma di flag della riga di comando. - Puoi definire tutti gli elementi
USER_ARGS
di cui hai bisogno. AI Platform Training passa--user_first_arg
,--user_second_arg
e così via alla tua applicazione.
Per ulteriori dettagli sulle opzioni di invio dei job, consulta la guida all'avvio di un job di addestramento.
Modifica del codice di addestramento per l'utilizzo delle GPU
Se utilizzi Keras o Estimators per il job di addestramento TensorFlow e vuoi eseguire l'addestramento utilizzando una singola VM con una GPU, non è necessario 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
MirroredStrategy
, che è completamente supportato per Keras in TensorFlow 2.1 e versioni successive. - Per l'addestramento su più VM con GPU, consulta i suggerimenti per l'addestramento distribuito.
Per personalizzare il modo in cui TensorFlow assegna operazioni specifiche alle GPU, leggi la guida all'utilizzo delle GPU di TensorFlow. In questo caso, potrebbe anche essere utile scoprire in che modo AI Platform Training imposta la variabile di ambiente TF_CONFIG
su ogni VM.
Stringhe del dispositivo GPU
La singola GPU di una macchina standard_gpu
è identificata come "/gpu:0"
.
Le macchine con più GPU utilizzano gli 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 da "/gpu:0"
a "/gpu:3"
.
Pacchetti Python su macchine abilitate per GPU
Nelle macchine abilitate per GPU è preinstallato tensorflow-gpu, il pacchetto TensorFlow Python con supporto per GPU. Consulta l'elenco delle versioni di runtime per un elenco di tutti i pacchetti preinstallati.
Eventi di manutenzione
Le VM abilitate per GPU che eseguono job di AI Platform Training sono soggette occasionalmente alla manutenzione dell'host di Compute Engine.
Le VM sono configurate per il riavvio automatico dopo questi eventi di manutenzione,
ma potresti dover svolgere delle operazioni aggiuntive per garantire che il job sia resiliente
a queste interruzioni. Configura la tua applicazione di addestramento per salvare regolarmente i checkpoint del modello (di solito lungo il percorso di Cloud Storage specificato tramite l'argomento --job-dir
su gcloud ai-platform jobs submit training
) e per ripristinare il checkpoint più recente nel caso in cui esista già un checkpoint.
Gli TensorFlow Estimator implementano per te questa funzionalità, a condizione che tu specifichi un model_dir
.
Gli strumenti di stima salvano regolarmente i checkpoint nell'model_dir
e tentano di caricarli
dal checkpoint più recente, in modo da non doverti preoccupare degli eventi di manutenzione
sui worker GPU.
Se stai eseguendo l'addestramento con Keras, utilizza il callback di ModelCheckpoint
per salvare regolarmente l'avanzamento dell'addestramento. Se utilizzi tf.distribute.Strategy
con Keras, le tue VM utilizzano i checkpoint per il ripristino automatico
dai riavvii.
In caso contrario, aggiungi la logica al codice di addestramento per verificare l'esistenza di un checkpoint recente e ripristinarlo dal checkpoint, se esistente.
Per casi più avanzati, leggi la guida ai checkpoint di TensorFlow.
Passaggi successivi
- Leggi una panoramica su come funziona la formazione.
- Esamina i limiti dell'utilizzo simultaneo di GPU.
- Scopri come utilizzare le GPU con TensorFlow.
- Leggi un confronto tra prestazioni e costi delle GPU più recenti, come NVIDIA Tesla T4.