Améliorer les performances d'un GPU partagé à l'aide de NVIDIA MPS

Si vous exécutez plusieurs processus du SDK sur un GPU Dataflow partagé, vous pouvez améliorer l'efficacité et l'utilisation du GPU en activant le service multiprocessus NVIDIA (MPS). MPS est compatible avec le traitement simultané sur GPU en permettant aux processus de partager des contextes CUDA et de planifier des ressources. Les MPS peuvent réduire les coûts de changement de contexte, augmenter le parallélisme et réduire les besoins en stockage.

Les workflows cibles sont des pipelines Python qui s'exécutent sur des nœuds de calcul comportant plusieurs processeurs virtuels.

MPS est une technologie NVIDIA qui met en œuvre l'API CUDA, une plate-forme NVIDIA compatible avec les calculs GPU à usage général. Pour en savoir plus, consultez le guide de l'utilisateur sur le service multi-processus NVIDIA.

Avantages

  • Améliore le traitement en parallèle et le débit global pour les pipelines GPU, en particulier pour les charges de travail avec une faible utilisation des ressources GPU.
  • Améliore l'utilisation des GPU, ce qui peut réduire vos coûts.

Compatibilité et limites

  • MPS n'est compatible qu'avec les nœuds de calcul Dataflow qui utilisent un seul GPU.
  • Le pipeline ne peut pas utiliser d'options de pipeline qui limitent le parallélisme.
  • Évitez de dépasser la mémoire GPU disponible, en particulier pour les cas d'utilisation impliquant le chargement de modèles de machine learning volumineux. Équilibrez le nombre de processeurs virtuels et de processus du SDK avec la mémoire GPU disponible dont ces processus ont besoin.
  • Le traitement MPS n'a pas d'incidence sur la simultanéité des opérations non GPU.
  • Dataflow Prime n'est pas compatible avec MPS.

Activer MPS

Lorsque vous exécutez un pipeline avec des GPU, activez MPS en procédant comme suit:

  • Dans l'option de pipeline --dataflow_service_options, ajoutez use_nvidia_mps au paramètre worker_accelerator.
  • Définissez count sur 1.
  • N'utilisez pas l'option de pipeline --experiments=no_use_multiple_sdk_containers.

L'option de pipeline --dataflow_service_options se présente comme suit:

--dataflow_service_options="worker_accelerator=type:GPU_TYPE;count:1;install-nvidia-driver;use_nvidia_mps"

Si vous utilisez TensorFlow et que vous activez MPS, procédez comme suit:

  1. Activez l'allocation dynamique de mémoire sur le GPU. Utilisez l'une des options TensorFlow suivantes :
    • Activez la croissance de la mémoire en appelant tf.config.experimental.set_memory_growth(gpu, True).
    • Définissez la variable d'environnement TF_FORCE_GPU_ALLOW_GROWTH sur "true".
  2. Utilisez des appareils logiques avec des limites de mémoire appropriées.
  3. Pour des performances optimales, appliquez si possible le GPU en utilisant l'emplacement souple de l'appareil ou l'emplacement manuel.

Étapes suivantes