R:如何在Linux服务器上使用parallelMap(带有mlr,xgboost)?与Windows相比,性能出乎意料

时间:2019-05-03 23:23:13

标签: r parallel-processing mlr

我正在尝试在调整超参数级别上并行化我正在type A = import('dependency').A; type B = import('dependency').B; type C = import('dependency').C; ... 中进行调整的xgboost模型,并试图与mlr并行化。我的代码可以在Windows机器(只有8个内核)上成功运行,并且想使用Linux服务器(有72个内核)。我无法成功获得转移到服务器上的任何计算优势,并且我认为这是由于我对parallelMap参数的理解存在漏洞。

我不理解多核vs本地vs套接字在parallelMap中作为“模式”的区别。根据我的阅读,我认为多核将适合我的情况,但是我不确定。我在Windows计算机上成功使用了套接字,并在Linux服务器上尝试了套接字和多核,但均未成功。

parallelMap

但是我的理解是,与并行化超参数调整一样,对于在不需要相互通信的许多内核上进行并行化,套接字可能不是必需的,或者可能很慢。

要详细说明我在linux服务器上的不成功结果:我没有收到错误,但是连续需要不到24小时的时间却要花费2周以上的时间。查看这些过程,可以发现我确实在使用几个核心。

每个单独的调用xgboost都在几分钟之内运行,而我并没有试图加快速度。我只是想在几个核上调整超参数。

我担心我的linux服务器上的速度非常慢是由于xgboost尝试利用模型构建中的可用内核,因此我通过mlr将parallelStart(mode="socket", cpu=8, level="mlr.tuneParams") 馈入xgboost以确保不会发生。尽管如此,我的代码在大型linux服务器上的运行速度似乎比在较小的Windows计算机上的运行速度慢得多-关于可能发生的事情有什么想法吗?

非常感谢。

nthread = 1

1 个答案:

答案 0 :(得分:0)

这个问题更多的是关于猜测设置中的错误,而不是实际提供“真实”的答案。也许您还可以更改标题,因为您没有得到“意外结果”。

一些要点:

  • nthread = 1已经是xgboostmlr的默认设置
  • multicore是UNIX系统上的首选模式
  • 如果本地计算机比服务器快,那么您的计算将很快完成,并且两者之间的CPU频率明显不同,或者您应该考虑并行化除mlr.tuneParams之外的另一个级别(请参阅here有关更多信息)