Sie können GPU-Beschleuniger an Ihre Managed Service for Apache Spark-Batcharbeitslasten anhängen, um die folgenden Ergebnisse zu erzielen:
Beschleunigen Sie die Verarbeitung umfangreicher Arbeitslasten für die Datenanalyse.
Modelltraining für große Datasets mit GPU-Bibliotheken für maschinelles Lernen beschleunigen
Führen Sie erweiterte Datenanalysen durch, z. B. Video- oder Natural Language Processing.
Alle unterstützten Managed Service for Apache Spark-Laufzeiten fügen jedem Arbeitslastknoten die NVIDIA cuDF for Apache Spark-Bibliothek hinzu. In der Managed Service for Apache Spark-Laufzeitversion 1.1 wird außerdem 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, die sich ergeben, wenn Sie GPUs mit Ihren Managed Service for Apache Spark-Arbeitslasten verwenden:
Leistungsverbesserung: Die GPU-Beschleunigung kann die Leistung von Spark-Arbeitslasten erheblich steigern, insbesondere bei rechenintensiven Aufgaben wie Machine Learning und Deep Learning, Grafikverarbeitung und komplexen Analysen.
Schnelleres Modelltraining: Bei Aufgaben des maschinellen Lernens kann das Anhängen von GPUs die Zeit für das Training von Modellen drastisch reduzieren. 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: Obwohl GPUs eine Anfangsinvestition erfordern, können Sie im Laufe der Zeit aufgrund kürzerer Verarbeitungszeiten und einer effizienteren Ressourcennutzung Kosteneinsparungen erzielen.
Erweiterte 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: Eine schnellere Verarbeitung ermöglicht eine schnellere Entscheidungsfindung und responsivere 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. 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 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.
Beschleunigerfähige Jobs sind nicht mit der Organisationsrichtlinie
constraints/compute.requireShieldedVmkompatibel. Wenn Ihre Organisation diese Richtlinie erzwingt, werden die Jobs mit Beschleuniger nicht erfolgreich ausgeführt.Sie müssen den Standardzeichensatz auf UTF-8 festlegen, wenn Sie die CUDA-X-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 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
Bevor Sie eine serverlose Batch-Arbeitslast mit angehängten GPU-Beschleunigern erstellen, müssen Sie Folgendes tun:
- 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 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:
- Standorttyp auswählen.
- 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, verwenden die replizierten Objekte standardmäßig die Speicherklasse des Ziel-Buckets.
- 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 Abschnitt 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 die Verhinderung des öffentlichen Zugriffs durchsetzt, und wählen Sie eine Zugriffssteuerungsmethode für die Objekte Ihres Buckets aus.
-
Gehen Sie im Bereich Auswählen, wie Objektdaten geschützt werden so vor:
- Wählen Sie unter Datenschutz die Optionen aus, die Sie für Ihren Bucket festlegen möchten.
- Wenn Sie das vorläufige Löschen aktivieren möchten, klicken Sie auf das Kästchen Richtlinie für vorläufiges Löschen (zur Datenwiederherstellung) und geben Sie die Anzahl der Tage an, die Objekte nach dem Löschen aufbewahrt werden sollen.
- Klicken Sie zum Festlegen der Objektversionsverwaltung 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 auf das Kästchen Aufbewahrung (für Compliance) und gehen Sie so vor:
- Klicken Sie zum Aktivieren der Objektaufbewahrungssperre auf das Kästchen Objektaufbewahrung aktivieren.
- Wenn Sie die Bucket-Sperre aktivieren möchten, klicken Sie auf das Kästchen Bucket-Aufbewahrungsrichtlinie festlegen 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 Optionen aus, die Sie für Ihren Bucket festlegen möchten.
-
Führen Sie im Abschnitt Einstieg die folgenden Schritte aus:
- 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 die folgenden Schritte mit der gcloud CLI aus:
Klicken Sie auf Maximieren und erstellen und speichern Sie dann den aufgeführten PySpark-Code 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 von 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 zum Ausführen der Arbeitslast.
- 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 NVIDIA cuDF for Apache Spark-Bibliothek hinzu. Nur die Laufzeitversion 1.1 fügt die XGBoost-Bibliothek jedem Knoten einer GPU-beschleunigten Arbeitslast hinzu.
--properties (siehe Spark-Ressourcenzuweisungsattribute) :
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. Siehe Preise für Beschleuniger für Managed Service for Apache Spark.spark.dataproc.executor.disk.tier=premium(erforderlich): Knoten mit A100-40-, A100-80- oder L4-Beschleunigern müssen die Premium-Laufwerkstufe verwenden.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 „5“ fest.spark.executor.cores(optional): Sie können diese Property festlegen, um die Anzahl der Kern-vCPUs anzugeben. Gültige Werte für L4-GPUs sind4(Standard) oder8,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 zugeordnet. An alle anderen Konfigurationen ist1GPU angehängt.spark.dataproc.executor.disk.size(erforderlich): L4-GPUs haben eine feste Laufwerksgröß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 375g, 750g, 1500g, 3000g, 6000g und 9000g.spark.executor.memory(optional) undspark.executor.memoryOverhead(eingeschränkt): Sie können „memory“, aber nicht „memoryOverhead“ festlegen. Die Menge des verfügbaren Arbeitsspeichers, der nicht von der festgelegten Property verbraucht 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-Ressourcenzuweisungsattribute).In der folgenden Tabelle ist die maximale Speichermenge aufgeführt, die für verschiedene A100- und L4-GPU-Konfigurationen festgelegt werden kann. Der Mindestwert für beide Attribute beträgt
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 NVIDIA cuDF for Apache Spark-Bibliotheksattribute (optional): Standardmäßig legt Managed Service for Apache Spark die folgenden NVIDIA cuDF for Apache Spark-Bibliotheksattributwerte 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 CUDA-X-Shuffle-Manager zu aktivieren, wenn GPUs verwendet werden, um die Leistung zu verbessern. Legen Sie dazuspark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManagerfest, wenn Sie eine Arbeitslast einreichen.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)
Unter NVIDIA cuDF-Plug-in für Apache Spark-Konfiguration finden Sie Informationen zum Festlegen von NVIDIA cuDF für Apache Spark-Bibliothekseigenschaften und unter NVIDIA cuDF-Plug-in für Apache Spark-Erweiterte Konfiguration zum Festlegen von erweiterten Spark-Eigenschaften.