0

我在 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:

  1. 标签 ( Double)
  2. 特征(每个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

到目前为止我已经尝试过:

当我设置numWorkers1时,训练开始,但显然运行得很慢,我认为这不是应该使用的方式。

此处的文档: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. 输入数据框的分区是否会以某种方式影响训练?
4

0 回答 0