训练RandomForest在计算集群上运行缓慢

时间:2014-03-25 22:08:30

标签: python scikit-learn

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

clf = RandomForestClassifier(n_estimators=1000, n_jobs=-1)
clf.fit(data, Y)

然而,当我运行代码时,我发现只有1.2%的CPU正在使用!那么为什么它不使用存在的所有核心呢?请问如何解决这个问题?

编辑:我看到我的问题可能与此链接中的问题有关,但我无法理解解决方案。 https://github.com/scikit-learn/scikit-learn/issues/1053

1 个答案:

答案 0 :(得分:4)

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

为此你必须使用像ipython parallel这样的解决方案。如果您想充分利用群集的全部功能,请参阅Oliver Grisel的excellent tutorial

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