XGBoost-Spark在训练期间正在做什么,以及如何优化其资源使用?

时间:2018-07-10 12:19:12

标签: apache-spark xgboost

我正在使用Mesos上的spark-submit在集群模式下在Spark 2.2 / Scala上运行XGBoost。

我希望XGBoost并行运行,所以我设置了tree_method=approx,因为在XGBoost Parameters for R中这样说:

  

分布式和外部存储器版本仅支持近似算法

我不清楚这对于XGBoost的Spark版本也是如此。

我已将XGBoost设置为使用100个工作程序(nWorkers=100),在我的total-executor-cores 100设置中使用spark-submit,在我的.config("spark.executor.cores", 5)设置中使用SparkSession。这样一来,我总共有20位执行者+ 1位驱动程序。每个执行器有5个CPU。

在我的Stage3中,XGBoost开始运行。我在StdOut中看到了这一点:

Tracker started, with env={DMLC_NUM_SERVER=0, DMLC_TRACKER_URI=192.168.50.105, DMLC_TRACKER_PORT=9091, DMLC_NUM_WORKER=100}

在StdErr中,我看到:

[Stage 3:>                                                        (0 + 100) / 100]
[Stage 3:>                                                        (0 + 100) / 100]
[Stage 3:>                                                        (0 + 100) / 100]
(repeated many times)

在SparkUI-executors选项卡中,我看到所有20个执行程序各自运行5个任务。

在SparkUI阶段标签中,我一次看到100个任务。

在Mesos UI-“代理”选项卡中,我看到作业在每个节点和执行器上运行,但从未运行所有cpu。对于每个执行者,杯子利用率最多可以达到1.5,而不是要求的5。看来我的资源没有得到充分利用。

XGBoost保持这种状态约30分钟,产生许多[Stage 3:> ... 0 + 100) / 100] messages,然后所有任务立即结束,模型准备就绪。

我看到了这篇帖子Spark ML gradient boosted trees not using all nodes ,但并没有太大帮助

我还看到了这三篇关于XGBoost培训阶段并行化的文章

  1. How does XGBoost do parallel computation?
  2. Parallel Computation with R and XGBoost
  3. Parallel Gradient Boosting Decision Trees
  4. Parallelism in XGBoost machine learning technique

问题:

  1. XGBoost在Stage3中做什么?
  2. 真的并行吗?
  3. 为什么在每个执行器上不使用全部5个cpus?
  4. 如何在培训期间优化资源的使用?
  5. 从xgboost文档中,尚不清楚XGBoost是否在第3条中的列上并行化,还是在第2条中的带有直方图的行上并行化?
  6. XGBoost培训是否涉及洗牌?

0 个答案:

没有答案