Driverless AI k-LIME MOJO Reason Code Pipeline - Java Runtime¶
For completed MLI experiments, users can download the k-LIME MOJO. The k-LIME MOJO Reason Code Pipeline is a reason code engine that can be deployed in any Java environment to generate reason codes in real time.
Note: This reason code pipeline is not currently available for multinomial experiments.
Prerequisites¶
The following are required in order to run the k-LIME MOJO reason code pipeline.
Java 7 runtime (JDK 1.7) or newer. Note: Using Java 11+ is recommended due to a bug in Java. For more information, see https://bugs.openjdk.java.net/browse/JDK-8186464.
Valid Driverless AI license. You can download the
license.sig
file from the machine hosting Driverless AI (usually in the license folder). Copy the license file into the downloadedmojo-pipeline
folder.mojo2-runtime.jar file. This is available from the top navigation menu in the Driverless AI UI and in the downloaded mojo-pipeline.zip file for an experiment.
License Specification¶
Driverless AI requires a license to be specified in order to run any DAI/MLI MOJO. The license can be specified with one of the following:
An environment variable:
DRIVERLESS_AI_LICENSE_FILE
: Path to the Driverless AI license file, orDRIVERLESS_AI_LICENSE_KEY
: The Driverless AI license key (Base64 encoded string)
A system property of JVM (
-D
option):ai.h2o.mojos.runtime.license.file
: Path to the Driverless AI license file, orai.h2o.mojos.runtime.license.key
: The Driverless AI license key (Base64 encoded string)
An application classpath:
The license is loaded from a resource called
/license.sig
.The default resource name can be changed via the JVM system property
ai.h2o.mojos.runtime.license.filename
.
For example:
# Specify the license via a temporary environment variable
export DRIVERLESS_AI_LICENSE_FILE="path/to/license.sig"
k-LIME Reason Code Pipeline Files¶
The klime_mojo folder includes the following files/folders:
domains:
experimental:
model.ini:
models:
Quickstart¶
On the completed MLI page, click on the Download k-LIME MOJO Reason Code Pipeline button.
To run the Java application for reason code generation directly, use the following command:
java -Dai.h2o.mojos.runtime.license.file=license.sig -cp mojo2-runtime.jar ai.h2o.mojos.ExecuteMojo klime_mojo.zip example.csv
k-LIME MOJO Command Line Options¶
Executing the Java Runtime¶
The following is an example of how the Java runtime can be executed from the command line:
java <JVM options> -cp mojo2-runtime-x.y.z.jar:your-other.jar:many-more-libs.jar ai.h2o.mojos.ExecuteMojo path-to/klime_mojo.zip path-to/input.csv path-to/output.csv
The following is an example of how the Java runtime can be executed if additional libraries are not needed:
java <JVM options> -jar mojo2-runtime-x.y.z.jar path-to/klime_mojo.zip path-to/input.csv path-to/output.csv
Note: Data can be streamed from stdin to stdout by replacing both the input and output CSV arguments with `-`.
JVM Options¶
keepCarriageReturn
(boolean) - Specify whether to keep the carriage return after parsing. This value defaults to True.stripCrFromLastColumn
(boolean) - Workaround for issues relating to the OpenCSV parser. This value defaults to True.quotedHeaders
(boolean) - Specify whether to quote header names in the output CSV file. This value defaults to False.separator
(char) - Specify the separator used between CSV fields. The special value `TAB` can be used for tab-separated values. This value defaults to `,`.escapeChar
(char) - Specify the escape character for parsing CSV fields. If this value is not specified, then no escaping is attempted. This value defaults to an empty string.batch
(int) - Specify the number of input records brought into memory for batch processing (determines consumed memory). This value defaults to 1000.pipelineFormats
(string) - When multiple formats are recognized, this option specifies the order in which they are tried. This value defaults to `pbuf,toml,klime,h2o3`.date.formats
(string) - Specify a format for dates. This value defaults to an empty string.exposedInputs
(string) - Specify a comma separated list of input cols that are needed on output. The special value `ALL` takes all inputs. This defaults to a null value.
Execute the MOJO from Java¶
Open a new terminal window. Create an experiment folder and change directories to that folder:
mkdir experiment && cd experiment
Create your main program in the experiment folder by creating a new file called DocsExample.java (for example, with
vim DocsExample.java
). Include the following content:
import ai.h2o.mojos.runtime.MojoPipeline; import ai.h2o.mojos.runtime.frame.MojoFrame; import ai.h2o.mojos.runtime.frame.MojoFrameBuilder; import ai.h2o.mojos.runtime.frame.MojoRowBuilder; import ai.h2o.mojos.runtime.lic.LicenseException; import ai.h2o.mojos.runtime.utils.CsvWritingBatchHandler; import com.opencsv.CSVWriter; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; public class DocsExample { public static void main(String[] args) throws IOException, LicenseException { // Load model and csv final MojoPipeline model = loadMojoFromFileResource("klime_mojo.zip"); // Get and fill the input columns final MojoFrameBuilder frameBuilder = model.getInputFrameBuilder(); final MojoRowBuilder rowBuilder = frameBuilder.getMojoRowBuilder(); rowBuilder.setValue("AGE", "68"); rowBuilder.setValue("RACE", "2"); rowBuilder.setValue("DCAPS", "2"); rowBuilder.setValue("VOL", "0"); rowBuilder.setValue("GLEASON", "6"); frameBuilder.addRow(rowBuilder); // Create a frame which can be transformed by MOJO pipeline final MojoFrame iframe = frameBuilder.toMojoFrame(); // Transform input frame by MOJO pipeline final MojoFrame oframe = model.transform(iframe); // `MojoFrame.debug()` can be used to view the contents of a Frame // oframe.debug(); // Output prediction as CSV final Writer writer = new BufferedWriter(new OutputStreamWriter(System.out)); final CSVWriter csvWriter = new CSVWriter(writer); CsvWritingBatchHandler.csvWriteFrame(csvWriter, oframe, true); } }
Compile the source code with the files of the MOJO runtime (mojo2-runtime.jar) copied into the experiment:
javac -cp mojo2-runtime.jar -J-Xms2g -J-XX:MaxPermSize=128m DocsExample.java
Run the MOJO example with the license (license.sig) copied into the experiment:
# Linux and OS X users java -Dai.h2o.mojos.runtime.license.file=license.sig -cp .:mojo2-runtime.jar DocsExample # Windows users java -Dai.h2o.mojos.runtime.license.file=license.sig -cp .;mojo2-runtime.jar DocsExample
The following output is displayed:
model_pred,cluster,GLEASON,DCAPS,AGE,VOL 0.445133897439256,3.0,-0.09579754094219743,0.1112825797986618,-0.11090914864397795,-0.0