【问题标题】:Using MOJOS in H2O Steam Prediction Service Builder在 H2O 蒸汽预测服务生成器中使用 MOJOS
【发布时间】:2017-09-21 21:42:13
【问题描述】:

h2o 的 Steam 预测服务构建器文档 here 中,它说服务构建器可以编译 h2o pojos(.java 文件)和 mojos(从h2o flow 在我的例子中是一个 .zip(版本 3.10.5.2),我一直以 here 所示的方式使用它。但是,做这样的事情:

给出这个错误:

Problem accessing /makewar. Reason:

    Compilation of pojo failed exit value 1  warning: [options] bootstrap class path not set in conjunction with -source 1.6
error: Class names, 'drf_denials_v4.zip', are only accepted if annotation processing is explicitly requested
1 error
1 warning

那么如何在 servicec builder 中使用 mojo 文件呢?我是否需要使用来自h2o flow 的“导出”模型文件而不是“下载”的 zip 文件?我需要使用 mojos 而不是 .java pojos 的原因是我的模型太大而无法放入可从 h2o flow 下载的 pojo

更新

尝试通过命令使用 CLI:

$ curl -X POST --form mojo=@drf_denials_v4.zip --form jar=@h2o-genmodel.jar localhost:55000/makewar > drf_denials_v4.war
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  106M  100 53.6M  100 52.7M  6748k  6632k  0:00:08  0:00:08 --:--:--  229k

在目录中。包含相关文件,然后使用命令:

prediction-service-builder git:(master)$ java -jar jetty-runner-9.3.9.M1.jar --port 55001 ~/Documents/h2o_production/mojos/drf_denials_v4/drf_denials_v4.war

给出输出:

2017-09-21 12:33:58.226:INFO::main: Logging initialized @232ms
2017-09-21 12:33:58.234:INFO:oejr.Runner:main: Runner
2017-09-21 12:33:58.558:INFO:oejs.Server:main: jetty-9.3.9.M1
2017-09-21 12:33:59.557:WARN:oeja.AnnotationConfiguration:main: ServletContainerInitializers: detected. Class hierarchy: empty
2017-09-21 12:34:00.068 -1000 [main] INFO ServletUtil - modelNames size 1
2017-09-21 12:34:01.285 -1000 [main] INFO ServletUtil - added model drf_denials_v4  new size 1
2017-09-21 12:34:01.290 -1000 [main] INFO ServletUtil - added 1 models
2017-09-21 12:34:01.291:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@4c75cab9{/,file:///tmp/jetty-0.0.0.0-55001-drf_denials_v4.war-_-any-39945022624149883.dir/webapp/,AVAILABLE}{file:///home/reedv/Documents/h2o_production/mojos/drf_denials_v4/drf_denials_v4.war}
2017-09-21 12:34:01.321:INFO:oejs.AbstractConnector:main: Started ServerConnector@176c9571{HTTP/1.1,[http/1.1]}{0.0.0.0:55001}
2017-09-21 12:34:01.322:INFO:oejs.Server:main: Started @3329ms

转到 localhost:55001,并尝试进行预测,我看到:

请注意,使用标签给出了预测,但没有参数输入字段存在,并且我收到 cli 错误消息:

2017-09-21 12:35:11.270:WARN:oejs.ServletHandler:qtp1531448569-12: Error for /info
java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3332)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
    at java.lang.StringBuffer.append(StringBuffer.java:270)
    at java.io.StringWriter.write(StringWriter.java:101)
    at java.io.StringWriter.append(StringWriter.java:143)
    at java.io.StringWriter.append(StringWriter.java:41)
    at com.google.gson.stream.JsonWriter.value(JsonWriter.java:519)
    at com.google.gson.internal.bind.TypeAdapters$5.write(TypeAdapters.java:210)
    at com.google.gson.internal.bind.TypeAdapters$5.write(TypeAdapters.java:194)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.ArrayTypeAdapter.write(ArrayTypeAdapter.java:93)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.ArrayTypeAdapter.write(ArrayTypeAdapter.java:93)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:112)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:239)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:112)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:239)
    at com.google.gson.Gson.toJson(Gson.java:661)
    at com.google.gson.Gson.toJson(Gson.java:640)
    at com.google.gson.Gson.toJson(Gson.java:595)
    at com.google.gson.Gson.toJson(Gson.java:575)
    at InfoServlet.doGet(InfoServlet.java:59)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:837)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)

cli pojo example 有效,但尝试使用我的mojo zip 无效。

【问题讨论】:

    标签: h2o


    【解决方案1】:

    很遗憾,用户界面尚未针对 mojo 功能进行更新。但是,您可以使用命令行使用 mojos 构建战争文件。

    从命令行运行:

    curl -X POST --form mojo=drf_denials_v4.zip --form jar=h2o-genmodel.jar localhost:55000/makewar > example.war

    然后以正常方式运行war文件。

    欲了解更多信息,请参阅:https://github.com/h2oai/steam/tree/master/prediction-service-builder

    【讨论】:

    • 谢谢。来自 github 页面的 cli 示例适用于我,但此命令不适用。我已经更新了我的原始帖子,以添加尝试运行您提供的命令时发生的情况。
    • 看起来您的内存不足。尝试使用-Xmx4g 或类似的东西。然后命令是java -Xmx4g -jar jetty-runner-9.3.9.M1.jar --port 55001 ~/Documents/h2o_production/mojos/drf_denials_v4/drf_denials_v4.war
    • 谢谢,有帮助。我现在可以单击预测并获取更新屏幕截图中的标签,而 cli 中没有任何错误消息。但是就像在更新的屏幕截图中一样,仍然没有输入字段(该模型需要 20 个输入,并且当在 mojo 快速入门示例 (github.com/h2oai/h2o-3/blob/master/h2o-docs/src/product/howto/…) 中使用 java 文件中的 mojo zip 时,我已经成功预测了它们)。这可能是什么原因造成的?检查页面html,好像输入字段没有隐藏。
    • 很高兴听到它有效。我再次怀疑答案是 UI 尚未更新以处理 mojos。使用命令行进行预测应该可以正常工作。然后你会做类似curl -X POST --data '{Var1: Val1}' localhost:55001/predict等的事情。
    • 谢谢。好像是这样的。不幸的是,它也抵消了服务构建器在我的情况下有用的很大一部分原因,因为没有 UI 界面意味着我无法利用分类输入的输入选择下拉菜单。无论如何,谢谢你的知识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2021-05-06
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多