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 im großen Maßstab beschleunigen
Modelltraining für große Datasets mit GPU-Bibliotheken für maschinelles Lernen beschleunigen
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 Managed Service for Apache Spark-Laufzeit Version 1.1 wird auch die XGBoost-Bibliothek zu Arbeitslastknoten 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-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. 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 den steigenden Anforderungen an die Verarbeitung gerecht zu werden.
Kosteneffizienz:GPUs erfordern zwar eine anfängliche Investition, aber Sie können im Laufe der Zeit Kosten sparen, da die Verarbeitungszeiten kürzer sind und die Ressourcen effizienter genutzt werden.
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:Eine schnellere Verarbeitung ermöglicht eine schnellere Entscheidungsfindung und reaktionsfähigere Anwendungen.
Einschränkungen und Überlegungen
GPU-Beschleuniger sind in der Premium-Preisstufe verfügbar.
Sie können NVIDIA A100- oder NVIDIA L4-GPUs an Managed Service for 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 Managed Service for Apache Spark bereitgestellt, wenn die Spark-Laufzeitversion 1.x von Managed Service for Apache Spark verwendet wird.
Für GPU-beschleunigte Batchvorgänge 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 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 Managed Service for Apache Spark-Laufzeiten vor Version
2.2verwenden. Weitere Informationen finden Sie unter Serverlose Batcharbeitslast mit GPU-Beschleunigern erstellen.
Preise
GPU-Beschleuniger sind in der Premium-Preisstufe verfügbar. Informationen zu den Preisen für Beschleuniger finden Sie unter Preise für Managed Service for Apache Spark.
Hinweis
Führen Sie die folgenden Schritte aus, bevor Sie eine serverlose Batcharbeitslast mit angehängten GPU-Beschleunigern erstellen:
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch 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.
-
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.
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.-
Installieren Sie die 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 den 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.
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.
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.-
Installieren Sie die 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 den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
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 Verwaltung der Speicherklassen Ihrer Bucket-Daten 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 erzwingt, 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.
- Wenn Sie Vorläufiges Löschen aktivieren möchten, klicken Sie das Kästchen Richtlinie für vorläufiges Löschen (zur Datenwiederherstellung) an und geben Sie die Anzahl der Tage an, die Objekte nach dem Löschen beibehalten werden sollen.
- 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 auf das Kästchen Aufbewahrung (zur Einhaltung von Vorschriften), 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.
- Wenn Sie auswählen möchten, 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 Batch-Arbeitslast mit GPU-Beschleunigern erstellen
Senden Sie eine Batcharbeitslast für Managed Service for Apache Spark, 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:
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 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::Bei allen unterstützten Managed Service 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-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-DCUs (Data Compute Units) abgerechnet. Weitere Informationen finden Sie unter Beschleunigerpreise 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) oder8,12,16,24,48oder96. Der einzige gültige und Standardwert für A100-GPUs ist12. Konfigurationen mit L4-GPUs und24-,48- oder96-Kernen haben2,4oder8GPUs, die an jeden Executor angehängt sind. Alle anderen Konfigurationen haben1GPU.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,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-GPU mit 40 GB oder 80 GB 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 auf 40% des verfügbaren Arbeitsspeichers für PySpark-Batcharbeitslasten und auf 10% für andere Arbeitslasten festgelegt (siehe Spark-Eigenschaften für die Ressourcenzuweisung).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
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 Gesamtspeicher (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 einreichen.spark.rapids.sql.concurrentGpuTasks= minimum of (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-Konfiguration und zum Festlegen von erweiterten Spark-Properties unter Erweiterte Konfiguration von RAPIDS Accelerator for Apache Spark.