2017-11-01 1 views
1

Ich habe mit h2o und h2o Flow für die letzten Tage gearbeitet und habe es geliebt. Vor zwei Tagen habe ich einige Modelle (im Binärformat) von h2o Flow exportiert und mit R importiert, damit ich weitere Studien machen konnte. Es funktionierte perfekt bis heute. Aus irgendeinem Grund erhalte ich den folgenden Fehler, wenn ich die Funktion h2o.loadModel versuche (die vorher mit allen meinen exportierten binären Modellen funktionierte). Nur zur Klarstellung, ich habe bereits erfolgreich den Befehlausgeführt, um den H2O-Cluster zu öffnen.Kann binay h2o Modell mit h2o.loadModel() Funktion nicht importieren: 412 Vorbedingung fehlgeschlagen

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 

Im die neueste h2o Version, 3.15.0.4029 auf RStudio, macOS Sierra (10.12.6 (16G29))

UPDATE: wie Erin angefordert, die Entsendung, wie ich zu importieren versucht, das Modell:

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") 

auf die neueste stabile Version Downgraded (H 2 O-3.14.0.7) und Empfangen von den gleichen Fehler: Illegal argument: dir of function: importModel: H2O-XX/GBM_grid_0_AutoML_20171102_095446_model_41

angebaute Modell (Sie können versuchen, es zu importieren): bit.ly/h2odemo

+0

Sie sollten immer die neueste * stabile * Version von H2O verwenden, nicht die nächtlichen Versionen (3.15.0.4029 ist eine zufällige nächtliche Veröffentlichung). Download stabil hier: http://h2o-release.s3.amazonaws.com/h2o/latest_stable.html Binary-Modelle sind nicht kompatibel zwischen den Versionen, wenn Sie also H2O zwischen dem Zeitpunkt der Erstellung der Modelle und jetzt aktualisiert haben, wird das ein Problem verursachen . Können Sie Ihren Post auch mit dem R-Code aktualisieren, den Sie zum Laden des Modells verwendet haben? –

+0

Dank @ErinLeDell für Sie antworten. Der Post wurde mit dem Importcode aktualisiert und auf die neueste stabile Version heruntergestuft. Ich werde Sie auf dem Laufenden halten! – Bernardo

+0

Leider müssen Sie das Modell mit 3.14.0.7 erneut trainieren und dann versuchen, es zu importieren (auch mit 3.14.0.7). Ich denke, das sollte den Fehler beheben. –

Antwort

1

Wenn Sie sehen, einen Fehler, der wie folgt aus (Schlüsselkennung ist diese Aussage Illegal argument: dir of function: importModel:)

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" 

Dann sieht das wahrscheinlich bedeutet, dass Sie haben eine andere Version von H2O verwendet, um das Modell zu trainieren und zu speichern, als Sie zum Laden des H2O-Modells verwenden. Dies ist ein Problem, da binary models (Modelle, die mit der h2o.saveModel()-Funktion gespeichert wurden) nicht mit verschiedenen H2O-Versionen kompatibel sind.

Die einfache Lösung besteht darin, dieselbe Version von H2O zu verwenden, um das Modell zu speichern und erneut zu laden.

Eine alternative Lösung besteht darin, die H2O-Modelle des Typs POJO or MOJO zu verwenden. Dieses Format für Modelle exportiert das Modell als einfachen Java-Code und ist nicht an eine bestimmte Version von H2O gebunden. Es erfordert auch nicht, dass der H2O-Cluster ausgeführt wird, wenn Sie Vorhersagen für Testdaten generieren. Dies ist normalerweise das, was Sie verwenden möchten, wenn Sie Ihre H2O-Modelle zur Produktion bringen.

Verwandte Themen