2017-09-21 1 views
1

Dans la documentation de h2o pour le service de prévision Steam Builder, here, il dit que le constructeur de service peut compiler les h2opojo 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

enter image description here

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: enter image description here

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 pojoexample fonctionne, mais en essayant d'utiliser mon zip mojo ne fonctionne pas.

Répondre

1

Malheureusement, l'interface utilisateur n'a pas encore été mise à jour pour la fonctionnalité mojo. Vous pouvez cependant utiliser la ligne de commande pour construire des fichiers war avec des mojos.

Exécuter ce à partir de votre ligne de commande:

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

Ensuite, exécutez le fichier de guerre de façon normale. Pour plus d'informations, voir: https://github.com/h2oai/steam/tree/master/prediction-service-builder

+0

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

+0

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

+0

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