Spark上的XGBoost与SIGSEV一起崩溃

时间:2018-11-22 11:01:52

标签: scala apache-spark xgboost databricks azure-databricks

我通过以下设置在Azure Databricks中使用Scala:

  • 5个工作节点(28.0 GB Memory, 8 Cores, 1.5 DBU
  • 1个驱动程序(14.0 GB Memory, 4 Cores, 0.75 DBU

我有一个带有760k行和两列的Spark数据框:

  1. 标签(Double
  2. 功能(每个长度SparseVector的{​​84224

我想在数据框上使用XGBoost来训练回归模型:

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的文档对我的情况完全没有帮助。

我的问题是:

  1. 是否可以在大于每个单独工作程序的内存的数据集上运行XGBoost? (我认为是,但是如果我错了,请纠正我)
  2. 如何正确使用外部存储器,以便当我获取更大的数据集时,XGBoost可以进行训练?
  3. 输入数据帧的分区是否在某种程度上影响训练?

0 个答案:

没有答案