【发布时间】:2019-02-13 16:48:35
【问题描述】:
我正在尝试在 ubuntu 14.04.-server 机器上使用 scikit-learn 拟合随机森林模型。我的数据形状为 (150000, 270),verbose=10 输出如下所示:
构建树 1 of 10 [并行(n_jobs = 1)]:完成 1 出 1 |已用时间:6.1s 剩余时间:0.0s 建筑树 2 of 10 [并行(n_jobs = 1)]:完成 2 出 2 |已用时间:12.2s 剩余时间:0.0s 建筑树 3 of 10 [并行(n_jobs = 1)]:完成 3 出 3 |已用时间:18.3s 剩余时间:0.0s 建筑树 4 of 10 [并行(n_jobs = 1)]:完成 4 出 4 |已用时间:24.9s 剩余时间:0.0s 建筑树 5 of 10 [并行(n_jobs = 1)]:完成 5 出 5 |已用时间:32.1s 剩余时间:0.0s 建筑树 6 of 10 [并行(n_jobs = 1)]:完成 6 次中的 6 次 |已用时间:38.5s 剩余时间:0.0s 建筑树 7 of 10 [并行(n_jobs = 1)]:完成 7 出 7 |已用时间:45.3s 剩余时间:0.0s 建筑树 8 of 10 [并行(n_jobs = 1)]:完成 8 / 8 |已用时间:52.0s 剩余时间:0.0s 建筑树 9 of 10 [并行(n_jobs = 1)]:完成 9 出 9 |已用时间:58.5s 剩余时间:0.0s 建筑树 10 of 10 [并行(n_jobs = 1)]:完成 10 / 10 |经过:1.1分钟完成
在此之后,它会挂起/冻结几个小时。我尝试改变n_jobs 和n_estimators 参数,以使模型不那么复杂/防止n_jobs 出现线程问题。这没有帮助。
我的模型如下所示:
RandomForestRegressor(random_state=1234, n_jobs=1, n_estimators=10, min_samples_split=2, min_samples_leaf=1, verbose=10)
我阅读了很多关于 BLAS/MKL 线程问题的文章并尝试设置环境变量
os.environ['MKL_NUM_THREADS'] = '1'
os.environ['OMP_NUM_THREADS'] = '1'
os.environ['NUMEXPR_NUM_THREADS'] = '1'
os.environ['JOBLIB_START_METHOD'] = 'forkserver'
但它们都没有帮助。该模型将无法完成训练。 我的脚本看起来类似于这样的结构:
import packages/libraries
## load data
## define model
## fit model
## predict on new data
有没有人经历过相同/不同的事情?
提前致谢!
【问题讨论】:
-
只是一个建议:也许一个有用的诊断是首先在较小的样本量上运行您的代码,例如 15000 或 1500 个示例。
-
数据的大小没有帮助。我已经尝试了不同的尺寸,越来越小......
-
似乎有一种线程问题会导致任何锁定或其他问题......我尝试不设置任何环境变量和
n_jobs=-1,它确实工作正常,但使用所有内核可用...如何限制使用的核心数量?简单地设置n_jobs=4或任何其他整数不会做任何事情,只是让脚本只使用一个核心。 -
尝试在代码顶部添加
import multiprocessing; multiprocessing.set_start_method('forkserver');,然后再运行或导入任何内容。它可以解决问题吗? -
遗憾的是这并没有改变任何东西。
标签: python multithreading scikit-learn random-forest