我在 Azure Databricks 中使用 Scala,设置如下:
- 5x 工作节点 (
28.0 GB Memory, 8 Cores, 1.5 DBU
) - 1 个驱动程序 (
14.0 GB Memory, 4 Cores, 0.75 DBU
)
我有一个包含 760k 行和两列的 Spark Dataframe:
- 标签 (
Double
) - 特征(每个
SparseVector
长度84224
)
我想XGBoost
在我的 Dataframe 上使用来训练回归模型:
val params = Map(
"objective" -> "reg:linear",
"max_depth" -> 6,
"eval_metric" -> "rmse"
)
var model = new XGBoostRegressor(params)
.setFeaturesCol("features")
.setLabelCol("label")
.setTreeMethod("approx")
.setNumRound(20)
.setNumEarlyStoppingRounds(3)
.setUseExternalMemory(true)
.setMaxDepth(6)
.setNumWorkers(10)
val trainedModel = model.fit(trainSample)
启动后,我收到以下错误:
SIGSEGV (0xb) 在 pc=0x00007f62a9d33e0e,pid=3954,tid=0x00007f62c88db700
到目前为止我已经尝试过:
当我设置numWorkers
为1
时,训练开始,但显然运行得很慢,我认为这不是应该使用的方式。
此处的文档:https ://xgboost.readthedocs.io/en/latest/tutorials/external_memory.html和此处:https ://docs.databricks.com/spark/latest/mllib/third-party-libraries.html# xgboost对我的情况完全没有帮助。
我的问题是:
- 是否可以在大于每个工作人员内存的数据集上运行 XGBoost?(我认为这是肯定的,但如果我错了,请纠正我)
- 如何正确使用外部内存,以便当我使用更大的数据集时,XGBoost 将进行训练?
- 输入数据框的分区是否会以某种方式影响训练?