首页 > 解决方案 > 运行 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 核心适合做这项工作?

标签: python-3.xtensorflowcpu-usagegrid-searchlightgbm

解决方案


我相信您应该从中删除n_jobsRandomizedSearchCV它将解决问题。您可以指定num_threadsin LightGBM 超参数以使用并行学习(这是LGBaliasn_jobs的一个)。

根据官方指南,不建议使用机器的所有线程。你应该使用比你的 CPU 内核线程少的东西。

对于并行学习,不要使用所有 CPU 内核,因为这会导致网络通信性能下降


推荐阅读