YARN 3 和 Spark:分配 GPU

YARN 3 和 Spark:分配 GPU

我找不到需要带有 GPU 的执行器的可用 Spark 选项。

我正在尝试设置一个 HADOOP 集群,以便通过 Spark 在可用的 GPU 上运行机器学习算法。

到目前为止,我正在用一个最小集群(1 个资源管理器和 2 个节点管理器(每个有 8 个核、32Gb RAM、1 个 Nvidia GPU))尝试我的设置,每个人都运行 Ubuntu 18.04。

资源发现工作正常(我看到了 16 个核心、56Gb 内存和 2 个 yarn.io/gpu)

文档提供了一种方法,即使用“--conf spark.yarn.executor.resource.yarn.io/gpu=1”,但这对我来说不起作用(根本没有效果,无论是在 spark-submit 命令参数中还是在 $SPARK_CONF/metrics.properties 中)。

由于 YARN 3 是第一个提供 GPU 隔离的版本,我尽量避免回滚到旧版本(/更有文档记录的版本)。

我猜这可以通过 SparkContext 在代码中设置,并且很高兴知道如何设置,但由于我更偏向于管理员而不是 ML 工程师,所以我宁愿一劳永逸地在 conf 文件中设置它。无论如何,在这一点上,任何解决方案都会受到赞赏。

有谁乐意提供良好的语法来分配启用资源隔离的 GPU 吗?

爱你们,凯文

(HortonWorks HDP 上的 Yarn 3.1.1/3.2.0)

答案1

从 Hadoop 3.0.0 开始,Spark 不再需要太多 YARN 资源(据说 Spark 可以与 Hadoop 2.6+ 配合使用,但隐含的意思是“3.0 及以下版本除外”),因此,一种解决方法是设置yarn.resource-types.yarn.io/gpu.minimum-allocation到 1,并从我的 Python 代码中取消执行器命令(spark 不会在命令行要求 0 执行器的情况下启动 AM)

sc = SparkContext(conf=SparkConf().setAppName("GPU on AM only").set("spark.executor.instances", 0))

虽然不太好看,但是对于我们当前的工作负载来说已经足够了,希望很快能推出“Spark for Hadoop 3.0+”发行版。

编辑:您可以编译 SparkHadoop 3.1 配置文件,从其 GitHub 存储库的当前状态,然后您可以访问spark.yarn..resource.yarn.io/gpu特性 !

我也会在这里分享我关于隔离的发现:

经过大约 2 周的各种尝试,我们最终决定彻底清除每个主机,从头开始进行全新安装。 ​仍然没有任何效果。 ​ ​然后我们尝试了“一个工作者”设置,手动设置可计数资源以尝试分配机制,然后…… ​没有 Horton 工作! ​ ​但我当时谷歌搜索更合适。 ​这似乎是与 Hadoop 相关的自定义资源和 CapacityScheduler 问题,请欣赏:

https://issues.apache.org/jira/browse/YARN-9161 https://issues.apache.org/jira/browse/YARN-9205

目前 (3.1.1/3.2.0),capacity.CapacityScheduler 被一个仅包含 vCores 和 RAM 参数的硬编码枚举破坏。您只需将调度程序类切换为 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler 您还需要在 yarn.scheduler.fair.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator 行中将“capacity”替换为“Fair”

您的 GPU 在 yarn ui2 上不可见,但仍在 NodeManager 上,最重要的是,将得到正确分配。这确实很乱。

相关内容