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