在海量数据集(400GB+,100m 行 x 200 列)上训练模型的最佳方法(最便宜/最快的选项)是什么?

数据挖掘 机器学习 Python xgboost 大数据 lightgbm
2021-10-12 04:37:44

我有一个要训练模型的 400GB 数据集。训练这个模型最便宜的方法是什么?到目前为止我能想到的选项是:

  1. 具有大量 RAM 和训练 CPU 的 AWS 实例(速度慢,但实例很便宜)。
  2. 具有许多 GPU 并使用 Dask + XGBoost 分发的 AWS 实例(快速但昂贵的实例,我什至认为没有足够大的实例来处理)。

我刚刚假设 XGBoost 是自它的表格数据以来最好的包,但如果另一个梯度提升树包能更好地处理这个问题,那也是可以接受的。

任何帮助将不胜感激。

2个回答

是的,您可以使用 Dask 后端并行训练 XGBoost。

简短的解决方案

与 Dask 并行训练 XGBoost 需要对代码进行 2 处更改:

  1. dtrain = xgb.DMatrix(X_train, y_train) _dtrain = xgb.dask.DaskDMatrix(X_train, y_train)

  2. xgb.train(params, dtrain, ...) _xgb.dask.train(client, params, dtrain, ...)

请查看本教程,了解在 4 分钟内将 XGBoost 训练到 100GB 的分步指南。免责声明:我在 Coiled 工作,这是一项提供托管 Dask 集群的付费服务。

我不知道很多增强包,但我已经使用 XGboost 有一段时间了,我拥有的最大的表格数据集比你的小 40 多倍。培训历时2-3天。

根据我的经验,训练时间比与数据大小呈线性关系更糟糕,尽管它高度依赖于数据本身和您选择的超参数。我的猜测是你的训练会很(太)长。

如果你真的想使用 XGboost,你应该在 GPU 上进行训练,在我看来,你正在寻找云提供商,我知道谷歌提供了 XGboost 在 GPU 上的托管训练,其他人肯定也这样做。

有了这么多数据,我认为你应该考虑使用深度学习。你也许可以使用 tabnet,它是 Google AI 为表格数据开发的一个很好的模型。例如,尝试使用 pytorch 很容易。