Mit NVIDIA MPS die Leistung einer gemeinsam genutzten GPU verbessern

Wenn Sie mehrere SDK-Prozesse auf einer freigegebenen Dataflow-GPU ausführen, können Sie die GPU-Effizienz und -Auslastung verbessern, indem Sie den NVIDIA Multi-Process-Dienst (MPS) aktivieren. MPS unterstützt die gleichzeitige Verarbeitung auf einer GPU, da Prozesse die Freigabe von CUDA-Kontexten und die Planung von Ressourcen aktivieren. MPS kann die Kosten für den Kontextwechsel, die Parallelität und die Senkung des Speicherbedarfs reduzieren.

Zielworkflows sind Python-Pipelines, die auf Workern mit mehr als einer vCPU ausgeführt werden.

MPS ist eine NVIDIA-Technologie, die die CUDA API implementiert, eine NVIDIA-Plattform, die allgemeines GPU-Computing unterstützt. Weitere Informationen finden Sie im NVIDIA Multi-Process Service-Nutzerhandbuch.

Vorteile

  • Verbessert die parallele Verarbeitung und den Gesamtdurchsatz für GPU-Pipelines, insbesondere für Arbeitslasten mit niedriger GPU-Ressourcennutzung.
  • Verbessert die GPU-Auslastung, wodurch Ihre Kosten gesenkt werden können.

Unterstützung und Einschränkungen

  • MPS wird nur auf Dataflow-Workern unterstützt, die eine einzelne GPU verwenden.
  • Die Pipeline kann keine Pipelineoptionen verwenden, die die Parallelität einschränken.
  • Verwenden Sie die Pipeline-Option --experiments=no_use_multiple_sdk_containers nicht, wenn Sie NVIDIA MPS verwenden. Mit dieser Option wird Dataflow auf einen einzelnen Python-Prozess pro VM beschränkt. Dadurch kann MPS GPU-Ressourcen nicht effektiv auf Prozesse aufteilen. Außerdem wird die Parallelität aufgrund des Global Interpreter Lock (GIL) von Python stark eingeschränkt und viele andere Tuning-Parameter sind wirkungslos.
  • Vermeiden Sie die Überschreitung des verfügbaren GPU-Arbeitsspeichers, insbesondere für Anwendungsfälle, bei denen große Modelle für maschinelles Lernen geladen werden. Wägen Sie die Anzahl der vCPUs und SDK-Prozesse mit dem verfügbaren GPU-Speicher ab, den diese Prozesse benötigen.
  • MPS wirkt sich nicht auf die Gleichzeitigkeit von Nicht-GPU-Vorgängen aus.
  • Dataflow Prime unterstützt MPS nicht.

MPS aktivieren

Wir empfehlen, MPS immer dann zu aktivieren, wenn Sie mehr als eine Kopie Ihres Modells auf eine einzelne GPU laden, z. B. mit model_copies > 1 in der RunInference-Transformation. So können mehrere Prozesse gleichzeitig auf die GPU zugreifen, was die Effizienz und Auslastung verbessert.

Wenn Sie eine Pipeline mit GPUs ausführen, aktivieren Sie MPS so:

  • Hängen Sie in der Pipeline-Option --dataflow_service_options use_nvidia_mps an den Parameter worker_accelerator an.
  • Legen Sie den Wert count auf 1 fest.
  • Verwenden Sie nicht die Pipeline-Option --experiments=no_use_multiple_sdk_containers.

Die Pipelineoption --dataflow_service_options sieht so aus:

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

Wenn Sie TensorFlow verwenden und MPS aktivieren, gehen Sie so vor:

  1. Aktivieren Sie die dynamische Speicherzuweisung auf der GPU. Verwenden Sie eine der folgenden TensorFlow-Optionen:
    • Aktivieren Sie das Arbeitsspeicherwachstum durch Aufrufen von tf.config.experimental.set_memory_growth(gpu, True).
    • Setzen Sie die Umgebungsvariable TF_FORCE_GPU_ALLOW_GROWTH auf "true".
  2. Verwenden Sie logische Geräte mit entsprechenden Speicherlimits.
  3. Für eine optimale Leistung sollten Sie die Verwendung der GPU nach Möglichkeit mithilfe der weichen Geräteplatzierung oder der manuellen Platzierung erzwingen.

Nächste Schritte