Совместим ли XGBoost4j-Flink с многоузловым параллелизмом? - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь обучить модель XGBoost с помощью пакета XGBoost4j-Flink. С параллелизмом flink, установленным в 1, он работает, но с параллелизмом> 1 он всегда выдает эту ошибку :

ml.dmlc.xgboost4j.java.XGBoostError: [11:13:50] /xgboost/src/objective/regression_obj.cu:64: Check failed: info.labels_.Size() != 0U (0 vs. 0) : label set cannot be empty
Stack trace:
   [bt] (0) /tmp/libxgboost4j2929418756774401857.so(dmlc::LogMessageFatal::~LogMessageFatal()+0x22) [0x7f91471def82]
   [bt] (1) /tmp/libxgboost4j2929418756774401857.so(xgboost::obj::RegLossObj<xgboost::obj::LogisticClassification>::GetGradient(xgboost::HostDeviceVector<float> const&, xgboost::MetaInfo const&, int, xgboost::HostDeviceVector<xgboost::detail::GradientPairInternal<float> >*)+0xec) [0x7f91472e8b6c]
   [bt] (2) /tmp/libxgboost4j2929418756774401857.so(xgboost::LearnerImpl::UpdateOneIter(int, xgboost::DMatrix*)+0x43b) [0x7f9147273dfb]
   [bt] (3) /tmp/libxgboost4j2929418756774401857.so(XGBoosterUpdateOneIter+0x35) [0x7f91471e5845]
   [bt] (4) [0x7f91a9018407]

ml.dmlc.xgboost4j.java.XGBoostJNI.checkCall(XGBoostJNI.java:48)
ml.dmlc.xgboost4j.java.Booster.update(Booster.java:181)
ml.dmlc.xgboost4j.java.XGBoost.train(XGBoost.java:190)
ml.dmlc.xgboost4j.scala.XGBoost$.train(XGBoost.scala:64)
ml.dmlc.xgboost4j.scala.flink.XGBoost$MapFunction.mapPartition(XGBoost.scala:60)
org.apache.flink.runtime.operators.MapPartitionDriver.run(MapPartitionDriver.java:99)
org.apache.flink.runtime.operators.BatchTask.run(BatchTask.java:503)
org.apache.flink.runtime.operators.BatchTask.invoke(BatchTask.java:368)
org.apache.flink.runtime.taskmanager.Task.run(Task.java:711)

Я использовал следующие гиперпараметры в каждом тесте:

Subsample=1
Eta=0.05
Colsampletree=0.6
Silent=0
Objective=binary:logistic
Evalmetric=auc
Seed=42
Maxdepth=5
Minchildweight=6
Alpha=1.5
Booster=gbtree
Basescore=0.05
Nthread=8
Scaleposweight=0.5
Maxdeltastep=5
Gamma=0.1
Rounds=40

Возможно ли, что реализованный mapPartition выполняет нежелательное распределение, приводящее к тому, что узел / работник обрабатывает «набор данных одного класса»?

Кроме того, я столкнулся с некоторыми параметрами, такими как num_workers и timeout_request_workers , но его нет в документации по параметрам xgboost, а указывает c для xgboost4j-spark. Есть ли какие-то недокументированные параметры, которые я должен использовать для запуска многоузлового Flink XGBoost?

Надеюсь, кто-нибудь может мне помочь! Спасибо.

...