Sie können Ihren Managed Service for Apache Spark-Batcharbeitslasten GPU-Beschleuniger anhängen, um Folgendes zu erreichen:
Verarbeitung von Arbeitslasten für die Analyse großer Datenmengen 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 zu jedem Arbeitslastknoten hinzugefügt. Bei der Managed Service for Apache Spark-Laufzeit version 1.1 wird auch die XGBoost library zu den 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, Graphverarbeitung und komplexen Analysen.
Schnelleres Modelltraining:Bei Aufgaben für maschinelles Lernen 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 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 Managed Service for Apache Spark -Arbeitslasten bereitgestellt, wenn die Managed Service for Apache Spark -Laufzeitversion 1.x verwendet wird.
Für GPU-beschleunigte Managed Service for Apache Spark-Batches mit XGBoost werden höhere 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 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 mit dem Premium-Tarif verfügbar. Informationen zu den Preisen für Beschleuniger finden Sie unter Managed Service for Apache Spark – Preise.
Hinweis
Führen Sie vor dem Erstellen einer serverlosen Batcharbeitslast mit angehängten GPU-Beschleunigern die folgenden Schritte aus:
- Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch nicht mit Google Cloudvertraut sind, 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 Abschnitt 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 Abschnitt Labels (),
klicken Sie auf add_box
Label hinzufügen und geben Sie einen
keyund einenvaluefür Ihr Label an.
-
Gehen Sie im Abschnitt 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 Abschnitt 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 Abschnitt Speicher für datenintensive Arbeitslasten optimieren die Option Hierarchischen Namespace für diesen Bucket aktivieren aus.
- Im Abschnitt Zugriff auf Objekte steuern wählen Sie aus, ob der Bucket Verhinderung des öffentlichen Zugriffs durchsetzt, und wählen Sie eine Methode zur Zugriffssteuerung für die Objekte Ihres Buckets aus.
-
Gehen Sie im Abschnitt Objektdaten schützen 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 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.
- Wenn Sie die Aufbewahrungsrichtlinie für Objekte und Buckets aktivieren möchten, klicken Sie das Kästchen Aufbewahrung (für 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.
- Wenn Sie auswählen möchten, wie Ihre Objektdaten verschlüsselt werden sollen, maximieren Sie den Datenverschlüsselung-Abschnitt () 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 Abschnitt Erste Schritte so vor:
- Klicken Sie auf Erstellen.
Serverlose Batcharbeitslast mit GPU-Beschleunigern erstellen
Senden Sie eine Managed Service 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 Managed Service for Apache Spark-Batchjob 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 Managed Service 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 Managed Service 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. In diesem Beispiel ist der Wert auf fünf festgelegt.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 Standardwert 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 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. Setzen Sie dazuspark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager, wenn Sie eine Arbeitslast senden.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 .