GPUs mit Dataproc Serverless verwenden

Sie können Ihren Dataproc Serverless-Batcharbeitslasten GPU-Beschleuniger hinzufügen, um folgende Ergebnisse zu erzielen:

  • Beschleunigen Sie die Verarbeitung umfangreicher Datenanalysearbeitslasten.

  • Beschleunigen Sie das Modelltraining für große Datasets mithilfe von GPU-Bibliotheken für maschinelles Lernen.

  • Führen Sie erweiterte Datenanalysen wie Videoverarbeitung oder Natural Language Processing durch.

Bei allen unterstützten Dataproc Serverless Spark-Laufzeiten wird jedem Arbeitslastknoten die Spark RAPIDS-Bibliothek hinzugefügt. In der Dataproc 1.1-Laufzeit der serverlosen Spark-Laufzeit wird den Arbeitslastknoten außerdem die XGBoost-Bibliothek hinzugefügt. Diese Bibliotheken bieten leistungsstarke Tools für die Datentransformation und maschinelles Lernen, die Sie in Ihren GPU-beschleunigten Arbeitslasten verwenden können.

GPU-Vorteile

Hier sind einige der Vorteile der Verwendung von GPUs mit Ihren Dataproc Serverless Spark-Arbeitslasten:

  • Leistungsverbesserung:Die GPU-Beschleunigung kann die Leistung von Spark-Arbeitslasten erheblich steigern, insbesondere bei rechenintensiven Aufgaben wie Machine- und Deep-Learning, Graphverarbeitung und komplexe Analysen.

  • Schnelleres Modelltraining:Das Anfügen von GPUs kann bei Aufgaben im Bereich des maschinellen Lernens die Zeit für das Training von Modellen drastisch reduzieren. So können Data Scientists und Entwickler schnell iterieren und experimentieren.

  • Skalierbarkeit: Kunden können Knoten weitere GPU-Knoten oder leistungsstärkere GPUs hinzufügen, um immer komplexere Verarbeitungsanforderungen zu bewältigen.

  • Kosteneffizienz: Obwohl für GPUs eine Anschaffung erforderlich ist, können Sie im Laufe der Zeit aufgrund von kürzeren Verarbeitungszeiten und effizienteren Ressourcennutzung Kosteneinsparungen erzielen.

  • Verbesserte Datenanalyse: Mit der GPU-Beschleunigung können Sie erweiterte Analysen wie Bild- und Videoanalysen sowie Natural Language Processing für große Datasets ausführen.

  • Verbesserte Produkte: Eine schnellere Verarbeitung ermöglicht eine schnellere Entscheidungsfindung und reaktionsschnellere Anwendungen.

Einschränkungen und Überlegungen

Preise

Preisinformationen für Beschleuniger finden Sie unter Dataproc Serverless-Preise.

Hinweise

Führen Sie vor dem Erstellen einer serverlosen Batcharbeitslast mit angehängten GPU-Beschleunigern die folgenden Schritte aus:

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Dataproc, Compute Engine, and Cloud Storage APIs aktivieren.

    Aktivieren Sie die APIs

  5. Installieren Sie die Google Cloud CLI.
  6. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  9. Dataproc, Compute Engine, and Cloud Storage APIs aktivieren.

    Aktivieren Sie die APIs

  10. Installieren Sie die Google Cloud CLI.
  11. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  12. Wechseln Sie in der Google Cloud Console zur Cloud Storage-Seite Buckets.

    Zur Seite „Buckets“

  13. Klicken Sie auf Bucket erstellen.
  14. Geben Sie auf der Seite Bucket erstellen die Bucket-Informationen ein. Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.
    • Geben Sie unter Bucket benennen einen Namen ein, der den Anforderungen für Bucket-Namen entspricht.
    • Gehen Sie unter Speicherort für Daten auswählen folgendermaßen vor:
      • Wählen Sie eine Option für Standorttyp aus.
      • Wählen Sie eine Standort-Option aus.
    • Wählen Sie unter Standardspeicherklasse für Ihre Daten auswählen eine Speicherklasse aus.
    • Wählen Sie unter Zugriffssteuerung für Objekte auswählen eine Option für die Zugriffssteuerung aus.
    • Geben Sie für Erweiterte Einstellungen (optional) eine Verschlüsselungsmethode, eine Aufbewahrungsrichtlinie oder Bucket-Labels an.
  15. Klicken Sie auf Erstellen.

Serverlose Batcharbeitslast mit GPU-Beschleunigern erstellen

Senden Sie eine serverlose Dataproc-Batcharbeitslast, die NVIDIA L4-GPUs verwendet, um eine parallelisierte PySpark-Aufgabe auszuführen. Führen Sie die folgenden Schritte über die gcloud CLI aus:

  1. Klicken Sie auf Maximieren, erstellen Sie den aufgeführten PySpark-Code und speichern Sie ihn mithilfe eines Text- oder Codeeditors in einer test-py-spark-gpu.py-Datei auf Ihrem lokalen Computer.

    #!/usr/bin/env python
    
    """S8s Accelerators Example."""
    
    import subprocess
    from typing import Any
    from pyspark.sql import SparkSession
    from pyspark.sql.functions import col
    from pyspark.sql.types import IntegerType
    from pyspark.sql.types import StructField
    from pyspark.sql.types import StructType
    
    spark = SparkSession.builder.appName("joindemo").getOrCreate()
    
    def get_num_gpus(_: Any) -> int:
      """Returns the number of GPUs."""
      p_nvidia_smi = subprocess.Popen(
          ["nvidia-smi", "-L"], stdin=None, stdout=subprocess.PIPE
      )
      p_wc = subprocess.Popen(
          ["wc", "-l"],
          stdin=p_nvidia_smi.stdout,
          stdout=subprocess.PIPE,
          stderr=subprocess.PIPE,
          universal_newlines=True,
      )
      [out, _] = p_wc.communicate()
      return int(out)
    
    num_workers = 5
    result = (
        spark.sparkContext.range(0, num_workers, 1, num_workers)
        .map(get_num_gpus)
        .collect()
    )
    num_gpus = sum(result)
    print(f"Total accelerators: {num_gpus}")
    
    # Run the join example
    schema = StructType([StructField("value", IntegerType(), True)])
    df = (
        spark.sparkContext.parallelize(range(1, 10000001), 6)
        .map(lambda x: (x,))
        .toDF(schema)
    )
    df2 = (
        spark.sparkContext.parallelize(range(1, 10000001), 6)
        .map(lambda x: (x,))
        .toDF(schema)
    )
    joined_df = (
        df.select(col("value").alias("a"))
        .join(df2.select(col("value").alias("b")), col("a") == col("b"))
        .explain()
    )
    
    
  2. Verwenden Sie die gcloud CLI auf Ihrem lokalen Computer, um den serverlosen Batchjob von Dataproc Serverless mit fünf Workern zu senden, wobei jeder Worker durch L4-GPUs beschleunigt wird:

    gcloud dataproc batches submit pyspark test-py-spark-gpu.py \
        --project=PROJECT_ID \
        --region=REGION \
        --deps-bucket=BUCKET_NAME \
        --version=1.1 \
        --properties=spark.dataproc.executor.compute.tier=premium,spark.dataproc.executor.disk.tier=premium,spark.dataproc.executor.resource.accelerator.type=l4,spark.executor.instances=5,spark.dataproc.driverEnv.LANG=C.UTF-8,spark.executorEnv.LANG=C.UTF-8,spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager
    

Hinweise:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • REGION: Eine verfügbare Compute Engine-Region zum Ausführen der Arbeitslast.
  • BUCKET_NAME: Der Name Ihres Cloud Storage-Buckets Spark lädt Abhängigkeiten der Arbeitslasten in einen /dependencies-Ordner in diesem Bucket hoch, bevor die Batcharbeitslast ausgeführt wird.
  • --version::Alle unterstützten Dataproc Serverless-Laufzeiten fügen jedem Knoten einer GPU-beschleunigten Arbeitslast die RAPIDS-Bibliothek hinzu. Derzeit wird jedem Knoten einer GPU-beschleunigten Arbeitslast nur in Laufzeitversion 1.1 die Bibliothek XGBoost hinzugefügt.
  • --properties (siehe Attribute der Spark-Ressourcenzuweisung) :

    • spark.dataproc.driverEnv.LANG=C.UTF-8 und spark.executorEnv.LANG=C.UTF-8 (bei Laufzeitversionen vor 2.2 erforderlich): Diese Attribute setzen den Standardzeichensatz auf C.UTF-8.
    • spark.dataproc.executor.compute.tier=premium (erforderlich): GPU-beschleunigte Arbeitslasten werden mit Premium-Datenrecheneinheiten (Data Compute Units, DCUs) abgerechnet. Siehe Dataproc Serverless-Beschleuniger – Preise.

    • spark.dataproc.executor.disk.tier=premium (erforderlich): Knoten mit A100-40-, A100-80- oder L4-Beschleunigern müssen die Premium-Laufwerksstufe verwenden.

    • spark.dataproc.executor.resource.accelerator.type=l4 (erforderlich): Es muss nur ein GPU-Typ angegeben werden. Im Beispieljob wird die L4-GPU ausgewählt. Die folgenden Beschleunigertypen können mit den folgenden Argumentnamen angegeben werden:

      GPU-Typ Name des Arguments
      A100 40GB a100-40
      A100 80GB a100-80

    • spark.executor.instances=5 (erforderlich): Muss mindestens zwei sein. In diesem Beispiel sind es fünf.

    • spark.executor.cores (optional): Sie können dieses Attribut festlegen, um die Anzahl der Kern-vCPUs anzugeben. Gültige Werte für L4-GPUs sind 4 (Standardwert) oder 8, 12 oder 16. Der einzige gültige und Standardwert für A100-GPUs ist 12.

    • spark.dataproc.executor.disk.size (optional für GPUs vom Typ A100-40 und A100-80): Dataproc Serverless legt die Standardgröße des GPU-SSD-Laufwerks auf 375 GB fest. Sie können die Größe bei Verwendung von A100 40- oder A100 80-GPUs ändern (siehe Attribute der Spark-Ressourcenzuweisung). L4-GPUs benötigen die Größe von 375 GB. Wenn Sie für dieses Attribut einen anderen Wert festlegen, wenn Sie eine L4-beschleunigte Arbeitslast senden, tritt ein Fehler auf.

    • spark.executor.memory (optional) und spark.executor.memoryOverhead (optional): Sie können eines dieser Attribute festlegen, aber nicht beide. Die Menge des verfügbaren Arbeitsspeichers, der nicht vom festgelegten Attribut belegt wird, wird auf das nicht festgelegte Attribut angewendet. Standardmäßig ist spark.executor.memoryOverhead für PySpark-Batcharbeitslasten auf 40% des verfügbaren Arbeitsspeichers und für andere Arbeitslasten auf 10% festgelegt (siehe Attribute der Spark-Ressourcenzuweisung).

      Die folgende Tabelle zeigt die maximale Speichermenge, die für verschiedene A100- und L4-GPU-Konfigurationen festgelegt werden kann. Der Mindestwert für jedes Attribut ist 1024 MB.

      A100 (40 GB) A100 (80 GB) L4 (4 Kerne) L4 (8 Kerne) L4 (12 Kerne) L4 (16 Kerne)
      Maximaler Gesamtarbeitsspeicher (MB) 78040 165080 13384 26768 40152 53536
    • Spark RAPIDS-Attribute (optional): Standardmäßig legt Dataproc Serverless die folgenden Spark RAPIDS-Attributwerte fest:

      • spark.plugins=com.nvidia.spark.SQLPlugin
      • spark.executor.resource.gpu.amount=1
      • spark.task.resource.gpu.amount=1/$spark_executor_cores
      • spark.shuffle.manager=''. Diese Eigenschaft ist standardmäßig nicht festgelegt. NVIDIA empfiehlt jedoch, den RAPIDS Shuffle-Manager zu aktivieren, wenn Sie GPUs verwenden, um die Leistung zu verbessern. Legen Sie dazu spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager fest, wenn Sie eine Arbeitslast senden.

      Informationen zum Festlegen von Spark RAPIDS-Attributen finden Sie unter RAPIDS Accelerator für Apache Spark Configuration und unter RAPIDS Accelerator für Apache Spark Advanced Configuration.