我一直dask_ml.xgboost
在合成 10GB 数据集上测试回归器。训练时,工作人员的内存使用量超过了我本地笔记本电脑上的可用内存量。我知道我可以尝试在具有更大内存的在线 dask 集群上运行,或者我可以在训练之前对数据进行采样(并忽略其余部分)。但是有不同的解决方案吗?我尝试限制生成的树的数量和深度,对行和列进行二次采样,并更改树构造算法,但工作人员仍然内存不足。
给定一个固定的内存分配,有没有办法在训练时减少每个工人的内存消耗dask_ml.xgboost
?
这是一个代码片段:
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 行,其中包含float64
从 0 到 1 的随机浮点数 ( )。以下是集群详细信息:
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'}
非常感谢您的宝贵时间!