Sklearn并行处理在Docker容器中不起作用

我正在sklearn中构build和训练一些RandomForestClassifier模型。 我最近发现有关n_jobsvariables用于训练和预测的并行处理。 但是,这似乎有我正在寻找相反的效果。

当n_jobs未分配时(默认为1),训练/预测将完全使用1个核心。 运行“顶部”时,可以看到100%的CPU使用率。 但是,当我将它撞到4或-1(内核数量是4)时,CPU使用率降低到25%。

有没有其他人遇到过这个和/或知道解决scheme?

一般来说,在n_jobs = 1的情况下,它使用其中一个内核的100%的cpu。 每个进程运行在不同的核心。 在4核的窗口中,当我运行n_jobs = 1和(100%,100%,100%,100%)时,我可以清楚地看到CPU使用率(100%,〜5%,〜5%,〜5%用n_jobs = -1运行。另外,笔记本电脑在最后一种情况下会冻结。 每个进程都使用给定内核的100%使用率,但是如果您有n_jobs = 1,则只使用一个内核。

您也可以尝试添加if__name__==="__main__":n_jobs =-1

例1:

 from sklearn.ensemble import RandomForestClassifier if __name__ == '__main__': clf = RandomForestClassifier( n_jobs = -1 ) #more code 

或例2:

 Class Test(object): def __init__(self): clf = RandomForestClassifier( n_jobs = -1 ) ###code here if __name__ == '__main__': Test() 

看起来这是我的一个误解。 显然我的数据集足够小,“合适”的时间实际上是非常可以忽略的(60,000条logging左右)。 但是,我正在进行手动交叉validation,并会遍历这些logging,并要求对看不见的testing集进行预测。 这将需要几分钟的时间,我希望平行化会削减那个时间。 但是,我认为我的模型足够小,产生新进程的开销比通过并行获得的速度要高得多。

基本上我生成了一个足够大(200万行)的随机数据集,并称为“适合”,我确实看到我的CPU使用率如预期增加。

对不起,困惑,并感谢那些试图帮助!

Interesting Posts