Scikit-Learn's RandomForestRegressor有一个 n_jobs 实例属性,来自文档:
n_jobs : integer, optional (default=1)
The number of jobs to run in parallel for both fit and predict. If
-1, then the number of jobs is set to the number of cores.
训练具有多个核心的随机森林模型显然比单核心更高效 . 但我注意到预测速度要慢得多(大约慢10倍) - 这可能是因为我在逐个观察的基础上使用了 .predict()
.
因此,我想在4核上训练随机森林模型,但是在单核上运行预测 . (该模型是pickled并在单独的过程中使用 . )
是否可以这种方式配置 RandomForestRegressor() ?
1 回答
哦,确定你可以,我对存储模型使用类似的策略 .
在使用
.predict()
方法之前,只需在pickle.load()
-ed上设置<_aRFRegressorModel_>.n_jobs = 1
.Nota bene:
如果与
.fit()
相比,.predict()
-task的工作量相当"lightweight",所以怀疑,调整这个的核心动机是什么 . 内存可能是问题,一旦大规模的森林可能需要在n_jobs
- "many"副本中进行扫描(由于 joblib 自然将所有python进程状态重新安装到那么多的全尺寸副本中......并且new, overhead-strict Amdahl's Law re-fomulation shows一,这是一个多么糟糕的想法 - 支付超过最终获得的方式(表现)) . 这对于.fit()
来说不是问题,其中并发进程可以很好地调整设置开销(在我的模型中〜每个进程的运行时间为4:00:00),但由于这个成本/收益"imbalance",它可能是一个杀手因素对于"lightweight" -.predict()
,其中没有太多工作要做,因此无法完成屏蔽过程设置/终止成本(并且您付出的代价超过了获取) .顺便说一句,你是来自顶级命名空间的对象吗?如果没有,我会遇到问题,并且存储的对象没有正确重建 . (在这个问题上花了很多年)