Sie können Ihren Google Cloud Serverless for Apache Spark Batcharbeitslasten GPU-Beschleuniger anhängen, um folgende Ergebnisse zu erzielen:
Verarbeitung von umfangreichen Datenanalysearbeitslasten beschleunigen
Modelltraining für große Datasets mit GPU-Machine-Learning-Bibliotheken beschleunigen
Erweiterte Datenanalysen wie Video- oder Natural Language Processing durchführen
Bei allen unterstützten Serverless for Apache Spark-Spark-Laufzeiten wird die Spark RAPIDS-Bibliothek zu jedem Arbeitslastknoten hinzugefügt. Bei der Serverless for Apache Spark-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 Serverless for Apache Spark-Spark-Arbeitslasten verwenden:
Leistungssteigerung:Die GPU-Beschleunigung kann die Leistung von Spark-Arbeitslasten erheblich steigern, insbesondere bei rechenintensiven Aufgaben wie maschinelles Lernen und Deep Learning, Graphverarbeitung und komplexen Analysen.
Schnelleres Modelltraining:Bei Aufgaben des maschinellen Lernens kann das Anhängen von GPUs die Zeit, die zum Trainieren von Modellen erforderlich ist, erheblich verkürzen. So können Data Scientists und Data Engineers schnell iterieren und experimentieren.
Skalierbarkeit:Kunden können weitere GPU-Knoten oder leistungsstärkere GPUs zu Knoten hinzufügen, um immer komplexere Verarbeitungsanforderungen zu erfüllen.
Kosteneffizienz:Obwohl GPUs eine anfängliche Investition erfordern, können Sie im Laufe der Zeit Kosten sparen, da die Verarbeitungszeiten kürzer sind und die Ressourcen effizienter genutzt werden.
Verbesserte Datenanalyse:Mit der GPU-Beschleunigung können Sie erweiterte Analysen wie Bild- und Videoanalysen sowie Natural Language Processing 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
GPU-Beschleuniger sind mit dem Premium-Tarif verfügbar.
Sie können NVIDIA A100 oder NVIDIA L4-GPUs an Google Cloud Serverless 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 Serverless for Apache Spark GPU-beschleunigte Arbeitslasten bereitgestellt, wenn die Serverless for Apache Spark Spark-Laufzeitversion 1.x verwendet wird.
Für Serverless for Apache Spark-GPU-beschleunigte Batches mit XGBoost 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 Kontingent NVIDIA_L4_GPUS zuweisen.
Jobs mit Beschleunigern sind nicht mit der
constraints/compute.requireShieldedVmOrganisationsrichtlinie kompatibel. Wenn Ihre Organisation diese Richtlinie erzwingt, können Jobs mit Beschleunigern 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.2verwenden. Weitere Informationen finden Sie unter Serverlose Batcharbeitslast mit GPU-Beschleunigern erstellen.
Preise
GPU-Beschleuniger sind mit dem Premium-Tarif verfügbar. Informationen zu den Preisen für Beschleuniger finden Sie unter Serverless for Apache Spark-Preise.
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 noch kein Konto bei Google Cloudhaben, erstellen Sie ein Konto, um die Leistung 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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. 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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. 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.
-
Gehen Sie im Bereich Erste Schritte so vor:
- 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 einen
keyund einenvaluefür Ihr Label an.
-
Gehen Sie im Bereich Speicherort für Daten auswählen so vor:
- Wählen Sie einen Standorttyp aus.
- Wählen Sie im Drop-down-Menü Standorttyp einen Standort aus, an dem die Daten Ihres Buckets dauerhaft gespeichert werden sollen.
- 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 Bereich Zugriff auf Objekte steuern aus, ob der Bucket Verhinderung des öffentlichen Zugriffs durchsetzt, und wählen Sie eine Methode für die Zugriffssteuerung für die Objekte Ihres Buckets aus.
-
Gehen Sie im Bereich Auswählen, wie Objektdaten geschützt werden so vor:
- Wählen Sie eine der Optionen unter Datenschutz aus, die Sie
für Ihren Bucket festlegen möchten.
- Wenn Sie das vorläufige 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 aufbewahrt werden sollen.
- Wenn Sie die Objektversionsverwaltung festlegen möchten, klicken Sie das Kästchen Objektversionierung (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.
- Wenn Sie die Aufbewahrungsrichtlinie für Objekte und Buckets aktivieren möchten, klicken Sie das Kästchen Aufbewahrung (zur Compliance) an und gehen Sie so vor:
- Wenn Sie die Objektaufbewahrungssperre aktivieren möchten, klicken Sie das Kästchen Objektaufbewahrung aktivieren an.
- Wenn Sie die Bucket-Sperre aktivieren möchten, klicken Sie das Kästchen Aufbewahrungsrichtlinie für Bucket 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 Datenverschlüsselung Bereich () und wählen Sie eine Datenverschlüsselung Methode aus.
- Wählen Sie eine der Optionen unter Datenschutz aus, die Sie
für Ihren Bucket festlegen möchten.
-
Gehen Sie im Bereich Erste Schritte so vor:
- Klicken Sie auf Erstellen.
Serverlose Batcharbeitslast mit GPU-Beschleunigern erstellen
Senden Sie eine Serverless for Apache Spark-Batcharbeitslast, die NVIDIA L4 GPUs verwendet, um eine parallelisierte PySpark-Aufgabe auszuführen. Führen Sie dazu die folgenden Schritte mit der gcloud CLI aus:
Klicken Sie auf Maximieren und erstellen und speichern Sie dann den aufgeführten PySpark-Code in einer Datei
test-py-spark-gpu.pyauf Ihrem lokalen Computer. Verwenden Sie dazu einen Text- oder Codeeditor.#!/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() )
Senden Sie mit der gcloud CLI auf Ihrem lokalen Computer den serverlosen Batchjob von Serverless for Apache Spark mit fünf Workern, 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 zum Ausführen der Arbeitslast.
- BUCKET_NAME: Der Name Ihres Cloud Storage-Bucket Spark lädt Arbeitslastabhängigkeiten in einen Ordner
/dependenciesin 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 zu jedem Knoten einer GPU-beschleunigten Arbeitslast hinzugefügt. Nur bei Laufzeitversion 1.1 wird die XGBoost Bibliothek zu 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(erforderlich bei Laufzeitversionen vor2.2): 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 Serverless for Apache Spark Preise für Beschleuniger.spark.dataproc.executor.disk.tier=premium(erforderlich): Für Knoten mit A100-40-, A100-80- oder L4-Beschleunigern muss der Premium-Festplattentarif 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): Müssen mindestens zwei sein. Legen Sie für dieses Beispiel fünf fest.spark.executor.cores(optional): Mit diesem Attribut 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 Wert für A100-GPUs ist12. Bei Konfigurationen mit L4 GPUs und24,48oder96Kernen sind jedem Executor2,4oder8GPUs angehängt. Bei allen anderen Konfigurationen ist1GPU angehängt.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 dieses Attribut beim Senden 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 GB, 750 GB, 1.500 GB, 3.000 GB, 6.000 GB und 9.000 GB.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 durch das festgelegte Attribut verbraucht wird, wird auf das nicht festgelegte Attribut angewendet.spark.executor.memoryOverheadist für PySpark-Batcharbeitslasten auf 40% des verfügbaren Arbeitsspeichers und für andere Arbeitslasten auf 10% festgelegt (siehe Spark-Attribute für die Ressourcenzuweisung).In der folgenden Tabelle ist die maximale Arbeitsspeichermenge aufgeführt, 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 Serverless 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. Legen Sie dazu beim Senden einer Arbeitslastspark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManagerfest.spark.rapids.sql.concurrentGpuTasks= minimum of (gpuMemoryinMB/ 8, 4)spark.rapids.shuffle.multiThreaded.writer.threads= minimum of (cpu cores in the VM / gpu count per VM, 32)spark.rapids.shuffle.multiThreaded.reader.threads= minimum of (cpu cores in the VM / gpu count per VM, 32)
Informationen zum Festlegen von Spark RAPIDS-Attributen finden Sie unter RAPIDS Accelerator for Apache Spark Configuration. Informationen zum Festlegen erweiterter Spark-Attribute finden Sie unter RAPIDS Accelerator for Apache Spark Advanced Configuration .