【发布时间】:2017-11-01 19:22:59
【问题描述】:
过去几天我一直在使用 h2o 和 h2o Flow,并且很喜欢它。两天前,我从 h2o Flow 导出了一些模型(二进制格式)并用 R 导入了它们,以便我可以做进一步的研究。直到今天它都运行良好。出于某种原因,当我尝试 h2o.loadModel 函数时出现以下错误(在我所有导出的二进制模型之前工作得很好)。澄清一下,我已经成功运行 h2o.init() 命令来打开 H2O 集群。
ERROR: Unexpected HTTP Status code: 412 Precondition Failed (url = http://localhost:54321/99/Models.bin/)
water.exceptions.H2OIllegalArgumentException
[1] "water.exceptions.H2OIllegalArgumentException: Illegal argument: dir of function: importModel: H2O/H2O-XX/gbm_grid1_m02"
[2] " water.api.ModelsHandler.importModel(ModelsHandler.java:220)"
[3] " sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)"
[4] " sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)"
[5] " sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)"
[6] " java.lang.reflect.Method.invoke(Method.java:498)"
[7] " water.api.Handler.handle(Handler.java:63)"
[8] " water.api.RequestServer.serve(RequestServer.java:446)"
[9] " water.api.RequestServer.doGeneric(RequestServer.java:296)"
[10] " water.api.RequestServer.doPost(RequestServer.java:222)"
[11] " javax.servlet.http.HttpServlet.service(HttpServlet.java:755)"
[12] " javax.servlet.http.HttpServlet.service(HttpServlet.java:848)"
[13] " org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)"
[14] " org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)"
[15] " org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)"
[16] " org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)"
[17] " org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)"
[18] " org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)"
[19] " org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)"
[20] " org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)"
[21] " water.JettyHTTPD$LoginHandler.handle(JettyHTTPD.java:189)"
[22] " org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)"
[23] " org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)"
[24] " org.eclipse.jetty.server.Server.handle(Server.java:370)"
[25] " org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)"
[26] " org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)"
[27] " org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)"
[28] " org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)"
[29] " org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)"
[30] " org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)"
[31] " org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)"
[32] " org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)"
[33] " org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)"
[34] " org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)"
[35] " java.lang.Thread.run(Thread.java:748)"
Error in .h2o.doSafeREST(h2oRestApiVersion = h2oRestApiVersion, urlSuffix = page, :
ERROR MESSAGE:
Illegal argument: dir of function: importModel: H2O/H2O-XX/gbm_grid1_m02
我在 RStudio、macOS Sierra (10.12.6 (16G29)) 上使用最新的 h2o 版本 3.15.0.4029
更新:应 Erin 的要求,发布我尝试导入模型的方式:
library(h2o)
#h2o.init(nthreads = -1, max_mem_size = "7G") # Already initiated
#h2o.removeAll()
h2oXX <- h2o.loadModel("H2O-XX/GBM_grid_0_AutoML_20171102_095446_model_41")
降级到最新的稳定版本 (h2o-3.14.0.7) 并收到相同的错误:Illegal argument: dir of function: importModel: H2O-XX/GBM_grid_0_AutoML_20171102_095446_model_41
附加模型(可以尝试导入):bit.ly/h2odemo
【问题讨论】:
-
您应该始终使用最新的 stable 版本的 H2O,而不是每晚版本(3.15.0.4029 是随机每晚版本)。在此处下载稳定版:h2o-release.s3.amazonaws.com/h2o/latest_stable.html 版本之间的二进制模型不兼容,因此如果您在创建模型时和现在之间升级了 H2O,则会导致问题。您还可以使用用于加载模型的 R 代码更新您的帖子吗?
-
感谢@ErinLeDell 的回复。使用导入代码更新帖子并降级到最新的稳定版本。我会及时通知你的!
-
不幸的是,您需要使用 3.14.0.7 重新训练模型,然后尝试导入它(也使用 3.14.0.7)。我认为这应该可以解决错误。
-
是的@ErinLeDell 只是这样做并没有成功!重新训练了一个全新的模型并尝试导入它(当然是 3.14.0.7)并且什么都没有......同样的错误!我非常感谢您的帮助;还有什么想法吗?
-
已修复:就像运行 h2o.shutdown() 一样简单,然后使用新的 h2o.init() 连接再次尝试!谢谢@ErinLeDell 希望这个问题和解决方案可以帮助其他人