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 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'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 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, 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 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 di worker con una GPU.

Tipi di macchine Compute Engine con GPU collegate

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 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 da masterConfig, workerConfig, parameterServerConfig o evaluatorConfig, a seconda delle istanze di macchine virtuali (VM) da 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 CPU e memoria virtuali sufficienti al tipo di macchina a cui la colleghi. 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 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.
  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 seguente tabella 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 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 macchine 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 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 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.

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, devono essere tutte disponibili in un'unica zona in 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 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 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 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 una configurazione simile a quella riportata sopra. 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. Utilizza il comando gcloud per inviare il job, incluso un argomento --config che rimandi al file config.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 tramite riga di comando , invece che 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 segna la fine 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 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. 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.

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 personalizzare il modo in cui TensorFlow assegna operazioni specifiche alle GPU, consulta la guida di TensorFlow all'utilizzo delle 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, le macchine complex_model_m_gpu hanno quattro GPU identificate come "/gpu:0", "/gpu:3" e così via.

Pacchetti Python su macchine con GPU

Nelle macchine abilitate per GPU sono preinstallate tensorflow-gpu, il pacchetto Python TensorFlow con supporto GPU. Consulta l'elenco delle versioni del 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 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 in modo da salvare regolarmente i checkpoint del modello (di solito nel percorso Cloud Storage specificato tramite l'argomento --job-dir per gcloud ai-platform jobs submit training) e per ripristinare il checkpoint più recente nel caso in cui ne esista già uno.

Strumento per la stima di TensorFlow implementare questa funzionalità per te, purché specifichi un valore 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 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 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 punti di controllo.

Passaggi successivi