h2o任务花费了很长时间,导致卡住

问题描述

我成功初始化了一个集群并训练了DRF模型。然后,在同一个集群上,我尝试对XGBoost模型进行网格搜索。

H2OGridSearch(
    H2OXGBoostEstimator(my_model_params),hyper_params=my_grid_params,search_criteria=my_search_criteria
)

有时(并非总是)网格搜索永远不会结束。在对H2O流程进行检查后,我发现工作进度为0%并处于“运行中”状态。
我在日志中看到的是以下内容

WARN: XGBoost task of type 'Boosting Iteration (tid=0)' is taking unexpectedly long,it didn't finish in 360 seconds.  
WARN: XGBoost task of type 'Boosting Iteration (tid=0)' is taking unexpectedly long,it didn't finish in 420 seconds.
...
WARN: XGBoost task of type 'Boosting Iteration (tid=0)' is taking unexpectedly long,it didn't finish in 60240 seconds.

然后我得到

ERRR: water.api.HDFSIOException: HDFS IO Failure: 

但作业的状态仍为“运行中”。

我正在通过Python 3.7使用h2o 3.30.0.6。 问题是该错误无法重现,有时可以正常工作。

关于如何找到根本原因的任何提示?
当提升迭代花费的时间太长时,是否可以设置一个参数来杀死整个工作?

解决方法

对于XGBoost,如果它变得无响应,则可能需要为其分配更多的内存,因为它使用的内存独立于H2O(算法)

为什么即使我提供了4倍于数据大小的内存,运行XGBoost时,我在Hadoop上的H2O集群也变得无响应?

这就是为什么Extramempercent选项存在的原因,我们建议将其设置为较高的值,例如120。内部发生的情况是,当您指定-node_memory 10G和-extramempercent 120时,h2o驱动程序将向Hadoop请求10?∗ (1 + 1.2)=22?的内存。同时,h2o驱动程序会将容器JVM(h2o节点)使用的内存限制为10G,从而使10×120内存“未使用”。然后,JVM外部的XGBoost可以安全地使用此内存。请记住,H2O算法将只能访问JVM内存(10GB),而XGBoost将使用本机内存进行模型训练。例如: hadoop jar h2odriver.jar -nodes 1 -mapperXmx 20g -extramempercent 120

Source

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...