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 Amazon EMR Version 6.2.0 und höher können Sie die von Nvidia verwendenSTROMSCHNELLENAccelerator for Apache Spark-Plugin zur Beschleunigung von Spark mithilfe von EC2-GPU-Instance-Typen (Graphics Processing Unit). 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.

Wählen Sie Instance-Typen

Um das Nvidia Spark-Rapids-Plugin für Spark verwenden zu können, müssen die Core- und Task-Instance-Gruppen EC2-GPU-Instance-Typen verwenden, die denHardwareanforderungenvon Spark-Rapids. Eine vollständige Liste der von EMR unterstützten GPU-Instance-Typen finden Sie unterUnterstützte Instanztypenin derAmazon EMR-Verwaltungsleitfaden. Beim Instanztyp für die primäre Instanzgruppe kann es sich entweder um GPU- oder Nicht-GPU-Typen handeln, 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 bei der Erstellung Ihres Clusters die folgende Konfiguration an:

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

2. YARN so konfigurieren, dass es GPU verwendet

Einzelheiten zur Verwendung von GPU auf YARN finden Sie unterGPU auf YARN verwendenin 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" } }

XGBoost4J-Spark-Bibliothekin XGBoost ist die Dokumentation 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.4.2-0.3.0.jar" } }

Weitere Spark-Konfigurationen, mit denen Sie einen GPU-beschleunigten EMR-Cluster optimieren können, finden Sie in derLeitfaden zur Optimierung von Rapids Accelerator für Apache Sparkin der Nvidia.Github.io-Dokumentation.

4. YARN Capacity Scheduler konfigurieren

DominantResourceCalculatormuss so konfiguriert sein, dass GPU-Scheduling und -Isolierung aktiviert sind. Weitere Informationen finden Sie unterGPU auf YARN verwendenin 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 alle 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 unterAnwendungen konfigurieren.

Im Folgenden finden 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.4.2-0.3.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 in Ihrem Cluster öffnen. Dies kann mithilfe eines EMR-Bootstrap-Aktionsskripts erfolgen.

Weitere Informationen zur Bereitstellung von Bootstrap-Aktionsskripten beim Erstellen Ihres Clusters finden Sie unterGrundlagen der Bootstrap-Aktionin derAmazon EMR-Verwaltungsleitfaden.

Hier ist 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 Clusterkonfigurationen zu starten. Hier ist ein Beispielbefehl zum Starten eines Clusters über die EMR-CLI:

aws emr create-cluster \ --release-label emr-6.2.0 \ --applications Name=Hadoop Name=Spark \ --service-role EMR_DefaultRole_V2 \ --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