Se esegui più processi SDK su una GPU Dataflow condivisa, puoi migliorare l'efficienza e l'utilizzo della GPU attivando NVIDIA Multi-Process Service (MPS). MPS supporta l'elaborazione simultanea su una GPU consentendo ai processi di condividere i contesti CUDA e le risorse di pianificazione. MPS può ridurre i costi di cambio contesto, aumentare il parallelismo e ridurre i requisiti di archiviazione.
I flussi di lavoro di targeting sono pipeline Python eseguite su worker con più di una vCPU.
MPS è una tecnologia NVIDIA che implementa l'API CUDA, una piattaforma NVIDIA che supporta il calcolo GPU per uso generico. Per ulteriori informazioni, consulta la Guida dell'utente per NVIDIA Multi-Process Service.
Vantaggi
- Migliora l'elaborazione parallela e la velocità effettiva complessiva per le pipeline GPU, soprattutto per i carichi di lavoro con un basso utilizzo delle risorse GPU.
- Migliora l'utilizzo della GPU, il che potrebbe ridurre i costi.
Supporto e limitazioni
- MPS è supportato solo sui worker Dataflow che utilizzano una singola GPU.
- La pipeline non può utilizzare opzioni che limitano il parallelismo.
- Non utilizzare l'opzione della pipeline
--experiments=no_use_multiple_sdk_containersquando utilizzi NVIDIA MPS. Questa opzione limita Dataflow a un singolo processo Python per VM. In questo modo, MPS non può dividere in modo efficace le risorse GPU tra i processi. Inoltre, limita gravemente il parallelismo a causa del Global Interpreter Lock (GIL) di Python e rende inefficaci molti altri parametri di ottimizzazione. - Evita di superare la memoria GPU disponibile, soprattutto per i casi d'uso che comportano il caricamento di modelli di machine learning di grandi dimensioni. Bilancia il numero di vCPU e i processi SDK con la memoria GPU disponibile di cui questi processi hanno bisogno.
- MPS non influisce sulla concorrenza delle operazioni non GPU.
- Dataflow Prime non supporta MPS.
Abilita MPS
Ti consigliamo di attivare MPS ogni volta che carichi più di una copia del modello su una singola GPU (ad esempio, utilizzando model_copies > 1 nella trasformazione RunInference). Ciò consente a più processi di accedere alla GPU
contemporaneamente, migliorando l'efficienza e l'utilizzo.
Quando esegui una pipeline con GPU, abilita MPS procedendo nel seguente modo:
- Nell'opzione della pipeline
--dataflow_service_options, aggiungiuse_nvidia_mpsal parametroworker_accelerator. - Imposta
countsu 1. - Non utilizzare l'opzione pipeline
--experiments=no_use_multiple_sdk_containers.
L'opzione della pipeline --dataflow_service_options è simile alla seguente:
--dataflow_service_options="worker_accelerator=type:GPU_TYPE;count:1;install-nvidia-driver;use_nvidia_mps"
Se utilizzi TensorFlow e abiliti MPS, procedi nel seguente modo:
- Attiva l'allocazione dinamica della memoria sulla GPU. Utilizza una delle seguenti opzioni di TensorFlow:
- Attiva l'aumento della memoria chiamando il numero
tf.config.experimental.set_memory_growth(gpu, True). - Imposta la variabile di ambiente
TF_FORCE_GPU_ALLOW_GROWTHsu true.
- Attiva l'aumento della memoria chiamando il numero
- Utilizza dispositivi logici con limiti di memoria appropriati.
- Per un rendimento ottimale, forza l'utilizzo della GPU quando possibile utilizzando il posizionamento soft dei dispositivi o il posizionamento manuale.
Passaggi successivi
- Per esaminare altre best practice, consulta Parallelismo di GPU e worker.