如何限制sklearn中GridSearchCV的CPU使用率?
解决GridSearchCV结合LightGBM时CPU占满的问题
你的问题核心在于GridSearchCV的n_jobs控制的是交叉验证的并行任务数,但LightGBM模型本身训练时默认会占用所有CPU核心。即使你限制了GridSearchCV的并行数,每个并行任务里的模型训练都会抢占全部核心,最终导致总CPU占用拉满。
解决方案:同时限制模型内部的并行参数
LightGBM提供了n_jobs(或等价的num_threads)参数来控制单模型训练时使用的核心数,你需要在模型初始化时固定这个参数,避免它默认占满核心。
修改代码示例:
gsearch_lgb = GridSearchCV( # 在模型初始化时添加n_jobs参数,限制单模型训练的核心数 model(**{**self.model_params, "n_jobs": 1}), param_grid=self.model_params, n_jobs=2, verbose=99, scoring=self.cv_scoring, cv=4, )
注意事项:
- 如果你的
param_grid中包含n_jobs参数,需要确保网格搜索的参数值也是较小的合理值(比如[1,2]),否则会覆盖你在模型初始化时设置的参数,再次导致核心占满。 - 总CPU核心占用约为
GridSearchCV的n_jobs × 单模型的n_jobs,你可以根据自己的CPU核心数调整这两个数值,比如GridSearchCV设为2,单模型设为1,总占用就是2个核心。 - 也可以直接在
self.model_params中预先加入"n_jobs": 1,这样模型初始化时就会自动应用这个限制,无需在GridSearchCV里额外覆盖。
内容的提问来源于stack exchange,提问作者Jim Chen
相关产品推荐
相关产品推荐

