Best practice per l'uso di GPU Dataflow

Questa pagina descrive le best practice per la creazione di pipeline utilizzando le GPU.

Per informazioni ed esempi su come abilitare le GPU nei job Dataflow, Esegui una pipeline con GPU e Elaborazione delle immagini satellitari Landsat con GPU.

Prerequisiti per l'utilizzo delle GPU in Dataflow

Considerazioni

Quando progetti gli ambienti di test e di produzione, considera l'uso i seguenti fattori.

Sviluppo locale

L'utilizzo di Apache Beam con GPU NVIDIA consente di creare su larga scala pipeline di elaborazione dati che gestiscono la pre-elaborazione e l'inferenza. Quando utilizzi le GPU per lo sviluppo locale, tieni presente le seguenti informazioni:

  • Spesso, i flussi di lavoro di elaborazione dati utilizzano librerie devono essere installati nell'ambiente di lancio e nell'ambiente di esecuzione Worker Dataflow. Questa configurazione aggiunge passaggi al flusso di lavoro di sviluppo per la configurazione dei requisiti della pipeline o per l'utilizzo di contenitori personalizzati in Dataflow. È utile avere un ambiente di sviluppo locale che simuli l'ambiente di produzione il più fedelmente possibile.

  • Se il tuo flusso di lavoro soddisfa entrambi i seguenti criteri, non è necessario creare contenuti personalizzati o modificare il flusso di lavoro di sviluppo per configurare i requisiti della pipeline:

    • Stai utilizzando una libreria che utilizza implicitamente le GPU NVIDIA.
    • Il codice non richiede modifiche per supportare le GPU.
  • Alcune librerie non passano in modo trasparente dall'utilizzo della CPU a quello della GPU e quindi richiedono build specifiche e percorsi di codice diversi. Per replicare il ciclo di vita di sviluppo di codice-esecuzione-codice per questo scenario, sono necessari ulteriori passaggi.

  • Quando esegui esperimenti locali, replica l'ambiente dell'operatore Dataflow il più fedelmente possibile. A seconda della libreria, potresti aver bisogno di un computer con una GPU e le librerie GPU richieste installate. Questo tipo di macchina potrebbe non disponibili nel tuo ambiente locale. Puoi emulare l'ambiente DataflowRunner utilizzando un contenitore in esecuzione su una macchina virtuale Google Cloud con GPU.

Specifiche dei tipi di macchina

Per maggiori dettagli sul supporto dei tipo di macchina per ogni modello GPU, vedi Piattaforme GPU. Le GPU supportate con i tipi di macchine N1 supportano anche tipi di macchine N1 personalizzate.

Il tipo e il numero di GPU definiscono le restrizioni del limite superiore di vCPU e memoria che i worker possono avere. Per trovare il modello restrizioni, consulta Disponibilità.

Se specifichi un numero più elevato di CPU o memoria, potrebbe essere necessario specificare un con un numero maggiore di GPU.

Per ulteriori dettagli, leggi l'articolo sulle GPU su Compute Engine.

Ottimizza l'utilizzo delle risorse

La maggior parte delle pipeline non è composta interamente da trasformazioni che richiedono una GPU. Una pipeline tipica ha una fase di importazione che utilizza uno dei tanti forniti da Apache Beam. Quella fase è seguita dalla manipolazione dei dati o trasformazioni di modellazione, che poi alimentano una trasformazione GPU.

Uso corretto Suggerimenti per le risorse Apache Beam per personalizzare le risorse worker per le pipeline batch. Quando è attivata la funzionalità di adattamento corretto, Dataflow utilizza le GPU solo per le fasi della pipeline che ne hanno bisogno. Di conseguenza, questa funzionalità migliora la flessibilità e la capacità della pipeline, riducendo potenzialmente i costi.

Per ulteriori informazioni, consulta la sezione Adattabilità ottimale.

GPU e parallelismo dei worker

Per le pipeline Python che utilizzano l'architettura Dataflow Runner v2, Dataflow avvia un processo SDK Apache Beam per ogni core VM. Ogni processo SDK viene eseguito nel proprio container Docker e a sua volta genera molti thread, ognuno dei quali elabora i dati in entrata.

Le GPU utilizzano più processi dell'architettura e GPU nei worker Dataflow visibile a tutti i processi e i thread.

Se esegui più processi SDK su una GPU condivisa, puoi migliorare l'efficienza e l'utilizzo della GPU attivando il servizio NVIDIA Multi-Process (MPS). MPS migliora il parallelismo dei worker e il throughput complessivo per le pipeline GPU, soprattutto per i carichi di lavoro con un utilizzo ridotto delle risorse GPU. Per ulteriori informazioni, vedi Migliora le prestazioni su una GPU condivisa utilizzando NVIDIA MPS.

Per evitare l'oversubscription della memoria GPU, potresti aver bisogno di gestire l'accesso alle GPU. Se utilizzi TensorFlow, uno dei seguenti suggerimenti può aiutarti a evitare la sottoscrizione eccessiva della memoria GPU:

  • Configura i worker Dataflow in modo da avviare un solo processo Python containerizzato, indipendentemente dal numero di vCPU del worker. Per rendere configurazione, all'avvio del job, utilizza il seguente codice opzioni pipeline:

    • --experiments=no_use_multiple_sdk_containers
    • --number_of_worker_harness_threads

    Per ulteriori informazioni sul numero di thread da utilizzare, consulta Ridurre il numero di thread.

  • Attiva MPS.

Carichi di lavoro di inferenza

Quando utilizzi modelli di machine learning (ML) per eseguire l'inferenza locale e remota, usano Apache Beam integrato Trasformazione RunInference: L'API RunInference è un PTransform ottimizzato per il machine learning le inferenze. L'utilizzo della trasformazione RunInference può migliorare l'efficienza di machine learning nelle tue pipeline.

Flusso di lavoro

Il seguente flusso di lavoro in due fasi mostra come creare una pipeline utilizzando le GPU. Questo flusso si occupa dei problemi relativi a GPU e non GPU separatamente e abbrevia il ciclo di feedback.

  1. Crea una pipeline

    Crea una pipeline che può essere eseguita su Dataflow. Sostituisci le trasformazioni che richiedono GPU con le trasformazioni che non utilizzano GPU, ma hanno le stesse funzionalità:

    1. Crea tutte le trasformazioni che circondano l'utilizzo della GPU, ad esempio dati l'importazione e la manipolazione.

    2. Creare uno stub per la trasformazione GPU con un passthrough o una modifica dello schema.

  2. Esegui test in locale

    Testa la parte GPU del codice della pipeline nell'ambiente che imita la Ambiente di esecuzione worker Dataflow. I passaggi seguenti descrivono uno dei metodi per eseguire il test:

    1. Crea un'immagine Docker con tutte le librerie necessarie.

    2. Inizia lo sviluppo del codice GPU.

    3. Inizia il ciclo di codice-esecuzione-codice utilizzando una macchina virtuale Google Cloud con l'immagine Docker. Per escludere le incompatibilità delle librerie, esegui il codice GPU in un un processo Python locale separato da un Apache Beam una pipeline o un blocco note personalizzato. Quindi, esegui l'intera pipeline sul runner diretto o avviala su Dataflow.

Utilizza una VM che esegue un sistema operativo ottimizzato per i container

Per un ambiente minimo, utilizza una macchina virtuale (VM) ottimizzata per i container. Per ulteriori informazioni, vedi Creare una VM con GPU collegate.

Il flusso generale è:

  1. Creare una VM.

  2. Connettiti alla VM ed esegui i seguenti comandi:

    sudo cos-extensions install gpu -- -version latest
    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia
    
  3. Verifica che le GPU siano disponibili:

    ./nvidia-smi
    
  4. Avvia un container Docker con i driver GPU dalla VM montata come volumi. Ad esempio:

    sudo docker run --rm -it --entrypoint /bin/bash
    --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64
    --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin
    --privileged gcr.io/bigdatapivot/image_process_example:latest
    

Per un Dockerfile di esempio, vedi Crea un'immagine container personalizzata. Aggiungi al Dockerfile tutte le dipendenze necessarie per la pipeline.

Per ulteriori informazioni sull'utilizzo di un'immagine Docker preconfigurata per l'utilizzo della GPU, consulta Utilizzare un'immagine esistente configurata per l'utilizzo della GPU.

Strumenti per lavorare con sistemi ottimizzati per i container

  • Per configurare Docker CLI in modo che utilizzi docker-credential-gcr come assistente per le credenziali per l'insieme predefinito di Google Container Registry (GCR), utilizza:

    sudo docker-credential-gcr configure-docker
    

    Per ulteriori informazioni sulla configurazione delle credenziali Docker, consulta docker-credential-gcr.

  • Per copiare file, ad esempio il codice della pipeline, da o verso una VM, usa toolbox. Questa tecnica è utile quando utilizzi un'immagine ottimizzata personalizzata. Ad esempio:

    toolbox /google-cloud-sdk/bin/gsutil cp gs://bucket/gpu/image_process/* /media/root/home/<userid>/opencv/
    

    Per ulteriori informazioni, consulta la sezione Debug dei problemi relativi ai nodi mediante gli strumenti.

Passaggi successivi