【问题标题】:How to find H2O model version如何找到 H2O 模型版本
【发布时间】:2019-04-01 22:58:18
【问题描述】:

我有两个 H2O 模型(通过 R-3.x.x 中的 h2o.savemodel 保存)。我如何找出模型是基于哪个版本的 H2O 构建的?

我无法使用最新版本的 H2O 加载其中一个。

>model3 <- h2o.loadModel(pcaModelFileName)

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: PCA_model_R_1538682208857_7"
 [2] "    water.api.ModelsHandler.importModel(ModelsHandler.java:212)"                                                          
 [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:451)"                                                                
 [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:197)"                                                            
[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: PCA_model_R_1538682208857_7

已经报告了类似的错误,据说是版本问题,但我的问题是 1.这个和版本有关吗 2. 有没有办法找出模型建立在哪个 H2o 版本上 3. 有没有办法在 R 中将模型从一个版本移植到另一个版本。 (我可能有两个基于两个不同版本的 H2O 模型。

使用 Mojo 或 Pojo 可能不是一个选项,因为我没有重建模型所需的数据/脚本。

【问题讨论】:

    标签: r h2o


    【解决方案1】:

    看起来该错误与版本未匹配有关,因为它抱怨的是非法参数。

    查看模型对应的 h2o 版本号的快速方法(如果您使用h2o.saveModel() 保存模型)是打开模型的文件 - 您应该能够在第一行中看到版本号(在表格中3.10.4.2)。

    您还可能会收到版本不匹配错误,它会告诉您您尝试使用的版本与当前使用的版本。

    在 R 中没有办法将模型从一个版本移植到另一个版本。来自documentation

    注意:当使用 h2o.saveModel (R)、h2o.save_model (Python) 或在 Flow 中保存 H2O 二进制模型时,您将只能加载并使用与用于训练模型的相同版本的 H2O 保存的二进制模型。 H2O 二进制模型在 H2O 版本之间不兼容。如果您更新您的 H2O 版本,那么您将需要重新训练您的模型。对于生产,您可以将模型保存为 POJO/MOJO。这些工件与特定版本的 H2O 无关,因为它们只是纯 Java 代码,不需要运行 H2O 集群。

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 2020-03-27
      • 1970-01-01
      • 2017-08-23
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      相关资源
      最近更新 更多