我有一个计算机集群的帐户,而不是在Linux上运行的。我正在使用scikit-学习训练一个随机森林分类器与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
发布于 2014-03-25 14:47:40
这可能不是问题的根源(因为n_jobs=-1
应该自动检测和使用主节点中的所有内核),但是Sklearn将在集群中的单个机器的所有内核中并行运行。默认情况下,它不会在集群中来自不同机器的核心上运行,因为这意味着了解集群的体系结构,并通过sklearn不知道如何进行通信的网络进行通信,因为它因集群而异。
为此,您必须使用类似于ipython并行的解决方案。如果您想要使用集群的全部功能,请参阅Oliver的优秀教程。
我建议您将sklearn更新到最新版本,在本地尝试代码(最好是在相同的OS、sklearn版本下),通过设置n_jobs=1,2,3...
和基准测试fit来调试缩放行为和CPU利用率。例如,如果n_jobs=1
在集群中的一个核心中没有很高的利用率,但在您的本地PC中却具有很高的利用率,这将表明集群而不是代码出现了问题。有时候,集群中的top命令的行为会有所不同,您应该与admin进行协商。
https://stackoverflow.com/questions/22647344
复制相似问题