Dans la documentation de h2o
pour le service de prévision Steam Builder, here, il dit que le constructeur de service peut compiler les h2o
pojo
s (fichiers .java) et mojo
s (téléchargés à partir h2o flow
en mon cas en .zip (version 3.10.5.2), que j'ai utilisé de la manière montrée here). Cependant, faire quelque chose comme ceci:L'utilisation Mojos dans H2O service vapeur prévision Builder
donne cette erreur:
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
Alors, comment puis-je utiliser des fichiers de Mojo dans le générateur de servicec? Ai-je besoin d'utiliser le fichier modèle "exporté" de h2o flow
plutôt que le fichier zip "téléchargé"? La raison pour laquelle je dois utiliser mojo
s plutôt que le .java pojo
s est que mon modèle est trop grand pour tenir dans le pojo
téléchargeable à partir de h2o flow
.
UPDATE:
Tenter d'utiliser le CLI avec la commande:
$ curl -X POST --form [email protected]_denials_v4.zip --form [email protected] 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
dans la dir. contenant les fichiers concernés, puis en utilisant la commande:
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
donne la sortie:
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 [email protected]{/,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 [email protected]{HTTP/1.1,[http/1.1]}{0.0.0.0:55001}
2017-09-21 12:34:01.322:INFO:oejs.Server:main: Started @3329ms
Aller à localhost: 55001, et d'essayer de faire une prédiction, je vois:
Notez qu'une prédiction est donnée avec une étiquette, mais il n'y a aucun champ d'entrée de paramètre présent et j'obtiens le message d'erreur 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)
Le cli pojo
example fonctionne, mais en essayant d'utiliser mon zip mojo
ne fonctionne pas.
Merci. L'exemple cli de la page github fonctionne pour moi, mais cette commande ne fonctionne pas. J'ai mis à jour mon post original pour ajouter ce qui s'est passé en essayant d'exécuter votre commande fournie. – lampShadesDrifter
On dirait que vous n'avez plus de mémoire. Essayez avec '-Xmx4g' ou quelque chose comme ça. La commande est alors 'java -Xmx4g -jar jetty-runner-9.3.9.M1.jar --port 55001 ~/Documents/h2o_production/mojos/drf_denials_v4/drf_denials_v4.war' – Magnus
Merci, cela m'a aidé. Je peux maintenant cliquer sur prédire et obtenir une étiquette comme dans la capture d'écran de mise à jour sans aucun message d'erreur dans le cli.Mais comme dans la capture d'écran mise à jour, il n'y a toujours pas de champs de saisie (le modèle prend 20 entrées et je les ai prédites avec succès lors de l'utilisation du zip mojo dans un fichier java comme dans l'exemple mojo quickstart (https://github.com/ h2oai/h2o-3/blob/maître/h2o-docs/src/produit/howto/MOJO_QuickStart.md # étape-2-compiler-et-exécuter-le-mojo)). Qu'est-ce qui peut causer cela? En inspectant la page html, ce n'est pas comme si les champs de saisie étaient cachés. – lampShadesDrifter