在计算集群上训练随机森林很慢



我有一个在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

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

对于这个问题,你必须使用类似于python parallel的解决方案。如果你想充分利用你的集群,可以看看Oliver Grisel的优秀教程。

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

相关内容

  • 没有找到相关文章

最新更新