Managed Service for Apache Spark bietet die Möglichkeit, Grafikprozessoren (Graphics Processing Units, GPUs) zu den Master- und Worker-Knoten für Compute Engine in einem Managed Service for Apache Spark-Cluster hinzuzufügen. Sie können diese GPUs verwenden, um bestimmte Arbeitslasten wie maschinelles Lernen und Datenverarbeitung in Ihren Instanzen zu beschleunigen.
Weitere Informationen zu den Vorteilen von GPUs und den unterschiedlichen Arten von GPU-Hardware finden Sie unter GPUs in Compute Engine.
Hinweis
- GPUs erfordern spezielle Treiber und Software. Diese Elemente sind in Managed Service for Apache Spark-Images mit dem Suffix
-mlvorinstalliert (die Verwendung der-ml-Images wird empfohlen) und können bei Bedarf manuell installiert werden. - Lesen Sie mehr über die GPU-Preisgestaltung für Compute Engine, um zu erfahren, mit welchen Kosten die Nutzung von GPUs in Ihren Instanzen verbunden ist.
- Lesen Sie mehr über die Einschränkungen für Instanzen mit GPUs, um zu erfahren, wie sich diese Instanzen von Nicht-GPU-Instanzen unterscheiden.
- Prüfen Sie auf der Seite "Kontingente" für Ihr Projekt, ob ausreichend GPU-Kontingente (
NVIDIA_T4_GPUS,NVIDIA_P100_GPUSoderNVIDIA_V100_GPUS) vorhanden sind. Wenn auf der Seite "Kontingente" keine GPUs aufgeführt sind oder Sie zusätzliche GPU-Kontingente benötigen, können Sie eine Erhöhung des Kontingents beantragen.
GPU-Typen
Managed Service for Apache Spark-Knoten unterstützen die folgenden GPU-Typen. Sie müssen den GPU-Typ angeben, wenn Sie Ihrem Managed Service for Apache Spark-Cluster GPUs hinzufügen.
nvidia-tesla-l4– NVIDIA® Tesla® L4nvidia-tesla-a100– NVIDIA® Tesla® A100nvidia-tesla-p100– NVIDIA® Tesla® P100nvidia-tesla-v100– NVIDIA® Tesla® V100nvidia-tesla-p4– NVIDIA® Tesla® P4nvidia-tesla-t4– NVIDIA® Tesla® T4nvidia-rtx-pro-6000– NVIDIA® RTX® PRO 6000nvidia-tesla-p100-vws– NVIDIA® Tesla® P100 Virtual Workstationsnvidia-tesla-p4-vws– NVIDIA® Tesla® P4 Virtual Workstationsnvidia-tesla-t4-vws– NVIDIA® Tesla® T4 Virtual Workstations
GPUs einem Cluster hinzufügen
Wenn Sie einem Managed Service for Apache Spark-Cluster GPUs hinzufügen möchten, müssen Sie beim Erstellen des Clusters
entweder ein -ml-Image angeben (empfohlen) oder
eine Initialisierungsaktion verwenden, um GPU-Treiber zu installieren.
In den folgenden Beispielen wird beim Erstellen eines Clusters das
2.3-ml-ubuntu Image angegeben.
Google Cloud CLI
Wenn Sie dem Master-, den primären und den sekundären Worker-Knoten in einem Managed Service for Apache Spark-Cluster GPUs hinzufügen möchten, erstellen Sie den Cluster mit den gcloud dataproc clusters create
‑‑master-accelerator, ‑‑worker-accelerator und
‑‑secondary-worker-accelerator Flags. Diese Flags verwenden die
folgenden Werte:
- Der GPU-Typ, der dem Knoten hinzugefügt werden soll
- Die Anzahl der GPUs, die dem Knoten hinzugefügt werden sollen
Der GPU-Typ ist erforderlich, die Anzahl der GPUs ist optional (der Standardwert ist 1 GPU).
Beispiel :
gcloud dataproc clusters create cluster-name \ --image-version=2.3-ml-ubuntu \ --region=region \ --master-accelerator type=nvidia-tesla-t4 \ --worker-accelerator type=nvidia-tesla-t4,count=4 \ --secondary-worker-accelerator type=nvidia-tesla-t4,count=4 \ ... other flags
REST API
Wenn Sie dem Master-, den primären und den sekundären Worker-Knoten in einem Managed Service for Apache Spark-Cluster GPUs hinzufügen möchten, füllen Sie die
InstanceGroupConfig.AcceleratorConfig
acceleratorTypeUri und acceleratorCount Felder als Teil der
cluster.create
API-Anfrage aus. Diese Felder verwenden die
folgenden Werte:
- Der GPU-Typ, der dem Knoten hinzugefügt werden soll
- Die Anzahl der GPUs, die dem Knoten hinzugefügt werden sollen
Console
So fügen Sie dem Master-, den primären und den sekundären Worker-Knoten in einem Managed Service for Apache Spark-Cluster GPUs hinzu:
- Öffnen Sie die Seite Managed Service for Apache Spark-Cluster in Compute Engine erstellen.
- Wählen Sie den Bereich Knoten konfigurieren aus.
- Geben Sie in den Abschnitten Masterknoten, Worker-Knoten und Sekundäre Worker-Knoten unter CPU-Plattform und GPU > GPUs die Anzahl der GPUs und den GPU-Typ für die Knoten an.
GPU-Treiber installieren
Zum Verwenden von GPUs, die Managed Service for Apache Spark-Knoten hinzugefügt wurden, sind GPU-Treiber erforderlich.
Alternativ zu den in den Managed Service for Apache Spark-Images mit dem Suffix -ml installierten GPU-Treibern können Sie die folgenden Initialisierungsaktionen verwenden, um beim Erstellen eines Clusters GPU-Treiber zu installieren:
Installation des GPU-Treibers prüfen
Sie können die Installation des GPU-Treibers in einem Cluster prüfen, indem Sie eine SSH-Verbindung zum Cluster Masterknoten herstellen und dann den folgenden Befehl ausführen:
nvidia-smi
Wenn der Treiber ordnungsgemäß funktioniert, umfasst die Ausgabe die Treiberversion und die GPU-Statistiken (siehe Installieren des GPU-Treibers bestätigen).
Spark-Konfiguration
Wenn Sie einen Job senden an Spark,
können Sie die spark.executorEnv Spark-Konfiguration
Laufzeitumgebungseigenschaft
Eigenschaft mit der LD_PRELOAD Umgebungsvariablen verwenden, um die erforderlichen Bibliotheken vorzuladen.
Beispiel:
gcloud dataproc jobs submit spark --cluster=CLUSTER_NAME \ --region=REGION \ --class=org.apache.spark.examples.SparkPi \ --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \ --properties=spark.executorEnv.LD_PRELOAD=libnvblas.so,spark.task.resource.gpu.amount=1,spark.executor.resource.gpu.amount=1,spark.executor.resource.gpu.discoveryScript=/usr/lib/spark/scripts/gpu/getGpusResources.sh
Beispiel für GPU-Job
Sie können GPUs in Managed Service for Apache Spark testen, indem Sie einen der folgenden Jobs ausführen:
- Führen Sie eines der Spark ML-Beispiele aus.
- Führen Sie das folgende Beispiel mit
spark-shellaus, um eine Matrixberechnung durchzuführen:
import org.apache.spark.mllib.linalg._
import org.apache.spark.mllib.linalg.distributed._
import java.util.Random
def makeRandomSquareBlockMatrix(rowsPerBlock: Int, nBlocks: Int): BlockMatrix = {
val range = sc.parallelize(1 to nBlocks)
val indices = range.cartesian(range)
return new BlockMatrix(
indices.map(
ij => (ij, Matrices.rand(rowsPerBlock, rowsPerBlock, new Random()))),
rowsPerBlock, rowsPerBlock, 0, 0)
}
val N = 1024 * 4
val n = 2
val mat1 = makeRandomSquareBlockMatrix(N, n)
val mat2 = makeRandomSquareBlockMatrix(N, n)
val mat3 = mat1.multiply(mat2)
mat3.blocks.persist.count
println("Processing complete!")
Weitere Informationen
- Compute Engine-Instanz mit angehängten GPUs erstellen
- Mehr über GPU-Maschinentypen erfahren.