systemml-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Federico Wachs <federico.wa...@sqlstream.com>
Subject Re: JMLC and l2-svm.dml
Date Wed, 30 Aug 2017 01:36:50 GMT
Thanks a lot!! I implemented your suggestions and the difference in
performance is notable.
On Mon, Aug 28, 2017 at 6:12 PM Matthias Boehm <mboehm7@googlemail.com>
wrote:

> ad 1: Yes, you're right - this specific function with String input is
> indeed missing. You have a couple of choices here but the easiest way
> would be to create an input stream from your String via
> IOUtilFunctions.toInputStream which can be fed into
> convertToDoubleMatrix or convertToMatrix. The latter avoids unnecessary
> conversions and improves memory efficiency for large models.
> Alternatively, could also specify the format as part of a json meta data
> argument to convertToDoubleMatrix or convertToMatrix.
>
> ad 2: I was simply saying that the registered inputs for l2svm predict
> should be "new String[]{"w","X"}" not "String[]{"model","X"}" as in your
> original example.
>
> Regards,
> Matthias
>
> On 8/28/2017 4:53 PM, Federico Wachs wrote:
> > Matthias, thanks for replying in such short notice.
> >
> > A couple of things I wanted to know from your response:
> >
> > 1. conn.convertToDoubleMatrix(conn.readScript(model), rows, cols, "csv").
> > This takes in an InputStream and conn.readScript does not return that.
> > Which API should I use instead?
> >
> > 2. pstmt = conn.prepareScript(conn.readScript(dml), new String[] { "w",
> "X"
> > }, new String[] { "predicted_y" }, false): is the code I posted and I
> don't
> > understand how it differs from what you said on point 2:
> > "So please change it as follows:
> > conn.prepareScript(conn.readScript(dml), new String[] {"w", "X"}, new
> String[]
> > {"predicted_y"}, "
> >
> > Thanks!
> >
> >
> >
> >
> > On Fri, Aug 25, 2017 at 4:06 PM Matthias Boehm <mboehm7@googlemail.com>
> > wrote:
> >
> >> thanks for reaching out - let us quickly go through these issues to
> >> demystify them:
> >>
> >> 1) Matrix text formats: Apart from binary representations, we support
> the
> >> following text matrix formats: "mm" (matrix market), "text" (like matrix
> >> market but without the meta data header), and "csv". The sparse "text"
> >> format is our default. You had a csv representation but (without
> specifying
> >> the format) you tried to read it as "text" which failed on parsing the
> >> first column as row index. You can use something like that
> >>
> >> conn.convertToDoubleMatrix(conn.readScript(model), rows, cols, "csv")
> >>
> >> 2) Parameter binding: Furthermore, note that matrix inputs (and any
> other
> >> inputs) should be bound to the left-hand-side variable name. So please
> >> change it as follows
> >>
> >> conn.prepareScript(conn.readScript(dml), new String[] {"w", "X"}, new
> >> String[] {"predicted_y"},
> >>
> >> 3) Model reuse: In order to ensure low-latency scoring even for
> relatively
> >> large models, you might want to mark your model as reused input. You
> can do
> >> that as follows while setting up your prepared statement. This converts
> the
> >> model just once and reuses the internal representation over multiple
> >> invocations of executeScript.
> >>
> >> pstmt.setMatrix("w", wData, true);
> >>
> >>
> >> Regards,
> >> Matthias
> >>
> >> On Fri, Aug 25, 2017 at 9:48 AM, Federico Wachs <
> >> federico.wachs@sqlstream.com> wrote:
> >>
> >>> Nevermind. I actually found out that I could change the output to write
> >> to
> >>> the model file from csv to text which actually writes the matrix.
> >>>
> >>> Thanks,
> >>>
> >>> On Fri, Aug 25, 2017 at 11:02 AM Federico Wachs <
> >>> federico.wachs@sqlstream.com> wrote:
> >>>
> >>>> Hi all,
> >>>>
> >>>> I've been able to follow the steps showed here
> >>>> <http://apache.github.io/systemml/standalone-guide#
> >>> training-and-testing-the-model> and
> >>>> I want to use the created model from JMLC.
> >>>>
> >>>> But when I try to load the model like this:
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> *String dml =
> >>>> "/home/fwachs/work/systemml/scripts/algorithms/l2-svm-
> >>> predict.dml";String
> >>>> model = "/home/fwachs/Downloads/l2-svm-model.csv";Connection conn =
> new
> >>>> Connection();*
> >>>>
> >>>>
> >>>> *PreparedScript pstmt = conn.prepareScript(conn.readScript(dml), new
> >>>> String[] { "model", "X" }, new String[] { "predicted_y" },
> >>>> false);double[][] W =
> >> conn.convertToDoubleMatrix(conn.readScript(model),
> >>> 1,
> >>>> 1);System.out.println(W);*
> >>>>
> >>>> I get the following error:
> >>>>
> >>>> 17/08/25 07:01:02 WARN rewrite.RewriteRemovePersistentReadWrite:
> >>>> Non-registered persistent read of variable 'w' (line 44).
> >>>> Exception in thread "main" java.io.IOException: Matrix cell [0,0] out
> >> of
> >>>> overall matrix range [1:1,1:1].
> >>>> at
> >>>> org.apache.sysml.runtime.io.ReaderTextCell.
> >>> readRawTextCellMatrixFromInputStream(ReaderTextCell.java:236)
> >>>> at
> >>>> org.apache.sysml.runtime.io.ReaderTextCell.readMatrixFromInputStream(
> >>> ReaderTextCell.java:90)
> >>>> at
> >>>> org.apache.sysml.api.jmlc.Connection.convertToDoubleMatrix(
> >>> Connection.java:413)
> >>>> at
> >>>> org.apache.sysml.api.jmlc.Connection.convertToDoubleMatrix(
> >>> Connection.java:382)
> >>>> at
> >>>> org.apache.sysml.api.jmlc.Connection.convertToDoubleMatrix(
> >>> Connection.java:368)
> >>>> at com.sqlstream.plugin.systemml.SystemmlUdx.main(SystemmlUdx.java:65)
> >>>> Caused by: java.lang.NumberFormatException: For input string:
> >>>> "-2.0851945931025258"
> >>>>
> >>>> It seems the csv generated is not a matrix at all, since it contains
> >> the
> >>>> following content:
> >>>>
> >>>> -2.0851945931025258
> >>>> 6.006153060967643
> >>>> 3.094544228625507
> >>>> -0.43162666659496396
> >>>> 1.0
> >>>> 0
> >>>> 0
> >>>> 4.0
> >>>>
> >>>>
> >>>> Any ideas? I am so stuck on this...
> >>>>
> >>>> Thanks,
> >>>> --
> >>>> Federico Wachs | sqlstream | +54 911 5748 5048
> >>>>
> >>> --
> >>> Federico Wachs | sqlstream | +54 911 5748 5048
> >>>
> >>
>
-- 
Federico Wachs | sqlstream | +54 911 5748 5048

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message