YARN 3和Spark:分配GPU


1

我找不到有效的Spark选项来要求执行者使用GPU。

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

到目前为止,我正在尝试使用最小的群集(1个资源管理器和2个节点管理器(每个具有8cores,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上的纱线3.1.1 / 3.2.0)

Answers:


0

由于从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))

难看但足以应付我们当前的工作负载,希望尽快发布“适用于Hadoop 3.0+的Spark”。

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

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

经过大约2周的各种尝试,我们终于确定要彻底清除每台主机,以从头开始进行全新安装。仍然没有任何效果。然后,我们尝试了一个``单一工作人员''设置来手动设置可数资源以尝试分配机制,然后.... 但是我的谷歌搜索当时更适合。``这似乎是有关自定义资源和CapacityScheduler的Hadoop相关问题,请享受:

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

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

您的GPU将在yarn ui2上不可见,但仍将在NodeManagers上,最重要的是,将正确分配它们。确实是一团糟。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.