首页 文章

如何在Spark群集中分配任务?

提问于
浏览
4

所以我有一个输入,包括数据集和几个ML算法(带参数调整)使用scikit-learn . 我已经尝试了很多关于如何尽可能高效地执行此操作的尝试,但是在这个时刻我仍然没有适当的基础设施来评估我的结果 . 但是,我在这方面缺乏一些背景知识,我需要帮助才能解决问题 .

基本上我想知道如何以尽可能多地利用所有可用资源的方式分配任务,以及实际上隐含地执行什么(例如通过Spark)以及什么不是 .

这是我的情景:
enter image description here

我需要训练许多不同的决策树模型(尽可能多的所有可能参数的组合),许多不同的随机森林模型,等等......

在我的一种方法中,我有一个列表,其每个元素对应一个ML算法及其参数列表 .

spark.parallelize(algorithms).map(lambda algorihtm: run_experiment(dataframe, algorithm))

在这个函数中 run_experiment 我为相应的ML算法创建了一个 GridSearchCV 及其参数网格 . 我还设置 n_jobs=-1 以便(尝试)实现最大并行度 .

在这种情况下,在我的带有几个节点的Spark集群上,执行看起来有点像这样有意义吗?

enter image description here

或者可以在同一节点中运行一个决策树模型和一个随机森林模型?这是我第一次使用集群环境的经历,所以我对如何期望工作有点困惑 .

另一方面,在执行方面究竟有什么变化,如果不是第一种方法 parallelize ,我使用 for 循环来顺序迭代我的算法列表并使用数据库的spark-sklearn与Spark和scikit-learn之间的集成创建 GridSearchCV ?它在文档中的说明方式似乎是这样的:

enter image description here

最后,关于第二种方法,使用相同的ML算法,而不是使用Spark MLlib而不是scikit-learn,整个并行化/分配是否会得到解决?

对不起,如果大多数这有点天真,但我真的很感激任何答案或见解 . 我想在集群中进行实际测试并使用任务调度参数之前了解基础知识 .


我不确定这个问题在这里或CS stackexchange上是否更合适 .

1 回答

  • 0

    spark.parallelize(algorithms).map(...)

    来自ref,"The elements of the collection are copied to form a distributed dataset that can be operated on in parallel."这意味着您的算法将分散在您的节点中 . 从那里,每个算法都将执行 .

    如果算法及其各自的参数分散,那么你的方案可能是有效的,我认为这是你的情况 .

    关于使用您的所有资源,spark非常擅长这一点 . 但是,您需要检查工作负载是否在您的任务之间 balancer (每个任务执行相同的工作量),以获得良好的性能 .


    如果使用并行化代替第一种方法,我使用for循环会有什么变化?

    一切 . 您的数据集(在您的情况下算法)不是RDD,因此不会发生并行执行 .

    ..还使用databricks的Spark和skikarn整合Spark和scikit-learn?

    article描述了随机森林如何在那里实施:

    “Spark的scikit-learn包提供了交叉验证算法的替代实现,该算法在Spark集群上分配工作负载 . 每个节点使用scikit-learn库的本地副本运行训练算法,并报告最佳模型对主人说 . “

    我们可以将此推广到您的所有算法,这使您的方案合理 .


    Spark MLlib而不是scikit-learn,整个并行化/分发会被照顾吗?

    是的,它会的 . 他们认为这个图书馆都是为我们照顾好事情,这样我们才能让生活更轻松 .


    我建议你一次提出一个大问题,因为答案现在太宽泛了,但我会尽量简洁 .

相关问题