如何减少“dask_ml.xgboost”工作内存消耗?

如何减少“dask_ml.xgboost”工作内存消耗?,dask,xgboost,dask-ml,Dask,Xgboost,Dask Ml,我一直在一个合成10GB数据集上测试dask_ml.xgboost回归器。培训时,员工的内存使用量超过了我本地笔记本电脑上的可用内存量。我知道我可以尝试在内存更大的在线dask集群上运行,也可以在训练之前对数据进行采样(忽略其余数据)。但是有不同的解决方案吗?我试图限制生成的树的数量和深度,对行和列进行二次采样,并更改树的构造算法,但工作人员的内存仍然不足 在给定固定内存分配的情况下,是否有办法在培训时减少每个工作人员的内存消耗 以下是一段代码片段: import dask.dataframe

我一直在一个合成10GB数据集上测试
dask_ml.xgboost
回归器。培训时,员工的内存使用量超过了我本地笔记本电脑上的可用内存量。我知道我可以尝试在内存更大的在线dask集群上运行,也可以在训练之前对数据进行采样(忽略其余数据)。但是有不同的解决方案吗?我试图限制生成的树的数量和深度,对行和列进行二次采样,并更改树的构造算法,但工作人员的内存仍然不足

在给定固定内存分配的情况下,是否有办法在培训时减少每个工作人员的内存消耗

以下是一段代码片段:

import dask.dataframe as dd
from dask.distributed import Client
from dask_ml.xgboost import XGBRegressor

client = Client(memory_limit='7GB')
ddf = dd.read_csv('10GB_float.csv')
X = ddf[ddf.columns.difference(['float_1'])].persist()
y = ddf['float_1'].persist()

reg = XGBRegressor(
    objective='reg:squarederror', n_estimators=10, max_depth=2, tree_method='hist',  
    subsample=0.001, colsample_bytree=0.5, colsample_bylevel=0.5, 
    colsample_bynode=0.5, n_jobs=-1)

reg.fit(X, y)
合成数据集
10GB_float.csv
有50列和26758707行,其中包含从0到1的随机浮点(
float64
)。以下是群集详细信息:

Cluster

    Workers: 4
    Cores: 12
    Memory: 28.00 GB

还有一些关于我本地笔记本电脑的信息:

Memory: 31.1 GiB
Processor: Intel® Core™ i7-8750H CPU @ 2.20GHz × 12 
此外,以下是
XGBRegressor
(使用
.get_params()
)的参数:


非常感谢您抽出时间

我会发现这个问题的答案非常有用。
{'base_score': 0.5,
 'booster': 'gbtree',
 'colsample_bylevel': 0.5,
 'colsample_bynode': 0.5,
 'colsample_bytree': 0.5,
 'gamma': 0,
 'importance_type': 'gain',
 'learning_rate': 0.1,
 'max_delta_step': 0,
 'max_depth': 2,
 'min_child_weight': 1,
 'missing': None,
 'n_estimators': 10,
 'n_jobs': -1,
 'nthread': None,
 'objective': 'reg:squarederror',
 'random_state': 0,
 'reg_alpha': 0,
 'reg_lambda': 1,
 'scale_pos_weight': 1,
 'seed': None,
 'silent': None,
 'subsample': 0.001,
 'verbosity': 1,
 'tree_method': 'hist'}