Verwenden Sie den Nvidia Spark-Rapids Accelerator für Spark - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie den Nvidia Spark-Rapids Accelerator für Spark

Mit der Amazon EMR-Version 6.2.0 und höher können Sie das RAPIDS Accelerator for Apache Spark-Plugin von Nvidia verwenden, um Spark mithilfe von EC2-Grafikprozessorinstanztypen (GPU) zu beschleunigen. Rapids Accelerator beschleunigt Ihre Apache Spark 3.0-Data-Science-Pipelines ohne Codeänderungen, beschleunigt die Datenverarbeitung und das Modelltraining und senkt gleichzeitig die Infrastrukturkosten erheblich.

Die folgenden Abschnitte führen Sie durch die Konfiguration Ihres EMR-Clusters für die Verwendung des Spark-Rapids-Plug-ins für Spark.

Instanztypen wählen

Um das Nvidia Spark-Rapids-Plugin für Spark verwenden zu können, müssen die Core- und Task-Instance-Gruppen EC2-GPU-Instanztypen verwenden, die den Hardwareanforderungen von Spark-Rapids entsprechen. Eine vollständige Liste der von EMR unterstützten GPU-Instance-Typen finden Sie unter Unterstützte Instance-Typen im Amazon EMR Management Guide. Der Instanztyp für die Master-Instanzgruppe kann entweder GPU-Typen oder Nicht-GPU-Typen sein, ARM-Instanztypen werden jedoch nicht unterstützt.

Richten Sie Anwendungskonfigurationen für Ihren Cluster ein

1. Aktivieren Sie Amazon EMR, um die Plugins auf Ihrem neuen Cluster zu installieren

Um Plugins zu installieren, geben Sie beim Anlegen Ihres Clusters die folgende Konfiguration an:

{ "Classification":"spark", "Properties":{ "enableSparkRapids":"true" } }

2. YARN für die Verwendung von GPU konfigurieren

Einzelheiten zur Verwendung von GPU auf YARN finden Sie unter Using GPU on YARN in der Apache Hadoop-Dokumentation. Hier ist eine Beispielkonfiguration:

{ "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.resource-plugins":"yarn.io/gpu", "yarn.resource-types":"yarn.io/gpu", "yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices":"auto", "yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables":"/usr/bin", "yarn.nodemanager.linux-container-executor.cgroups.mount":"true", "yarn.nodemanager.linux-container-executor.cgroups.mount-path":"/sys/fs/cgroup", "yarn.nodemanager.linux-container-executor.cgroups.hierarchy":"yarn", "yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor" } }, { "Classification":"container-executor", "Properties":{ }, "Configurations":[ { "Classification":"gpu", "Properties":{ "module.enabled":"true" } }, { "Classification":"cgroups", "Properties":{ "root":"/sys/fs/cgroup", "yarn-hierarchy":"yarn" } } ] }

3. Spark für die Verwendung von RAPIDS konfigurieren

Hier sind die erforderlichen Konfigurationen, damit Spark das RAPIDS-Plugin verwenden kann:

{ "Classification":"spark-defaults", "Properties":{ "spark.plugins":"com.nvidia.spark.SQLPlugin", "spark.sql.sources.useV1SourceList":"", "spark.executor.resource.gpu.discoveryScript":"/usr/lib/spark/scripts/gpu/getGpusResources.sh", "spark.executor.extraLibraryPath":"/usr/local/cuda/targets/x86_64-linux/lib:/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/compat/lib:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native" } }

Die XGBoost4J-Spark-Bibliothek in der XGBoost-Dokumentation ist auch verfügbar, wenn das Spark RAPIDS-Plugin in Ihrem Cluster aktiviert ist. Sie können die folgende Konfiguration verwenden, um XGBoost in Ihren Spark-Job zu integrieren:

{ "Classification":"spark-defaults", "Properties":{ "spark.submit.pyFiles":"/usr/lib/spark/jars/xgboost4j-spark_3.0-1.0.0-0.2.0.jar" } }

Weitere Spark-Konfigurationen, die Sie zum Tunen eines GPU-beschleunigten EMR-Clusters verwenden können, finden Sie im Tuning-Guide für Rapids Accelerator for Apache Spark in der NVIDIA.github.io-Dokumentation.

4. YARN Capacity Scheduler konfigurieren

DominantResourceCalculatormuss konfiguriert werden, um GPU-Scheduling und -Isolierung zu aktivieren. Weitere Informationen finden Sie unter Using GPU on YARN in der Apache Hadoop-Dokumentation.

{ "Classification":"capacity-scheduler", "Properties":{ "yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator" } }

5. Erstellen Sie eine JSON-Datei, die all Ihre Konfigurationen enthält

Sie können eine JSON-Datei erstellen, die Ihre Konfiguration für die Verwendung des RAPIDS-Plug-ins für Ihren Spark Cluster enthält. Sie stellen die Datei später bereit, wenn Sie Ihren Cluster starten.

Die Datei kann lokal oder auf S3 gespeichert werden. Weitere Informationen zur Bereitstellung von Anwendungskonfigurationen für Ihre Cluster finden Sie unterKonfigurieren von Anwendungen.

Nachfolgend sehen Sie eine Beispieldatei mit dem Namenmy-configurations.json. Sie können es als Vorlage verwenden, um mit der Erstellung Ihrer eigenen Konfigurationen zu beginnen.

[ { "Classification":"spark", "Properties":{ "enableSparkRapids":"true" } }, { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.resource-plugins":"yarn.io/gpu", "yarn.resource-types":"yarn.io/gpu", "yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices":"auto", "yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables":"/usr/bin", "yarn.nodemanager.linux-container-executor.cgroups.mount":"true", "yarn.nodemanager.linux-container-executor.cgroups.mount-path":"/sys/fs/cgroup", "yarn.nodemanager.linux-container-executor.cgroups.hierarchy":"yarn", "yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor" } }, { "Classification":"container-executor", "Properties":{ }, "Configurations":[ { "Classification":"gpu", "Properties":{ "module.enabled":"true" } }, { "Classification":"cgroups", "Properties":{ "root":"/sys/fs/cgroup", "yarn-hierarchy":"yarn" } } ] }, { "Classification":"spark-defaults", "Properties":{ "spark.plugins":"com.nvidia.spark.SQLPlugin", "spark.sql.sources.useV1SourceList":"", "spark.executor.resource.gpu.discoveryScript":"/usr/lib/spark/scripts/gpu/getGpusResources.sh", "spark.executor.extraLibraryPath":"/usr/local/cuda/targets/x86_64-linux/lib:/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/compat/lib:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native", "spark.submit.pyFiles":"/usr/lib/spark/jars/xgboost4j-spark_3.0-1.0.0-0.2.0.jar", "spark.rapids.sql.concurrentGpuTasks":"1", "spark.executor.resource.gpu.amount":"1", "spark.executor.cores":"2", "spark.task.cpus":"1", "spark.task.resource.gpu.amount":"0.5", "spark.rapids.memory.pinnedPool.size":"0", "spark.executor.memoryOverhead":"2G", "spark.locality.wait":"0s", "spark.sql.shuffle.partitions":"200", "spark.sql.files.maxPartitionBytes":"512m" } }, { "Classification":"capacity-scheduler", "Properties":{ "yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator" } } ]

Fügen Sie eine Bootstrap-Aktion für Ihren Cluster hinzu

Um YARN auf der GPU verwenden zu können, müssen Sie die cgroups-Berechtigungen für YARN auf Ihrem Cluster öffnen. Dies kann mithilfe eines EMR-Bootstrap-Aktionsskripts erfolgen.

Weitere Informationen zur Bereitstellung von Bootstrap-Aktionsskripten bei der Erstellung Ihres Clusters finden Sie unter Grundlagen der Bootstrap-Aktionen im Amazon EMR Management Guide.

Ein Beispielskript mit dem Namenmy-bootstap-action.sh:

#!/bin/bash set -ex sudo chmod a+rwx -R /sys/fs/cgroup/cpu,cpuacct sudo chmod a+rwx -R /sys/fs/cgroup/devices

Starten Sie Ihren Cluster.

Der letzte Schritt besteht darin, Ihren Cluster mit den oben genannten Cluster-Konfigurationen zu starten. Hier ist ein Beispielbefehl zum Starten eines Clusters über EMR-CLI:

aws emr create-cluster \ --release-label emr-6.2.0 \ --applications Name=Hadoop Name=Spark \ --service-role EMR_DefaultRole \ --ec2-attributes KeyName=my-key-pair,InstanceProfile=EMR_EC2_DefaultRole \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.4xlarge \ InstanceGroupType=CORE,InstanceCount=1,InstanceType=g4dn.2xlarge \ InstanceGroupType=TASK,InstanceCount=1,InstanceType=g4dn.2xlarge \ --configurations file:///my-configurations.json \ --bootstrap-actions Name='My Spark Rapids Bootstrap action',Path=s3://my-bucket/my-bootstrap-action.sh