XGBoost на Spark вылетает с SIGSEV - PullRequest
0 голосов
/ 22 ноября 2018

Я использую Scala в Azure Databricks со следующей настройкой:

  • 5x рабочий узел (28.0 GB Memory, 8 Cores, 1.5 DBU)
  • 1x драйвер (14.0 GB Memory, 4 Cores, 0.75 DBU)

У меня есть Spark Dataframe с 760 тыс. Строк с двумя столбцами:

  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

Что я пробовал до сих пор:

Когда я установил *С 1036 * до 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. разбиение входного информационного кадра, как-то влияющего на тренировку?
...