GPUs mit Dataproc Serverless verwenden

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

  • Beschleunigen Sie die Verarbeitung umfangreicher Arbeitslasten für die Datenanalyse.

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

  • Erweiterte Datenanalysen wie Videos oder Natural Language ausführen Datenverarbeitung.

Bei allen unterstützten Dataproc Serverless Spark-Laufzeiten wird jedem Arbeitslastknoten die Spark RAPIDS-Bibliothek hinzugefügt. Die Version 1.1 der serverlosen Dataproc-Spark-Laufzeit enthält außerdem die XGBoost-Bibliothek für Arbeitslastknoten. Diese Bibliotheken ermöglichen eine leistungsstarke Datentransformation und ML-Tools, die Sie in Ihren GPU-beschleunigten Arbeitslasten verwenden können.

GPU-Vorteile

Die Verwendung von GPUs mit Ihren serverlosen Dataproc-Spark-Arbeitslasten bietet folgende Vorteile:

  • Leistungssteigerung: Die GPU-Beschleunigung kann die Leistung von Spark-Arbeitslasten erheblich steigern, insbesondere bei rechenintensiven Aufgaben wie maschinellem Lernen und Deep Learning, Graphenverarbeitung und komplexen Analysen.

  • Schnelleres Modelltraining: Bei ML-Aufgaben kann das Anhängen von GPUs den Zeitaufwand für das Training von Modellen erheblich reduzieren, sodass Data Scientists und Engineers, um schnell Iterationen und Tests durchzuführen.

  • Skalierung: Kunden können Knoten weitere GPUs oder leistungsstärkere GPUs hinzufügen, um immer komplexer werdende Verarbeitungsanforderungen zu erfüllen.

  • Kosteneffizienz: Obwohl GPUs eine Anfangsinvestition erfordern, können Sie dennoch Kosten erzielen. Einsparungen im Laufe der Zeit aufgrund kürzerer Verarbeitungszeiten und effizienterer Ressourcennutzung.

  • Erweiterte Datenanalyse: Mit der GPU-Beschleunigung können Sie erweiterte Analysen wie Bild- und Videoanalyse sowie Natural Language Processing auf großen Datenmengen durchführen.

  • Verbesserte Produkte: Eine schnellere Verarbeitung ermöglicht eine schnellere Entscheidungsfindung und reaktionsfähigere Anwendungen.

Einschränkungen und Überlegungen

Preise

Siehe Dataproc Serverless-Preise für Beschleunigerpreise.

Hinweis

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

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc, Compute Engine, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    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. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Dataproc, Compute Engine, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. In the Google Cloud console, go to the Cloud Storage Buckets page.

    Go to Buckets page

  13. Click Create bucket.
  14. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
    • For Name your bucket, enter a name that meets the bucket naming requirements.
    • For Choose where to store your data, do the following:
      • Select a Location type option.
      • Select a Location option.
    • For Choose a default storage class for your data, select a storage class.
    • For Choose how to control access to objects, select an Access control option.
    • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
  15. Click Create.

Serverlose Batch-Arbeitslast mit GPU-Beschleunigern erstellen

Reichen Sie eine Dataproc Serverless-Batcharbeitslast ein, für die NVIDIA L4-GPUs zum Ausführen einer parallelisierten PySpark-Aufgabe verwendet werden. Führen Sie über die gcloud CLI die folgenden Schritte aus:

  1. Klicken Sie auf Maximieren und erstellen Sie dann mit einem Text- oder Code-Editor den aufgeführten PySpark-Code 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 Serverloser Dataproc-Batchjob mit fünf Workern, pro Worker mit L4-GPUs beschleunigt:

    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 Arbeitslastabhängigkeiten in einen /dependencies-Ordner in diesem Bucket hoch, bevor die Batcharbeitslast ausgeführt wird.
  • --version: Bei allen unterstützten serverlosen Dataproc-Laufzeiten wird jedem Knoten einer GPU-beschleunigten Arbeitslast die RAPIDS-Bibliothek hinzugefügt. Derzeit wird die XGBoost-Bibliothek nur bei der Laufzeitversion 1.1 jedem Knoten einer GPU-beschleunigten Arbeitslast hinzugefügt.
  • --properties (siehe Spark-Attribute für die Ressourcenzuweisung):

    • spark.dataproc.driverEnv.LANG=C.UTF-8 und spark.executorEnv.LANG=C.UTF-8 (erforderlich mit Laufzeitversionen vor 2.2): Diese Eigenschaften werden festgelegt. Standardzeichensatz auf C.UTF-8.
    • spark.dataproc.executor.compute.tier=premium (erforderlich): GPU-beschleunigte Arbeitslasten werden mit Premium-Daten-Compute-Units (DCUs) abgerechnet. Preise für Dataproc Serverless-Beschleuniger

    • spark.dataproc.executor.disk.tier=premium (erforderlich): Knoten mit A100-40-, A100-80- oder L4-Beschleunigern müssen die Premium-Speicherebene 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): Es müssen mindestens zwei sein. Festlegen auf fünf für dieses Beispiel.

    • spark.executor.cores (optional): Mit dieser Eigenschaft können Sie die Anzahl der Kern-vCPUs angeben. Gültige Werte für L4-GPUs sind 4 (Standard), 8, 12 oder 16. Der einzige gültige und standardmäßige Wert für A100-GPUs ist 12.

    • spark.dataproc.executor.disk.size (erforderlich): Für L4-GPUs ist eine Größe von 375 GB erforderlich. Wenn Sie diese Eigenschaft beim Einreichen einer L4-beschleunigten Arbeitslast auf einen anderen Wert festlegen, tritt ein Fehler auf. Wenn Sie ein A100 40 oder A100 80 GPU, gültige Größen: 375 g, 750 g, 1500 g, 3000 g, 6000 g und 9.000 g.

    • spark.executor.memory (optional) und spark.executor.memoryOverhead (optional): Sie können eine dieser Optionen festlegen. Eigenschaften, aber nicht beides. Der verfügbare Arbeitsspeicher, der nicht von der festgelegten Property belegt wird, wird auf die Property angewendet, die nicht festgelegt ist. Standardmäßig ist spark.executor.memoryOverhead für PySpark-Batch-Arbeitslasten auf 40 % des verfügbaren Arbeitsspeichers und für andere Arbeitslasten auf 10 % festgelegt (siehe Spark-Ressourcenzuweisungseigenschaften).

      Die folgende Tabelle zeigt die maximale Speichermenge, die für A100- und L4-GPU-Konfigurationen. Der Mindestwert für beide Eigenschaften beträgt 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 wird Dataproc Serverless legt 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, RAPIDS Shuffle-Manager wenn Sie zur Leistungsverbesserung GPUs verwenden. Legen Sie dazu spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager fest, wenn Sie eine Arbeitslast einreichen.

      Informationen zum Festlegen von Spark RAPIDS-Attributen finden Sie unter RAPIDS Accelerator für die Apache Spark-Konfiguration, und unter RAPIDS Accelerator für die erweiterte Konfiguration von Apache Spark. um erweiterte Spark-Attribute festzulegen.