R Can';t使用h2o导入二进制h2o模型。loadModel()函数:412前置条件失败

R Can';t使用h2o导入二进制h2o模型。loadModel()函数:412前置条件失败,r,load,h2o,R,Load,H2o,在过去的几天里,我一直在研究h2o和h2o流,我很喜欢它。两天前,我从h2o Flow导出了一些模型(二进制格式),并将它们与R一起导入,以便进行进一步的研究。直到今天,它一直运作良好。出于某种原因,我在尝试h2o.loadModel函数时遇到了以下错误(在我导出的所有二进制模型中,该函数都工作得很好)。为了澄清,我已经成功地运行了h2o.init()命令来打开h2o集群 ERROR: Unexpected HTTP Status code: 412 Precondition Failed (u

在过去的几天里,我一直在研究h2o和h2o流,我很喜欢它。两天前,我从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
我在macOS Sierra的RStudio上使用最新的h2o版本3.15.0.4029(10.12.6(16G29))

更新:根据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)
#h2o.init(nthreads=-1,max_mem_size=“7G”)#已启动
#h2o.removeAll()

h2oXX如果您看到如下错误(关键标识符是此语句
非法参数:函数目录:importModel:

那么这可能意味着您使用了不同版本的H2O来训练和保存模型,而不是加载H2O模型。这是一个问题,因为(使用
h2o.saveModel()
函数保存的模型)在不同版本的h2o之间不兼容

简单的解决方案是使用相同版本的H2O保存并重新加载模型


另一种解决方案是使用H2O型模型。模型的这种格式将模型导出为纯Java代码,并且与特定版本的H2O无关。当您对测试数据生成预测时,它也不需要运行H2O集群。如果要将H2O模型投入生产,这通常是您想要使用的。

您应该始终使用H2O的最新稳定版本,而不是夜间版本(3.15.0.4029是随机夜间版本)。此处下载稳定:二进制模型在不同版本之间不兼容,因此,如果您在创建模型时和现在之间升级H2O,将导致问题。你能用你用来加载模型的R代码更新你的帖子吗?谢谢@ErinLeDell的回复。用导入代码更新帖子,并降级至最新稳定版本。我会通知你的!不幸的是,您需要使用3.14.0.7重新训练模型,然后尝试导入它(也使用3.14.0.7)。我认为这应该可以解决这个错误。是的@ErinLeDell只是这样做了,没有成功!!重新训练了一个全新的模型,并尝试导入它(当然是3.14.0.7),但什么都没有。。同样的错误!我真的很感激你的帮助;有没有进一步的想法?修复了:这就像运行h2o.shutdown()然后使用新的h2o.init()连接重试一样简单!!谢谢@ErinLeDell希望这个问题和解决方案能帮助其他人找到一种方法来确定使用哪个版本的H2O来构建模型?我也犯了同样的错误。但是如果不加载它们(甚至在R环境中加载它们之后),我不知道使用哪个版本的H2o模型来构建这个模型。是的,这个信息可以在二进制导出文件中找到。它以纯文本形式存在于文件头中。如果您在Mac/Linux上,您可以键入此命令以获取版本:
strings model.hex | head-1
(其中model.hex是二进制导出)@ErinLeDell我有同样的问题,但使用相同的版本,有什么想法吗?@Lucif3r-如上所述。只需使用h2o.shutdown(),然后再次运行h2o.init()。加载模型的Post。它应该有用!
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"