Utilizzo di GPU per l'addestramento di modelli nel cloud

Le GPU (Graphics Processing Unit) possono accelerare in modo significativo 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 prevede la moltiplicazione delle 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 molto grandi può richiedere giorni per l'esecuzione su un singolo processore. Tuttavia, se progetti il tuo programma per trasferire queste attività a una o più GPU, puoi ridurre il tempo di addestramento in ore anziché in 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 modifica del codice di addestramento per l'utilizzo delle GPU per 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 per l'addestramento.

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

Richiesta di macchine abilitate per GPU

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

Se stai imparando a utilizzare AI Platform Training o a sperimentare con 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 tipi di macchine Compute Engine, puoi collegare un numero personalizzato di GPU per accelerare il job:

  • Imposta il livello di scalabilità su CUSTOM.
  • Configura il tuo worker master e tutti gli altri tipi di attività (worker, server dei parametri o valutatore) che fanno parte del tuo job per l'utilizzo di tipi di macchine Compute Engine validi.
  • Aggiungi un campo acceleratorConfig con il tipo e il numero di GPU da utilizzare per masterConfig, workerConfig, parameterServerConfig o evaluatorConfig, a seconda della istanza di macchina virtuale (VM) che vuoi 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:

  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 verificare quali conteggi sono validi per ciascun tipo di GPU, consulta la tabella di compatibilità riportata di seguito.

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

    Consulta l'elenco dei tipi di macchina per AI Platform Training e il confronto delle GPU per i carichi di lavoro di calcolo per determinare queste compatibilità oppure fai riferimento alla tabella di compatibilità riportata di seguito.

    Nota la seguente limitazione aggiuntiva delle risorse GPU per AI Platform Training in casi particolari:

    • 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.
  3. Devi inviare il job di addestramento a una regione che supporta la configurazione della GPU. Scopri di più sul supporto per regione di seguito.

La tabella seguente fornisce un riferimento rapido di quanti di ogni tipo di acceleratore 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 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 acceleratorConfig, puoi selezionare un tipo di macchina legacy con GPU incluse:

  • 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 abilitati per GPU, in base al numero di GPU e al tipo di 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 tipi di macchine abilitati per GPU utilizzando il comando gcloud.

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 attualmente forniscono l'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 di AI Platform Training, tra cui 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 tutte disponibili in un'unica zona nella regione. Ad esempio, non puoi eseguire un job in us-central1 con un worker master 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 della regione fornisce tutti e tre i tipi di GPU. Per scoprire di più sulla disponibilità delle zone delle GPU, consulta il 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 struttura del file YAML rappresenta la 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 di 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 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, invece di 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 argomento --config che rimanda al tuo file config.yaml. L'esempio seguente presuppone che tu abbia configurato 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 flag della riga di comando, anziché in un file di configurazione. Scopri di più su come utilizzare queste segnalazioni.

L'esempio seguente mostra come inviare un job con la stessa configurazione del primo esempio (utilizzando tipi di macchine di 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 segna la fine dei flag specifici di gcloud e l'inizio del USER_ARGS che vuoi passare all'applicazione.
  • I flag specifici di AI Platform Training, come --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 --job-dir per convalidare il percorso.
  • L'applicazione deve gestire anche il flag --job-dir, se specificato. Anche se il flag precede il campo -- vuoto, --job-dir viene passato anche all'applicazione come flag della riga di comando.
  • Puoi definire tutti i 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 del job, consulta la guida per avviare un job di addestramento.

Regolazione 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 personalizzare il modo in cui TensorFlow assegna operazioni specifiche alle GPU, leggi la guida di TensorFlow all'utilizzo delle GPU. 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 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", poi "/gpu:1" e così via. Ad esempio, complex_model_m_gpu macchine hanno quattro GPU identificate da "/gpu:0" a "/gpu:3".

Pacchetti Python su macchine abilitate per GPU

Nelle macchine abilitate per GPU è preinstallato tensorflow-gpu, il pacchetto Python TensorFlow 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 occasionalmente soggette alla manutenzione dell'host di Compute Engine. Le VM sono configurate per il riavvio automatico dopo questi eventi di manutenzione, ma potresti dover svolgere operazioni aggiuntive per garantire la resistenza del job a questi arresti. Configura l'applicazione di addestramento in modo da salvare regolarmente i checkpoint del modello (di solito lungo il percorso di Cloud Storage specificato tramite l'argomento --job-dir per gcloud ai-platform jobs submit training) e ripristinare il checkpoint più recente nel caso in cui esista già un checkpoint.

Gli strumenti per la stima di TensorFlow implementano questa funzionalità per te, purché specifichi un valore model_dir. Gli strumenti di stima salvano regolarmente i checkpoint in model_dir e tentano di eseguire il caricamento dal checkpoint più recente, in modo da non doverti preoccupare degli eventi di manutenzione dei worker GPU.

Se ti stai addestrando con Keras, utilizza il callback ModelCheckpoint per salvare regolarmente i progressi 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 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 punti di controllo di TensorFlow.

Passaggi successivi