Sie können GPU-Beschleuniger an Ihre Google Cloud Serverless for Apache Spark-Batcharbeitslasten anhängen, um die folgenden Ergebnisse zu erzielen:
Verarbeitung von Arbeitslasten zur Datenanalyse im großen Maßstab beschleunigen
Modelltraining mit großen Datasets mithilfe von GPU-Bibliotheken für maschinelles Lernen beschleunigen
Erweiterte Datenanalysen durchführen, z. B. Video- oder Natural Language Processing.
Bei allen unterstützten Serverless for Apache Spark-Spark-Laufzeiten wird die RAPIDS-Bibliothek für Spark jedem Arbeitslastknoten hinzugefügt. Mit der Spark-Laufzeit Version 1.1 für Serverless for Apache Spark wird den Arbeitslastknoten auch die XGBoost-Bibliothek hinzugefügt. Diese Bibliotheken bieten leistungsstarke Tools für die Datentransformation und das maschinelle Lernen, die Sie in Ihren GPU-beschleunigten Arbeitslasten verwenden können.
Vorteile von GPUs
Hier sind einige Vorteile, wenn Sie GPUs mit Ihren Serverless for Apache Spark-Arbeitslasten verwenden:
Leistungssteigerung:Die GPU-Beschleunigung kann die Leistung von Spark-Arbeitslasten erheblich steigern, insbesondere bei rechenintensiven Aufgaben wie maschinellem Lernen und Deep Learning, der Verarbeitung von Diagrammen und komplexen Analysen.
Schnelleres Modelltraining:Bei Aufgaben im Bereich maschinelles Lernen kann das Anhängen von GPUs die zum Trainieren von Modellen erforderliche Zeit erheblich verkürzen. Data Scientists und Entwickler können so schnell iterieren und experimentieren.
Skalierbarkeit:Kunden können Knoten weitere GPUs oder leistungsstärkere GPUs hinzufügen, um immer komplexere Verarbeitungsanforderungen zu erfüllen.
Kosteneffizienz:GPUs erfordern zwar eine anfängliche Investition, aber Sie können im Laufe der Zeit Kosten sparen, da die Verarbeitungszeiten kürzer und die Ressourcennutzung effizienter ist.
Erweiterte Datenanalyse:Durch die GPU-Beschleunigung können Sie erweiterte Analysen wie Bild- und Videoanalyse sowie Verarbeitung natürlicher Sprache für große Datasets durchführen.
Verbesserte Produkte:Durch die schnellere Verarbeitung können Entscheidungen schneller getroffen werden und Anwendungen reagieren schneller.
Einschränkungen und Überlegungen
Sie können NVIDIA A100- oder NVIDIA L4-GPUs an Google Cloud Serverless für Apache Spark-Batcharbeitslasten anhängen. Für A100- und L4-Beschleuniger gilt die regionale Verfügbarkeit von Compute Engine-GPUs.
Die XGBoost-Bibliothek wird nur für GPU-beschleunigte Arbeitslasten von Serverless for Apache Spark bereitgestellt, wenn die Spark-Laufzeitversion 1.x von Serverless for Apache Spark verwendet wird.
Für GPU-beschleunigte Batches mit XGBoost in Serverless für Apache Spark werden erhöhte Compute Engine-Kontingente verwendet. Wenn Sie beispielsweise eine serverlose Batcharbeitslast ausführen möchten, die eine NVIDIA L4-GPU verwendet, müssen Sie das NVIDIA_L4_GPUS-Kontingent zuweisen.
Jobs, für die Beschleuniger aktiviert sind, sind nicht mit der Organisationsrichtlinie
constraints/compute.requireShieldedVm
kompatibel. Wenn diese Richtlinie in Ihrer Organisation erzwungen wird, können Jobs, für die Beschleuniger aktiviert sind, nicht erfolgreich ausgeführt werden.Sie müssen den Standardzeichensatz auf UTF-8 festlegen, wenn Sie die RAPIDS-GPU-Beschleunigung mit unterstützten Serverless for Apache Spark-Laufzeiten vor Version
2.2
verwenden. Weitere Informationen finden Sie unter Serverless-Batch-Arbeitslast mit GPU-Beschleunigern erstellen.
Preise
Informationen zu den Beschleunigerpreisen finden Sie unter Serverless für Apache Spark-Preise.
Hinweise
Bevor Sie eine serverlose Batcharbeitslast mit angehängten GPU-Beschleunigern erstellen, führen Sie die folgenden Schritte aus:
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Dataproc, Compute Engine, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Dataproc, Compute Engine, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create.
- On the Create a bucket page, enter your bucket information. To go to the next
step, click Continue.
-
In the Get started section, do the following:
- Enter a globally unique name that meets the bucket naming requirements.
- To add a
bucket label,
expand the Labels section ( ),
click add_box
Add label, and specify a
key
and avalue
for your label.
-
In the Choose where to store your data section, do the following:
- Select a Location type.
- Choose a location where your bucket's data is permanently stored from the Location type drop-down menu.
- If you select the dual-region location type, you can also choose to enable turbo replication by using the relevant checkbox.
- To set up cross-bucket replication, select
Add cross-bucket replication via Storage Transfer Service and
follow these steps:
Set up cross-bucket replication
- In the Bucket menu, select a bucket.
In the Replication settings section, click Configure to configure settings for the replication job.
The Configure cross-bucket replication pane appears.
- To filter objects to replicate by object name prefix, enter a prefix that you want to include or exclude objects from, then click Add a prefix.
- To set a storage class for the replicated objects, select a storage class from the Storage class menu. If you skip this step, the replicated objects will use the destination bucket's storage class by default.
- Click Done.
-
In the Choose how to store your data section, do the following:
- Select a default storage class for the bucket or Autoclass for automatic storage class management of your bucket's data.
- To enable hierarchical namespace, in the Optimize storage for data-intensive workloads section, select Enable hierarchical namespace on this bucket.
- In the Choose how to control access to objects section, select whether or not your bucket enforces public access prevention, and select an access control method for your bucket's objects.
-
In the Choose how to protect object data section, do the
following:
- Select any of the options under Data protection that you
want to set for your bucket.
- To enable soft delete, click the Soft delete policy (For data recovery) checkbox, and specify the number of days you want to retain objects after deletion.
- To set Object Versioning, click the Object versioning (For version control) checkbox, and specify the maximum number of versions per object and the number of days after which the noncurrent versions expire.
- To enable the retention policy on objects and buckets, click the Retention (For compliance) checkbox, and then do the following:
- To enable Object Retention Lock, click the Enable object retention checkbox.
- To enable Bucket Lock, click the Set bucket retention policy checkbox, and choose a unit of time and a length of time for your retention period.
- To choose how your object data will be encrypted, expand the Data encryption section (Data encryption method. ), and select a
- Select any of the options under Data protection that you
want to set for your bucket.
-
In the Get started section, do the following:
- Click Create.
Klicken Sie auf Expand me (Einblenden), erstellen Sie den aufgeführten PySpark-Code und speichern Sie ihn mit einem Text- oder Code-Editor 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() )
Verwenden Sie die gcloud CLI auf Ihrem lokalen Computer, um den serverlosen Batchjob für Serverless for Apache Spark mit fünf Worker-Knoten zu senden, wobei jeder Worker-Knoten mit 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
- PROJECT_ID: Ihre Google Cloud -Projekt-ID
- REGION: Eine verfügbare Compute Engine-Region, in der die Arbeitslast ausgeführt werden soll.
- 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 Google Cloud Serverless for Apache Spark-Laufzeiten wird die RAPIDS-Bibliothek jedem Knoten einer GPU-beschleunigten Arbeitslast hinzugefügt. Nur in der Laufzeitversion 1.1 wird die XGBoost-Bibliothek jedem Knoten einer GPU-beschleunigten Arbeitslast hinzugefügt.
--properties (siehe Spark-Attribute für die Ressourcenzuweisung) :
spark.dataproc.driverEnv.LANG=C.UTF-8
undspark.executorEnv.LANG=C.UTF-8
(bei Laufzeitversionen vor2.2
erforderlich): Mit diesen Attributen wird der Standardzeichensatz auf C.UTF-8 festgelegt.spark.dataproc.executor.compute.tier=premium
(erforderlich): GPU-beschleunigte Arbeitslasten werden mit Premium-DCUs (Data Compute Units) abgerechnet. Weitere Informationen finden Sie unter Beschleunigerpreise.spark.dataproc.executor.disk.tier=premium
(erforderlich): Für Knoten mit A100-40-, A100-80- oder L4-Beschleunigern muss die Premium-Festplattenstufe verwendet werden.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. Legen Sie für dieses Beispiel den Wert 5 fest.spark.executor.cores
(optional): Mit dieser Eigenschaft können Sie die Anzahl der Core-vCPUs angeben. Gültige Werte für L4-GPUs sind4
(Standard),8
,12
,16
,24
,48
oder96
. Der einzige gültige und Standardwert für A100-GPUs ist12
. Konfigurationen mit L4-GPUs und24
-,48
- oder96
-Kernen haben2
,4
oder8
GPUs, die an jeden Executor angehängt sind. Alle anderen Konfigurationen haben1
GPU.spark.dataproc.executor.disk.size
(erforderlich): L4-GPUs haben eine feste Festplattengröße von 375 GB, mit Ausnahme von Konfigurationen mit24
-,48
- oder96
-Kernen, die750
,1,500
bzw.3,000
GB haben. Wenn Sie diese Eigenschaft beim Einreichen einer L4-beschleunigten Arbeitslast auf einen anderen Wert festlegen, tritt ein Fehler auf. Wenn Sie eine A100 40- oder A100 80-GPU auswählen, sind die gültigen Größen 375 g, 750 g, 1.500 g, 3.000 g, 6.000 g und 9.000 g.spark.executor.memory
(optional) undspark.executor.memoryOverhead
(optional): Sie können eine dieser Eigenschaften festlegen, aber nicht beide. Die Menge des verfügbaren Arbeitsspeichers, die nicht von der festgelegten Property belegt wird, wird auf die nicht festgelegte Property angewendet. Standardmäßig istspark.executor.memoryOverhead
auf 40% des verfügbaren Arbeitsspeichers für PySpark-Batcharbeitslasten und auf 10% für andere Arbeitslasten festgelegt (siehe Spark-Eigenschaften für die Ressourcenzuordnung).In der folgenden Tabelle sehen Sie die maximale Arbeitsspeichermenge, die für verschiedene A100- und L4-GPU-Konfigurationen festgelegt werden kann. Der Mindestwert für beide Attribute ist
1024
MB.A100 (40 GB) A100 (80 GB) L4 (4 Kerne) L4 (8 Kerne) L4 (12 Kerne) L4 (16 Kerne) L4 (24 Kerne) L4 (48 Kerne) L4 (96 Kerne) Maximaler Gesamtspeicher (MB) 78040 165080 13384 26768 40152 53536 113072 160608 321216 Spark RAPIDS-Attribute (optional): Standardmäßig werden in Serverless for Apache Spark die folgenden Spark RAPIDS-Attributwerte festgelegt:
spark.plugins
=com.nvidia.spark.SQLPluginspark.executor.resource.gpu.amount
=1spark.task.resource.gpu.amount
=1/$spark_executor_coresspark.shuffle.manager
=''. Standardmäßig ist dieses Attribut nicht festgelegt. NVIDIA empfiehlt, den RAPIDS Shuffle Manager zu aktivieren, wenn Sie GPUs verwenden, um die Leistung zu verbessern. Dazu legen Siespark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager
fest, wenn Sie eine Arbeitslast senden.spark.rapids.sql.concurrentGpuTasks
= Minimum von (gpuMemoryinMB
/ 8, 4)spark.rapids.shuffle.multiThreaded.writer.threads
= Minimum von (CPU-Kerne in der VM / GPU-Anzahl pro VM, 32)spark.rapids.shuffle.multiThreaded.reader.threads
= Minimum von (CPU-Kerne in der VM / GPU-Anzahl pro VM, 32)
Informationen zum Festlegen von Spark RAPIDS-Attributen finden Sie unter RAPIDS Accelerator for Apache Spark Configuration und zum Festlegen von erweiterten Spark-Attributen unter RAPIDS Accelerator for Apache Spark Advanced Configuration.
Serverlose Batch-Arbeitslast mit GPU-Beschleunigern erstellen
Senden Sie eine Serverless for Apache Spark-Batcharbeitslast, in der NVIDIA L4-GPUs verwendet werden, um eine parallelisierte PySpark-Aufgabe auszuführen. Führen Sie die folgenden Schritte mit der gcloud CLI aus:
Hinweise: