Sviluppa con le GPU

In questa pagina viene descritto un esempio di flusso di lavoro per sviluppatori per la creazione di pipeline che utilizzano GPU.

Per ulteriori informazioni sull'utilizzo delle GPU con Dataflow, consulta il supporto di Dataflow per GPU. Per informazioni ed esempi su come abilitare le GPU nei job Dataflow, consulta Utilizzo delle GPU ed Elaborazione delle immagini satellitari Landsat con GPU.

L'uso di Apache Beam con GPU NVIDIA consente di creare pipeline di elaborazione dati su larga scala 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 dei dati utilizzano librerie aggiuntive che devi installare nell'ambiente di lancio e nell'ambiente di esecuzione sui worker di Dataflow. Questa configurazione aggiunge passaggi al flusso di lavoro di sviluppo per la configurazione dei requisiti della pipeline o per l'utilizzo di container personalizzati in Dataflow. Può essere utile un ambiente di sviluppo locale che imiti l'ambiente di produzione nel modo più preciso possibile.

  • Se utilizzi una libreria che utilizza implicitamente le GPU NVIDIA e il tuo codice non richiede modifiche per supportare le GPU, non è necessario modificare il flusso di lavoro di sviluppo per configurare i requisiti della pipeline o creare container personalizzati.

  • Alcune librerie non passano in modo trasparente dall'utilizzo di CPU e GPU, quindi richiedono build specifiche e percorsi di codice diversi. Per replicare il ciclo di vita di sviluppo del codice-run-code per questo scenario, sono necessari passaggi aggiuntivi.

  • Quando esegui esperimenti locali, è utile replicare il più possibile l'ambiente del worker Dataflow. A seconda della libreria, potrebbe essere necessaria una macchina con una GPU e le librerie GPU richieste installate. Questo tipo di macchina potrebbe non essere disponibile nel tuo ambiente locale. Puoi emulare l'ambiente del runner di Dataflow utilizzando un container in esecuzione su una macchina virtuale Google Cloud dotata di GPU.

  • È improbabile che una pipeline sia composta interamente da trasformazioni che richiedono una GPU. Una pipeline tipica ha una fase di importazione che utilizza una delle tante origini fornite da Apache Beam. Questa fase è seguita dalla manipolazione dei dati o dalla trasformazione di trasformazione, che si trasforma poi in una trasformazione GPU.

Il seguente flusso di lavoro in due fasi mostra come creare una pipeline utilizzando le GPU. Questo flusso gestisce i problemi relativi a GPU e non GPU separatamente e riduce il loop di feedback.

  1. Crea una pipeline

    Crea una pipeline che possa essere eseguita su Dataflow. Sostituisci le trasformazioni che richiedono GPU con quelle che non utilizzano GPU, ma sono dal punto di vista funzionale:

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

    2. Crea uno stub per la trasformazione della GPU con un semplice passthrough o un cambio di schema.

  2. Esegui test locale

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

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

    2. Avvia lo sviluppo del codice GPU.

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

Utilizzo di una VM che esegue il sistema operativo ottimizzato per i container

Per un ambiente minimo, utilizza una macchina virtuale (VM) ottimizzata per un container. Per saperne di più, vedi Creare una VM con GPU collegate.

Il flusso generale è:

  1. Creare una VM.

  2. Connettiti alla VM ed esegui i seguenti comandi:

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

    ./nvidia-smi
    
  4. Avvia un container Docker con driver GPU della VM montati come volumi. Ad esempio:

    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, consulta la sezione Creazione di un'immagine container personalizzata. Assicurati di aggiungere al Dockerfile tutte le dipendenze necessarie per la tua pipeline.

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

Strumenti utili quando si lavora con sistemi ottimizzati per i container

  • Per configurare l'interfaccia a riga di comando di Docker affinché utilizzi docker-credential-gcr come utilità delle credenziali per l'insieme predefinito di Google Container Registry (GCR), utilizza:

    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 si utilizza 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 con gli strumenti.

Passaggi successivi