python-3.x - 运行 RandomizedSearchCV 为大数据调整 LightGBM Regressor
问题描述
我正在为大约 300 万个具有 22 个特征的数据集训练 LightGBM 回归模型。我正在尝试使用 RandomizedSearchCV 调整模型超参数。这需要很长时间。我在谷歌云上使用虚拟机,有 24 个 CPU 内核和 32G 内存。
当我尝试使用所有 CPU 内核进行随机搜索时,或者其中大部分内核如下所示:
# Use the random grid to search for best hyperparameters
# First create the base model to tune
lgbm = lgb.LGBMRegressor()
# Random search of parameters, using 2 fold cross validation,
# search across 100 different combinations, and use all available cores
lgbm_random = RandomizedSearchCV(estimator = lgbm, param_distributions = random_grid,
n_iter = 100, cv = 2, scoring='neg_mean_absolute_error',
verbose=10, random_state=42, n_jobs = 18)
它停止并出现此错误:
执行程序管理的工作进程意外终止。这可能是由于调用函数时出现分段错误或内存使用过多导致操作系统杀死工作人员造成的。工人的退出代码是 {SIGKILL(-9)}
如何正常使用所有 CPU 内核来执行此操作?
在 GPU 而不是 CPU 上运行随机搜索有什么不同吗?有多少个 GPU 核心适合做这项工作?
解决方案
我相信您应该从中删除n_jobs
,RandomizedSearchCV
它将解决问题。您可以指定num_threads
in LightGBM 超参数以使用并行学习(这是LGBalias
中n_jobs
的一个)。
根据官方指南,不建议使用机器的所有线程。你应该使用比你的 CPU 内核线程少的东西。
对于并行学习,不要使用所有 CPU 内核,因为这会导致网络通信性能下降
推荐阅读
- javascript - 我不明白为什么我的代码不起作用,有人可以检查一下吗?我很新 (JavaScript)
- javascript - 允许在 Chrome 中的 dragenter 事件处理程序上访问拖动的项目数据
- c# - 使用 C# 的 MacOs 活动窗口标题
- python - 基于时间戳的 Python pandas 查找值
- go - 谁能解释 Go Tour 网站上的 compute(fn func()) 代码?
- javascript - 单击后如何获取单选按钮的值
- python-2.7 - 访问类属性
- python - 在“No module named functools_lru_cache”和“cannot import name cbook”错误之间循环
- python - OS X:ld:找不到 -lstdc++ 的库
- python - 如何在 python 中使用 Try/Catch