Не удается импортировать модель binay h2o с помощью функции h2o.loadModel(): 412 Сбой предварительного условия
Я работал с 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
Я использую последнюю версию H2O, 3.15.0.4029, на RStudio, macOS Sierra (10.12.6 (16G29))
ОБНОВЛЕНИЕ: в соответствии с просьбой Эрин, публикуя, как я пытался импортировать модель:
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
1 ответ
Если вы видите ошибку, которая выглядит следующим образом (ключевым идентификатором является этот оператор 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"
Тогда это, вероятно, означает, что вы использовали другую версию H2O для обучения и сохранения модели, чем вы используете для загрузки модели H2O. Это проблема, потому что бинарные модели (модели, сохраненные с использованием h2o.saveModel()
функция) не совместимы между различными версиями H2O.
Простое решение - использовать ту же версию H2O для сохранения и перезагрузки модели.
Альтернативным решением является использование моделей H2O типа POJO или MOJO. Этот формат для моделей экспортирует модель в виде простого кода Java и не привязан к конкретной версии H2O. Также не требуется, чтобы кластер H2O работал при создании прогнозов на тестовых данных. Как правило, это то, что вы хотели бы использовать, если бы вам пришлось брать свои модели H2O в производство.