我正在尝试在调整超参数级别上并行化我正在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
答案 0 :(得分:0)
这个问题更多的是关于猜测设置中的错误,而不是实际提供“真实”的答案。也许您还可以更改标题,因为您没有得到“意外结果”。
一些要点:
nthread = 1
已经是xgboost
中mlr
的默认设置multicore
是UNIX系统上的首选模式mlr.tuneParams
之外的另一个级别(请参阅here有关更多信息)