我成功初始化了一个集群并训练了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。 问题是该错误无法重现,有时可以正常工作。
关于如何找到根本原因的任何提示?
当提升迭代花费的时间太长时,是否可以设置一个参数来杀死整个工作?
答案 0 :(得分:0)
对于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