Utilizzo di GPU per l'addestramento di modelli nel cloud

Le GPU (Graphics Processing Unit) possono accelerare notevolmente l'addestramento per molti modelli di deep learning. Addestramento di modelli per attività come l'immagine la classificazione, l'analisi video e l'elaborazione del linguaggio naturale implica matriciale ad alta intensità di calcolo e altre operazioni che possono richiedere sfruttare l'architettura altamente parallela delle GPU.

Addestramento di un modello di deep learning che comporta attività di calcolo intensive L'esecuzione di set di dati estremamente grandi può richiedere giorni su un unico processore. Tuttavia, se progetti il tuo programma per trasferire queste attività a una o più GPU, ridurre il tempo dedicato all'addestramento in ore anziché in giorni.

Prima di iniziare

AI Platform Training ti consente di eseguire l'applicazione di addestramento TensorFlow su una GPU di una macchina abilitata. Leggi la guida di TensorFlow all'uso GPU e la sezione di questo documento dedicata alla regolazione del codice da GPU a assicurarti che l'applicazione utilizzi le GPU disponibili.

Puoi anche utilizzare GPU con framework di machine learning diversi da TensorFlow, se utilizzi un container personalizzato addestramento.

Alcuni modelli non traggono vantaggio dall'esecuzione sulle GPU. Consigliamo GPU per applicazioni di grandi dimensioni, modelli complessi con molte operazioni matematiche. Anche in questo caso, testare i vantaggi del supporto delle GPU eseguendo un piccolo campione dei dati tramite addestramento.

Richiesta di macchine abilitate per GPU

Per utilizzare GPU nel cloud, configura il job di addestramento in modo che abbia accesso alle GPU 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 abilitata per GPU di base

Se stai imparando a usare AI Platform Training, a sperimentare con le macchine abilitate per GPU, puoi impostare il livello di scalabilità su BASIC_GPU per ottenere una singola istanza worker con una GPU.

Tipi di macchine Compute Engine con collegamenti GPU

Se configuri il job di addestramento con Macchina Compute Engine tipi, puoi allegare un numero personalizzato di GPU per accelerare il job:

  • Imposta il livello di scalabilità su CUSTOM.
  • Configura il worker principale e qualsiasi altra attività tipi (worker, server dei parametri, o il responsabile della valutazione) che fanno parte del tuo job per usare Compute Engine tipi di macchine virtuali.
  • Aggiungi un campo acceleratorConfig con tipo e numero di GPU da utilizzare per masterConfig, workerConfig, parameterServerConfig o evaluatorConfig, a seconda del modello di Compute Engine (VM) che desideri accelerare. Puoi utilizzare le seguenti opzioni 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:

  1. Puoi utilizzare solo un determinato numero di GPU nella configurazione. Ad esempio: puoi collegare 2 o 4 NVIDIA Tesla T4, ma non 3. Per visualizzare i conteggi valida per ogni tipo di GPU, consulta la tabella di compatibilità qui sotto.

  2. Devi assicurarti che ciascuna delle configurazioni GPU fornisca sufficienti CPU virtuali e memoria al tipo di macchina alla quale viene collegata. Ad esempio, se che utilizzi n1-standard-32 per i lavoratori, ogni lavoratore ha 32 CPU 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 n1-standard-32 worker per soddisfare i relativi requisiti. (2 GPU forniscono risorse insufficienti e non puoi specificare tre GPU.)

    Consulta l'elenco di tipi di macchina per AI Platform Training e il confronto delle GPU per i carichi di lavoro di computing stabilire queste compatibilità o fare riferimento alla tabella di compatibilità in basso.

    Tieni presente le seguenti limitazioni aggiuntive relative alle risorse GPU AI Platform Training in casi specifici:

    • Una configurazione con 4 GPU NVIDIA Tesla P100 supporta solo fino a 64 GPU virtuali CPU e fino a 208 GB di memoria in tutte le regioni e le zone.
  3. Devi inviare il job di addestramento a una regione che supporta la tua GPU configurazione. Scopri di più sul supporto per regione di seguito.

La tabella seguente fornisce un riferimento rapido di quanti di ogni tipo acceleratore collegabile 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 e 8 2, 4 2, 4 2, 4 4 e 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 e 8 2, 4 2, 4 2, 4 4 e 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 e 8 2, 4 2, 4 2, 4 4 e 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 Tipi di macchine di Compute Engine con GPU collegate.

Tipi di macchina con GPU incluse

In alternativa, anziché utilizzare un acceleratorConfig, puoi selezionare una versione precedente con GPU incluse:

  • Imposta il livello di scalabilità su CUSTOM.
  • Configura il worker principale e qualsiasi altra attività tipi (worker, server dei parametri, o il responsabile della valutazione) che vuoi accelerare per utilizzare uno dei seguenti Tipi di macchine abilitati per GPU, in base al numero di GPU e al tipo acceleratore richiesto per l'attività:
    • standard_gpu: una singola GPU
    • complex_model_m_gpu: quattro GPU
    • complex_model_l_gpu: otto GPU
    • standard_p100: una singola GPU NVIDIA Tesla P100
    • complex_model_m_p100: quattro GPU NVIDIA Tesla P100
    • standard_v100: una singola GPU NVIDIA Tesla V100
    • large_model_v100: una singola GPU NVIDIA Tesla V100
    • complex_model_m_v100: quattro GPU NVIDIA Tesla V100
    • complex_model_l_v100: otto GPU NVIDIA Tesla V100

Di seguito è riportato un esempio di invio di un job con una macchina abilitata per GPU usando il comando gcloud.

Leggi ulteriori informazioni sui tipi di macchina per AI Platform Training.

Regioni che supportano le GPU

Devi eseguire il job in una regione che supporta le GPU. Le seguenti regioni che attualmente 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 del modello e la previsione online/batch, leggi la guida alle regioni.

Se il job di addestramento utilizza più tipi di GPU, devono essere tutte disponibili in un'unica zona in regione. Ad esempio, non puoi eseguire un job in us-central1 con un worker master che utilizzano le GPU NVIDIA Tesla T4, i server dei parametri che utilizzano le GPU NVIDIA Tesla K80 e i GPU NVIDIA Tesla P100. Sebbene tutte queste GPU siano disponibili per i job di addestramento us-central1, nessuna singola zona in quella regione fornisce tutti e tre i tipi di GPU. A scopri di più sulla disponibilità delle GPU per le zone, consulta confronto delle GPU per i carichi di lavoro di calcolo.

Invio del job di addestramento

Puoi inviare il job di addestramento utilizzando il comando gcloud ai-platform jobs submit training.

  1. Definisci un file config.yaml che descriva le opzioni GPU desiderate. La del file YAML rappresenta Risorsa job. Di seguito sono riportati due esempi di file config.yaml.

    Il primo esempio mostra un file di configurazione per un job di addestramento che utilizza Tipi di macchine Compute Engine, alcune delle 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 un carattere configurazione come quella precedente. Tuttavia, questa configurazione utilizza che includono GPU anziché collegare 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
    
  2. Usa il comando gcloud per inviare il job, incluso un --config che rimanda al tuo file config.yaml. L'esempio seguente presuppone di aver configurato le variabili di ambiente, indicate dal simbolo $ seguito 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 tramite riga di comando , invece che in un file di configurazione. Scopri di più su come utilizzarli e i flag facoltativi.

L'esempio seguente mostra come inviare un job con la stessa configurazione di nel primo esempio (usando tipi di macchine Compute Engine con GPU allegato), ma lo fa 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) e come flag della riga di comando, il valore nel riga di comando sostituisce il valore nel file di configurazione.
  • Il flag -- vuoto segna la fine del gcloud di segnalazioni specifiche e l'inizio del USER_ARGS da trasferire alla tua richiesta.
  • I flag specifici per AI Platform Training, --module-name, --runtime-version e --job-dir, deve precedere il flag -- vuoto. Il servizio AI Platform Training interpreta questi flag.
  • Il flag --job-dir, se specificato, deve precedere il carattere flag -- vuoto, perché AI Platform Training utilizza --job-dir per convalidare il percorso.
  • La tua applicazione deve gestire anche il flag --job-dir se specificato. Anche se la bandiera precede il campo -- vuoto, Inoltre, il --job-dir viene passato alla tua richiesta come flag della riga di comando.
  • Puoi definire tutti i USER_ARGS di cui hai bisogno. Pass di AI Platform Training: --user_first_arg, --user_second_arg e così via fino alla tua domanda.

Per ulteriori dettagli sulle opzioni di invio dei lavori, consulta la guida per l'avvio di un job di addestramento.

Regolazione del codice di addestramento per l'utilizzo delle GPU

Se utilizzi Keras o Estimatori per il tuo job di addestramento TensorFlow e vuoi eseguire l'addestramento utilizzando GPU, non dovrai personalizzare il codice per la GPU.

Se il cluster di addestramento contiene più GPU, utilizza tf.distribute.Strategy API 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 consigli per i container addestramento.

Per personalizzare il modo in cui TensorFlow assegna operazioni specifiche alle GPU, consulta il Guida di TensorFlow all'utilizzo per GPU. In questo caso, potrebbe anche essere utile scoprire in che modo AI Platform Training imposta TF_CONFIG su ogni VM.

Stringhe dispositivo 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", quindi "/gpu:1" e così via. Ad esempio, complex_model_m_gpu macchine hanno quattro GPU identificate come da "/gpu:0" a "/gpu:3".

Pacchetti Python su macchine abilitate per GPU

Nelle macchine abilitate per GPU sono preinstallate tensorflow-gpu, il pacchetto Python TensorFlow con supporto GPU. Vedi la versione di runtime list per visualizzare un elenco di tutte le app preinstallate pacchetti.

Eventi di manutenzione

Le VM abilitate per GPU che eseguono job di AI Platform Training sono occasionalmente soggette a Manutenzione dell'host Compute Engine. Le VM sono configurate per riavviarsi automaticamente dopo questi eventi di manutenzione, ma potresti dover fare del lavoro in più per rendere il tuo lavoro resiliente queste chiusure. Configura l'applicazione di addestramento per salvare regolarmente il modello (di solito lungo il percorso di Cloud Storage specificato l'argomento --job-dir a gcloud ai-platform jobs submit training) e a ripristinare il checkpoint più recente nel caso in cui esista già un checkpoint.

Strumento per la stima di TensorFlow implementare questa funzionalità per te, purché specifichi un valore model_dir. Gli strumenti di stima salvano regolarmente i checkpoint in model_dir e provano a caricarli dall'ultimo checkpoint, così non devi preoccuparti degli eventi di manutenzione sui worker GPU.

Se ti stai addestrando con Keras, utilizza il ModelCheckpoint callback per salvare regolarmente i progressi nell'addestramento. Se utilizzi tf.distribute.Strategy con Keras, le VM utilizzano i checkpoint per il ripristino automatico si riavvia. In caso contrario, aggiungi logica al codice di addestramento per verificare l'esistenza di una posto di blocco e ripristinare dal checkpoint se esiste.

Per casi più avanzati, leggi la guida di TensorFlow punti di controllo.

Passaggi successivi