2017-07-07 165 views
1

我正在sklearn中构建和培训一些RandomForestClassifier模型。我最近发现有关n_jobs变量用于训练和预测的并行处理。但是,它似乎有我正在寻找的相反效果。Sklearn并行处理无法在码头集装箱中工作

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

有没有其他人遇到过和/或知道解决方案?

+0

你能看到4个python进程在运行吗?我使用窗口,我可以从任务管理器中看到它。当我设置1时,我只看到一个python进程,当我设置-1时,我看到8个python进程,因为我有8个内核。百分比取决于其他事实,但重点是看到并行运行 – sera

+0

不。我只是试了一下w/n_jobs = 4。只有1个python进程在28%到40%的CPU之间运行。 – cghill

+0

你可以设置n_jobs = -1并告诉我你看到了什么?另外,你使用Windows? – sera

回答

0

通常,在n_jobs = 1的情况下,它使用其中一个内核的cpu的100%。每个进程都在不同的内核中运行。在有4个内核的windows中,当我运行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() 
0

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

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

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