我试图在32核服务器上使用sciki学习(0.17.1)。操作系统为Ubuntu14.04.1,python版本为2.7.12。当我试图运行这样的
etr_init = RandomForestRegressor(n_jobs = -1)
etr_model = etr_init.fit(trn_x, y)只有10个核心在运行。还需要其他配置吗?
发布于 2017-01-21 03:23:31
滑雪板中的大多数算法只支持在fit级别上的并行性(意思是:每个fit使用一个核心)。这特别有助于交叉验证和网格搜索。
幸运的是,您使用的是一些易于并行化的算法(集成方法的自然特性),并且得到了一些比fit级别方法更精细的特殊多处理处理。
在您的示例中,创建RandomForestRegressor(n_jobs=-1)使用默认的:
n_estimators : integer, optional (default=10)。
由于相对于RandomForestRegressor的并行化功能仅限于不同树(内部组件),所以只能使用10个核心(因为您使用的是10x树= 10 x DecisionTreeRegressor)。
使用:
etr_init = RandomForestRegressor(n_estimators=32, n_jobs = -1)
etr_model = etr_init.fit(trn_x, y)可能会用到更多的核心。
如果SMT/HT核被用作SMT/HT,则仍然存在疑问--核并不总是被计算在内(并且可能存在于集群中)。并不总是意味着它在sklearn中是不确定的,但是不同的线程/多处理库使用不同的规则,我不知道sklearn或使用的内部组件= joblib是如何工作的(不相关的流行示例: x264使用了1.5 *全核(包括l)。据我所知)。
通过查看文档(同时知道什么是#-trees ),可以推断出我关于sklearn仅在#-trees级别上使用多处理的猜想:
n_jobs。(某些RandomForestRegressor的每个估计量都是一个DecisionTreeRegressor)https://stackoverflow.com/questions/41770471
复制相似问题