使用 Nvidia 火花急流加速器进行火花 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Nvidia 火花急流加速器进行火花

借助 Amazon EMR 发行版 6.2.0 及更高版本,您可以使用 Nvidia 的急流Apache Spark 插件加速器使用 EC2 图形处理单元 (GPU) 实例类型加速 Spark。Rapids 加速器将 GPU 加速您的 Apache Spark 3.0 数据科学管道无需更改代码,并加快数据处理和模型培训,同时大幅降低基础设施成本。

以下部分将引导您完成配置 EMR 集群以使用 Spark 的火花急流插件。

选择实例类型

要将 Nvidia Sparkk-Rapids 插件用于 Spark,核心实例组和任务实例组必须使用符合硬件要求火花急流 要查看 EMR 支持的 GPU 实例类型的完整列表,请参阅支持的实例类型中的Amazon EMR 管理指南。主实例组的实例类型可以是 GPU 或非 GPU 类型,但不支持 ARM 实例类型。

为群集设置应用程序配置

1。启用 Amazon EMR 在您的新集群上安装插件

要安装插件,请在创建集群时提供以下配置:

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

2. 将纱线配置为使用 GPU

有关在 YarN 上使用 GPU 的详细信息,请参阅。在纱线上使用 GPU在 Apache Hadoop 文档中。下面是示例配置:

{ "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. 将火花配置为使用 RAPIDS

以下是启用 Spark 使用 RAPIDS 插件所需的配置:

{ "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" } }

XGBost4J 火花库当您的集群上启用 Spark RAPIDS 插件时,也可以使用。您可以使用以下配置将 XGBoost 与您的 Spark 作业集成:

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

有关可用于调整 GPU 加速 EMR 群集的其他 Spark 配置,请参阅急流加速器阿帕奇火花调整指南在 NVIDIA 文档中。

4. 配置 YARN 容量调度程序

DominantResourceCalculator必须配置为启用 GPU 调度和隔离。有关详细信息,请参阅。在纱线上使用 GPU在 Apache Hadoop 文档中。

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

5. 创建 JSON 文件以包含您的所有配置

您可以创建一个 JSON 文件,其中包含您的配置,以便为 Spark 集群使用 RAPIDS 插件。您稍后在启动集群时提供文件。

文件可以存储在本地或 S3 上。有关如何为群集提供应用程序配置的详细信息,请参阅配置应用程序

下面是一个名为my-configurations.json。您可以将其用作模板,以开始构建自己的配置。

[ { "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" } } ]

为您的集群添加引导操作

为了在 GPU 上使用 YARN,您需要在集群上打开对 YARN 的 cgroup 权限,这可以使用 EMR 引导操作脚本完成。

有关如何在创建集群时提供引导操作脚本的更多信息,请参阅。引导操作基础中的Amazon EMR 管理指南

下面是一个名为my-bootstap-action.json

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

启动集群

最后一步是使用上述群集配置启动您的集群。以下是一个通过 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