我正在为一个包含22个特性的300万点的数据集训练一个LightGBM回归模型。我正在尝试使用RandomizedSearchCV.It来调优模型的超参数,这需要很长时间。我正在使用谷歌云上的虚拟机,它有24个CPU核和32G内存。
当我尝试使用所有CPU内核进行随机搜索时,或者大多数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适合做这项工作?
发布于 2019-12-12 01:21:40
我认为您应该将n_jobs
从RandomizedSearchCV
中删除,这将解决问题。您可以指定num_threads
在LightGBM超参数中使用并行学习(它是LGB中的alias
of n_jobs
)。
根据官方指南,不建议使用机器的所有线程。您应该使用比CPU内核线程更少的东西。
对于并行学习,不要使用所有CPU核,因为这会导致网络通信性能差。
https://stackoverflow.com/questions/59290266
复制相似问题