Sie können GPU-Beschleuniger an Ihre Managed Service for Apache Spark-Batcharbeitslasten anhängen, um die folgenden Ergebnisse zu erzielen:
Verarbeitung von Arbeitslasten zur Datenanalyse in großem Maßstab beschleunigen
Beschleunigen Sie das Modelltraining für große Datasets mit GPU-Bibliotheken für maschinelles Lernen.
Erweiterte Datenanalysen durchführen, z. B. Video- oder Natural Language Processing.
Bei allen unterstützten Managed Service for Apache Spark-Laufzeiten wird die Spark RAPIDS-Bibliothek jedem Arbeitslastknoten hinzugefügt. Mit der Version 1.1 der Managed Service for Apache Spark-Laufzeit 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 der Vorteile, wenn Sie GPUs mit Ihren Managed Service for Apache Spark-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 Machine Learning kann durch das Anhängen von GPUs die zum Trainieren von Modellen erforderliche Zeit erheblich verkürzt werden. So können Data Scientists und Entwickler 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 Anfangsinvestition, aber durch kürzere Verarbeitungszeiten und eine effizientere Ressourcenauslastung können Sie im Laufe der Zeit Kosten sparen.
Erweiterte Datenanalyse:Mit der GPU-Beschleunigung können Sie erweiterte Analysen wie Bild- und Videoanalyse und Natural Language Processing für große Datasets durchführen.
Verbesserte Produkte:Eine schnellere Verarbeitung ermöglicht eine schnellere Entscheidungsfindung und reaktionsfähigere Anwendungen.
Einschränkungen und Überlegungen
GPU-Beschleuniger sind mit der Premium-Preisstufe verfügbar.
Sie können NVIDIA A100- oder NVIDIA L4-GPUs an Batcharbeitslasten von Managed Service for Apache Spark anhängen. A100- und L4-Beschleuniger unterliegen der regionalen Verfügbarkeit von Compute Engine-GPUs.
Die XGBoost-Bibliothek wird nur für GPU-beschleunigte Arbeitslasten von Managed Service for Apache Spark bereitgestellt, wenn die Spark-Laufzeitversion 1.x von Managed Service for Apache Spark verwendet wird.
Für GPU-beschleunigte Batches mit XGBoost in Managed Service for Apache Spark gelten höhere Compute Engine-Kontingente. 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 mit Beschleunigern sind nicht mit der Organisationsrichtlinie
constraints/compute.requireShieldedVmkompatibel. Wenn Ihre Organisation diese Richtlinie erzwingt, können Jobs mit Beschleuniger nicht erfolgreich ausgeführt werden.Sie müssen den Standardzeichensatz auf UTF-8 festlegen, wenn Sie die RAPIDS-GPU-Beschleunigung mit unterstützten Managed Service for Apache Spark-Laufzeiten vor Version
2.2verwenden. Weitere Informationen finden Sie unter Serverlose Batch-Arbeitslast mit GPU-Beschleunigern erstellen.
Preise
GPU-Beschleuniger sind mit der Premium-Preisstufe verfügbar. Informationen zu den Preisen für Beschleuniger finden Sie unter Preise für Managed Service for Apache Spark.
Hinweis
Bevor Sie eine serverlose Batcharbeitslast mit angehängten GPU-Beschleunigern erstellen, führen Sie die folgenden Schritte aus:
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Compute Engine, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Compute Engine, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - Wechseln Sie in der Google Cloud Console unter „Cloud Storage“ zur Seite Buckets.
- Klicken Sie auf Erstellen.
- Geben Sie auf der Seite Bucket erstellen die Bucket-Informationen ein. Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.
-
Führen Sie im Abschnitt Einstieg die folgenden Schritte aus:
- Geben Sie einen global eindeutigen Namen ein, der den Anforderungen für Bucket-Namen entspricht.
- So fügen Sie ein Bucket-Label hinzu: Maximieren Sie den Bereich Labels (), klicken Sie auf add_box
Label hinzufügen und geben Sie
keyundvaluefür Ihr Label an.
-
Gehen Sie im Bereich Speicherort für Daten auswählen so vor:
- Standorttyp auswählen.
- Wählen Sie im Drop-down-Menü Standorttyp einen Standort aus, an dem die Daten Ihres Buckets dauerhaft gespeichert werden.
- Wenn Sie den Standorttyp Dual-Region auswählen, können Sie auch die Turboreplikation aktivieren, indem Sie das entsprechende Kästchen anklicken.
- Wenn Sie die Bucket-übergreifende Replikation einrichten möchten, wählen Sie Bucket-übergreifende Replikation über Storage Transfer Service hinzufügen aus und führen Sie die folgenden Schritte aus:
Bucket-übergreifende Replikation einrichten
- Wählen Sie im Menü Bucket einen Bucket aus.
Klicken Sie im Bereich Replikationseinstellungen auf Konfigurieren, um die Einstellungen für den Replikationsjob zu konfigurieren.
Der Bereich Bucket-übergreifende Replikation konfigurieren wird angezeigt.
- Wenn Sie die zu replizierenden Objekte nach dem Objektnamenspräfix filtern möchten, geben Sie ein Präfix ein, mit dem Sie Objekte ein- oder ausschließen möchten, und klicken Sie dann auf Präfix hinzufügen.
- Wenn Sie eine Speicherklasse für die replizierten Objekte festlegen möchten, wählen Sie im Menü Speicherklasse eine Speicherklasse aus. Wenn Sie diesen Schritt überspringen, wird für replizierte Objekte standardmäßig die Speicherklasse des Ziel-Buckets verwendet.
- Klicken Sie auf Fertig.
-
Gehen Sie im Bereich Speicherort für Daten auswählen so vor:
- Wählen Sie eine Standardspeicherklasse für den Bucket oder Autoclass für die automatische Speicherklassenverwaltung der Daten Ihres Buckets aus.
- Wenn Sie den hierarchischen Namespace aktivieren möchten, wählen Sie im Bereich Speicher für datenintensive Arbeitslasten optimieren die Option Hierarchischen Namespace für diesen Bucket aktivieren aus.
- Wählen Sie im Abschnitt Zugriff auf Objekte steuern aus, ob der Bucket Verhinderung des öffentlichen Zugriffs durchsetzt, und wählen Sie eine Zugriffssteuerungsmethode für die Objekte Ihres Buckets aus.
-
Führen Sie im Bereich Auswählen, wie Objektdaten geschützt werden die folgenden Schritte aus:
- Wählen Sie unter Datenschutz die gewünschten Optionen für Ihren Bucket aus.
- Klicken Sie zum Aktivieren des vorläufigen Löschens das Kästchen Richtlinie für vorläufiges Löschen (zur Datenwiederherstellung) an und geben Sie die Anzahl der Tage an, die Sie Objekte nach dem Löschen aufbewahren möchten.
- Wenn Sie die Objektversionsverwaltung festlegen möchten, klicken Sie das Kästchen Objektversionsverwaltung (zur Versionsverwaltung) an und geben Sie die maximale Anzahl von Versionen pro Objekt und die Anzahl der Tage an, nach denen die nicht aktuellen Versionen ablaufen.
- Klicken Sie das Kästchen Aufbewahrung (zur Einhaltung von Vorschriften) an, um die Aufbewahrungsrichtlinie für Objekte und Buckets zu aktivieren, und gehen Sie dann so vor:
- Klicken Sie auf das Kästchen Objektaufbewahrung aktivieren, um die Objektaufbewahrungssperre zu aktivieren.
- Wenn Sie Bucket Lock aktivieren möchten, klicken Sie das Kästchen Bucket-Aufbewahrungsrichtlinie festlegen an und wählen Sie eine Zeiteinheit und eine Zeitdauer für die Aufbewahrungsdauer aus.
- Um auszuwählen, wie Ihre Objektdaten verschlüsselt werden, maximieren Sie den Bereich Datenverschlüsselung () und wählen Sie eine Methode für die Datenverschlüsselung aus.
- Wählen Sie unter Datenschutz die gewünschten Optionen für Ihren Bucket aus.
-
Führen Sie im Abschnitt Einstieg die folgenden Schritte aus:
- Klicken Sie auf Erstellen.
Serverlose Batcharbeitslast mit GPU-Beschleunigern erstellen
Senden Sie eine Batcharbeitslast für Managed Service for Apache Spark, die NVIDIA L4-GPUs verwendet, um eine parallelisierte PySpark-Aufgabe auszuführen. Führen Sie die folgenden Schritte mit der gcloud CLI aus:
Klicken Sie auf Expand me (Einblenden) und erstellen und speichern Sie dann den aufgeführten PySpark-Code in einer
test-py-spark-gpu.py-Datei auf Ihrem lokalen Computer mit einem Text- oder Code-Editor.#!/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 Managed Service for Apache Spark mit fünf Workern zu senden, wobei jeder Worker 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
Hinweise:
- 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::Alle unterstützten Managed Service for Apache Spark-Laufzeiten fügen jedem Knoten einer GPU-beschleunigten Arbeitslast die RAPIDS-Bibliothek hinzu. 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-8undspark.executorEnv.LANG=C.UTF-8(bei Laufzeitversionen vor2.2erforderlich): Mit diesen Attributen wird der Standardzeichensatz auf C.UTF-8 festgelegt.spark.dataproc.executor.compute.tier=premium(erforderlich): GPU-beschleunigte Arbeitslasten werden mit Premium-Data Compute Units (DCUs) abgerechnet. Weitere Informationen finden Sie unter Preise für Beschleuniger für Managed Service for Apache Spark.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 darf 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-40A100 80GB a100-80spark.executor.instances=5(erforderlich): Muss mindestens zwei sein. In diesem Beispiel auf „5“ festgelegt.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,48oder96. 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 haben eine1-GPU.spark.dataproc.executor.disk.size(erforderlich): L4-GPUs haben eine feste Festplattengröße von 375 GB, mit Ausnahme von Konfigurationen mit24,48oder96Kernen, die750,1,500bzw.3,000GB 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(eingeschränkt): Sie können den Arbeitsspeicher festlegen, aber nicht memoryOverhead. Die Menge des verfügbaren Arbeitsspeichers, die nicht von der festgelegten Property belegt wird, wird auf die nicht festgelegte Property angewendet.spark.executor.memoryOverheadist für PySpark-Batcharbeitslasten auf 40% des verfügbaren Arbeitsspeichers und für andere Arbeitslasten auf 10% festgelegt (siehe Spark-Eigenschaften für die Ressourcenzuweisung).In der folgenden Tabelle sehen Sie die maximale Menge an Arbeitsspeicher, die für verschiedene A100- und L4-GPU-Konfigurationen festgelegt werden kann. Der Mindestwert für beide Eigenschaften ist
1024MB.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 Arbeitsspeicher insgesamt (MB) 78040 165080 13384 26768 40152 53536 113072 160608 321216 Spark RAPIDS-Attribute (optional): Standardmäßig legt Managed Service for Apache Spark die folgenden Spark RAPIDS-Attributwerte fest:
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.RapidsShuffleManagerfest, 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-Properties finden Sie unter RAPIDS Accelerator for Apache Spark Configuration und zum Festlegen von erweiterten Spark-Properties unter RAPIDS Accelerator for Apache Spark Advanced Configuration.