Python 在计算集群上训练随机森林的速度很慢

Python 在计算集群上训练随机森林的速度很慢,python,scikit-learn,Python,Scikit Learn,我有一个在Linux上运行的计算集群帐户。我正在使用scikit学习在一个非常大的数据集上训练一个随机森林分类器,该分类器包含1000棵树。我试图通过运行以下代码来使用计算集群的所有核心: clf = RandomForestClassifier(n_estimators=1000, n_jobs=-1) clf.fit(data, Y) 然而,当我运行代码时,我看到只有1.2%的CPU被使用!那么,为什么它不使用现有的所有内核呢?请问如何解决这个问题 编辑:我看到我的问题可能与此链接中的问题

我有一个在Linux上运行的计算集群帐户。我正在使用scikit学习在一个非常大的数据集上训练一个随机森林分类器,该分类器包含1000棵树。我试图通过运行以下代码来使用计算集群的所有核心:

clf = RandomForestClassifier(n_estimators=1000, n_jobs=-1)
clf.fit(data, Y)
然而,当我运行代码时,我看到只有1.2%的CPU被使用!那么,为什么它不使用现有的所有内核呢?请问如何解决这个问题


编辑:我看到我的问题可能与此链接中的问题有关,但我无法理解解决方案

这可能不是问题的根源(因为
n_jobs=-1
应该自动检测并使用主节点中的所有核心),但是Sklearn将在集群中单个机器的所有核心中并行运行。默认情况下,它不会在集群中不同机器的核心上运行,因为这意味着了解集群的体系结构,并通过网络进行通信,而sklearn不知道如何进行通信,因为它在集群之间有所不同

为此,您必须使用类似ipython parallel的解决方案。如果您想充分利用集群的所有功能,请参阅Oliver Grisel的


我建议您将sklearn更新到最新版本,在本地尝试您的代码(最好是在相同的操作系统下,sklearn版本),通过设置
n_jobs=1,2,3…
和基准测试来调试伸缩行为和CPU利用率。例如,如果
n_jobs=1
在群集中的一个核心中没有高利用率,但在本地PC中却有,这将表明群集中有问题,而不是代码有问题。有时集群中的top命令的行为不同,您应该咨询管理员。

因为运行集群的人不会愚蠢到让您一直拥有所有核心!在集群上,我们必须学会共享。我不知道他们给你分配了多少内核,但1.2%的CPU可能非常慷慨。通常集群有一个提交系统,您可以在其中为您的工作请求更多的内核。@是的,这是真的,我可以得到我想要的任意多的内核,我从40个CPU中分配了10个CPU。但是CPU使用率非常低!1.2%!!Python有一个全局解释器锁,您是否在jython上运行?这可能不是问题的根源,但Sklearn将在一台机器的所有内核中并行运行。它不会在集群中不同机器的核心上运行,这意味着了解集群的体系结构并通过网络进行通信。为此,您必须使用类似python并行的解决方案。@Victory scikit learn内置了并行处理支持。在最新版本中,它的随机森林代码几乎可以在没有GIL的情况下运行。