IGNITE-10727: [ML] InfModel and Model merging

This closes #5723


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/2dc0d9f7
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/2dc0d9f7
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/2dc0d9f7

Branch: refs/heads/master
Commit: 2dc0d9f75c2e83a4d81c277fbd8b7f0cae4dc869
Parents: 59b3a48
Author: Anton Dmitriev <[email protected]>
Authored: Fri Dec 28 13:48:12 2018 +0300
Committer: Yury Babak <[email protected]>
Committed: Fri Dec 28 13:48:13 2018 +0300

----------------------------------------------------------------------
 .../clustering/KMeansClusterizationExample.java |   2 +-
 ...niteFunctionDistributedInferenceExample.java | 100 -----
 .../IgniteModelDistributedInferenceExample.java | 100 +++++
 .../ml/inference/ModelStorageExample.java       |  22 +-
 .../TensorFlowDistributedInferenceExample.java  |  20 +-
 .../TensorFlowLocalInferenceExample.java        |  20 +-
 .../TensorFlowThreadedInferenceExample.java     |  20 +-
 .../ml/knn/ANNClassificationExample.java        |   2 +-
 .../ml/knn/KNNClassificationExample.java        |   2 +-
 .../examples/ml/knn/KNNRegressionExample.java   |   2 +-
 .../OneVsRestClassificationExample.java         |   4 +-
 .../DiscreteNaiveBayesTrainerExample.java       |   2 +-
 .../GaussianNaiveBayesTrainerExample.java       |   2 +-
 .../examples/ml/nn/MLPTrainerExample.java       |   2 +-
 .../LinearRegressionLSQRTrainerExample.java     |   2 +-
 ...ssionLSQRTrainerWithMinMaxScalerExample.java |   2 +-
 .../LinearRegressionSGDTrainerExample.java      |   2 +-
 .../LogisticRegressionSGDTrainerExample.java    |   2 +-
 .../split/TrainTestDatasetSplitterExample.java  |   2 +-
 .../ml/svm/SVMBinaryClassificationExample.java  |   2 +-
 ...ecisionTreeClassificationTrainerExample.java |   2 +-
 .../DecisionTreeRegressionTrainerExample.java   |   2 +-
 .../GDBOnTreesClassificationTrainerExample.java |   2 +-
 .../GDBOnTreesRegressionTrainerExample.java     |   4 +-
 .../RandomForestClassificationExample.java      |   2 +-
 .../RandomForestRegressionExample.java          |   2 +-
 .../ml/xgboost/XGBoostModelParserExample.java   |  18 +-
 .../java/org/apache/ignite/ml/Exportable.java   |   2 +-
 .../java/org/apache/ignite/ml/IgniteModel.java  |  59 +++
 .../main/java/org/apache/ignite/ml/Model.java   |  59 ---
 .../ignite/ml/clustering/kmeans/Clusterer.java  |   4 +-
 .../clustering/kmeans/ClusterizationModel.java  |   4 +-
 .../ml/clustering/kmeans/KMeansModel.java       |   2 +-
 .../ml/composition/ModelOnFeaturesSubspace.java |  14 +-
 .../ml/composition/ModelsComposition.java       |  14 +-
 .../ml/composition/ModelsCompositionFormat.java |   8 +-
 .../boosting/GDBLearningStrategy.java           |  20 +-
 .../ml/composition/boosting/GDBTrainer.java     |  12 +-
 .../convergence/ConvergenceChecker.java         |   2 +-
 .../stacking/SimpleStackedDatasetTrainer.java   |   6 +-
 .../stacking/StackedDatasetTrainer.java         |  40 +-
 .../ml/composition/stacking/StackedModel.java   |  16 +-
 .../stacking/StackedVectorDatasetTrainer.java   |  10 +-
 .../ml/environment/logging/ConsoleLogger.java   |   4 +-
 .../ml/environment/logging/CustomMLLogger.java  |   4 +-
 .../ignite/ml/environment/logging/MLLogger.java |   4 +-
 .../ml/environment/logging/NoOpLogger.java      |   4 +-
 .../apache/ignite/ml/inference/InfModel.java    |  39 --
 .../org/apache/ignite/ml/inference/Model.java   |  37 ++
 .../ignite/ml/inference/ModelDescriptor.java    |  18 +-
 .../inference/builder/AsyncInfModelBuilder.java |  43 ---
 .../ml/inference/builder/AsyncModelBuilder.java |  43 +++
 .../IgniteDistributedInfModelBuilder.java       | 368 -------------------
 .../builder/IgniteDistributedModelBuilder.java  | 368 +++++++++++++++++++
 .../builder/SingleInfModelBuilder.java          |  34 --
 .../inference/builder/SingleModelBuilder.java   |  34 ++
 .../inference/builder/SyncInfModelBuilder.java  |  42 ---
 .../ml/inference/builder/SyncModelBuilder.java  |  42 +++
 .../builder/ThreadedInfModelBuilder.java        |  86 -----
 .../inference/builder/ThreadedModelBuilder.java |  86 +++++
 .../parser/IgniteFunctionInfModelParser.java    |  76 ----
 .../ml/inference/parser/IgniteModelParser.java  |  49 +++
 .../ml/inference/parser/InfModelParser.java     |  38 --
 .../ignite/ml/inference/parser/ModelParser.java |  38 ++
 .../parser/TensorFlowBaseInfModelParser.java    | 216 -----------
 .../parser/TensorFlowBaseModelParser.java       | 216 +++++++++++
 .../parser/TensorFlowGraphInfModelParser.java   |  40 --
 .../parser/TensorFlowGraphModelParser.java      |  40 ++
 .../TensorFlowSavedModelInfModelParser.java     |  70 ----
 .../parser/TensorFlowSavedModelModelParser.java |  70 ++++
 .../reader/FileSystemInfModelReader.java        |  61 ---
 .../inference/reader/FileSystemModelReader.java |  61 +++
 .../reader/InMemoryInfModelReader.java          |  67 ----
 .../inference/reader/InMemoryModelReader.java   |  67 ++++
 .../ml/inference/reader/InfModelReader.java     |  33 --
 .../ignite/ml/inference/reader/ModelReader.java |  33 ++
 .../reader/ModelStorageInfModelReader.java      |  64 ----
 .../reader/ModelStorageModelReader.java         |  64 ++++
 .../ignite/ml/knn/NNClassificationModel.java    |   4 +-
 .../ml/knn/ann/ANNClassificationModel.java      |   2 +-
 .../classification/KNNClassificationModel.java  |   2 +-
 .../ml/knn/regression/KNNRegressionModel.java   |   2 +-
 .../ignite/ml/multiclass/MultiClassModel.java   |   8 +-
 .../ignite/ml/multiclass/OneVsRestTrainer.java  |   4 +-
 .../discrete/DiscreteNaiveBayesModel.java       |   6 +-
 .../gaussian/GaussianNaiveBayesModel.java       |   6 +-
 .../ignite/ml/nn/MultilayerPerceptron.java      |   6 +-
 .../ml/optimization/SmoothParametrized.java     |   4 +-
 .../org/apache/ignite/ml/pipeline/Pipeline.java |   4 +-
 .../apache/ignite/ml/pipeline/PipelineMdl.java  |  14 +-
 .../linear/LinearRegressionModel.java           |   6 +-
 .../logistic/LogisticRegressionModel.java       |   6 +-
 .../ignite/ml/selection/cv/CrossValidation.java |   4 +-
 .../cursor/CacheBasedLabelPairCursor.java       |  10 +-
 .../scoring/cursor/LocalLabelPairCursor.java    |   8 +-
 .../BinaryClassificationEvaluator.java          |  26 +-
 .../ml/svm/SVMLinearClassificationModel.java    |   6 +-
 .../ml/trainers/AdaptableDatasetModel.java      |  14 +-
 .../ml/trainers/AdaptableDatasetTrainer.java    |   6 +-
 .../ignite/ml/trainers/DatasetTrainer.java      |   4 +-
 .../ml/trainers/MultiLabelDatasetTrainer.java   |   4 +-
 .../ml/trainers/SingleLabelDatasetTrainer.java  |   4 +-
 .../ignite/ml/trainers/TrainerTransformers.java |  14 +-
 .../ml/tree/DecisionTreeConditionalNode.java    |   6 +-
 .../ignite/ml/tree/DecisionTreeLeafNode.java    |   2 +-
 .../apache/ignite/ml/tree/DecisionTreeNode.java |   4 +-
 .../boosting/GDBOnTreesLearningStrategy.java    |  10 +-
 .../tree/randomforest/RandomForestTrainer.java  |   4 +-
 .../ml/tree/randomforest/data/TreeNode.java     |  10 +-
 .../ml/tree/randomforest/data/TreeRoot.java     |   8 +-
 .../java/org/apache/ignite/ml/TestUtils.java    |   4 +-
 .../ignite/ml/clustering/KMeansModelTest.java   |   8 +-
 .../ignite/ml/clustering/KMeansTrainerTest.java |  12 +-
 .../org/apache/ignite/ml/common/ModelTest.java  |  10 +-
 .../ignite/ml/composition/BaggingTest.java      |  18 +-
 .../ignite/ml/composition/StackingTest.java     |  20 +-
 .../ml/composition/boosting/GDBTrainerTest.java |  18 +-
 .../convergence/ConvergenceCheckerTest.java     |   4 +-
 .../ml/environment/LearningEnvironmentTest.java |  14 +-
 .../ignite/ml/inference/InferenceTestSuite.java |  26 +-
 .../IgniteDistributedInfModelBuilderTest.java   |  72 ----
 .../IgniteDistributedModelBuilderTest.java      |  72 ++++
 .../builder/InfModelBuilderTestUtil.java        |  53 ---
 .../inference/builder/ModelBuilderTestUtil.java |  53 +++
 .../builder/SingleInfModelBuilderTest.java      |  42 ---
 .../builder/SingleModelBuilderTest.java         |  42 +++
 .../builder/ThreadedInfModelBuilderTest.java    |  44 ---
 .../builder/ThreadedModelBuilderTest.java       |  44 +++
 .../ignite/ml/knn/KNNClassificationTest.java    |  18 +-
 .../apache/ignite/ml/knn/KNNRegressionTest.java |  12 +-
 .../ml/multiclass/OneVsRestTrainerTest.java     |   8 +-
 .../discrete/DiscreteNaiveBayesModelTest.java   |   2 +-
 .../discrete/DiscreteNaiveBayesTest.java        |   2 +-
 .../gaussian/GaussianNaiveBayesModelTest.java   |   2 +-
 .../gaussian/GaussianNaiveBayesTest.java        |   4 +-
 .../gaussian/GaussianNaiveBayesTrainerTest.java |   4 +-
 .../java/org/apache/ignite/ml/nn/MLPTest.java   |   8 +-
 .../ignite/ml/nn/MLPTrainerIntegrationTest.java |   2 +-
 .../org/apache/ignite/ml/nn/MLPTrainerTest.java |   6 +-
 .../MLPTrainerMnistIntegrationTest.java         |   2 +-
 .../ml/nn/performance/MLPTrainerMnistTest.java  |   2 +-
 .../ignite/ml/pipeline/PipelineMdlTest.java     |  10 +-
 .../apache/ignite/ml/pipeline/PipelineTest.java |   8 +-
 .../linear/LinearRegressionModelTest.java       |  12 +-
 .../logistic/LogisticRegressionModelTest.java   |  12 +-
 .../LogisticRegressionSGDTrainerTest.java       |  12 +-
 .../ignite/ml/svm/SVMBinaryTrainerTest.java     |   8 +-
 .../org/apache/ignite/ml/svm/SVMModelTest.java  |  28 +-
 .../DecisionTreeMNISTIntegrationTest.java       |   2 +-
 .../tree/performance/DecisionTreeMNISTTest.java |   2 +-
 .../RandomForestClassifierTrainerTest.java      |   4 +-
 .../RandomForestRegressionTrainerTest.java      |   4 +-
 .../ml/tree/randomforest/data/TreeNodeTest.java |   4 +-
 .../ignite/ml/xgboost/XGModelComposition.java   |   8 +-
 .../ignite/ml/xgboost/parser/XGModelParser.java |   4 +-
 .../xgboost/parser/XGBoostModelParserTest.java  |  14 +-
 156 files changed, 2069 insertions(+), 2084 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java
index 44c4256..46550f3 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java
@@ -82,7 +82,7 @@ public class KMeansClusterizationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     System.out.printf(">>> | %.4f\t\t\t| %.4f\t\t|\n", 
prediction, groundTruth);
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteFunctionDistributedInferenceExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteFunctionDistributedInferenceExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteFunctionDistributedInferenceExample.java
deleted file mode 100644
index 58ddde7..0000000
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteFunctionDistributedInferenceExample.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.inference;
-
-import java.io.IOException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import javax.cache.Cache;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.ScanQuery;
-import 
org.apache.ignite.examples.ml.regression.linear.LinearRegressionLSQRTrainerExample;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.IgniteDistributedInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.IgniteFunctionInfModelParser;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import org.apache.ignite.ml.inference.reader.InMemoryInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.regressions.linear.LinearRegressionLSQRTrainer;
-import org.apache.ignite.ml.regressions.linear.LinearRegressionModel;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
-
-/**
- * This example is based on {@link LinearRegressionLSQRTrainerExample}, but to 
perform inference it uses an approach
- * implemented in {@link org.apache.ignite.ml.inference} package.
- */
-public class IgniteFunctionDistributedInferenceExample {
-    /** Run example. */
-    public static void main(String... args) throws IOException, 
ExecutionException, InterruptedException {
-        System.out.println();
-        System.out.println(">>> Linear regression model over cache based 
dataset usage example started.");
-        // Start ignite grid.
-        try (Ignite ignite = 
Ignition.start("examples/config/example-ignite.xml")) {
-            System.out.println(">>> Ignite grid started.");
-
-            IgniteCache<Integer, Vector> dataCache = new SandboxMLCache(ignite)
-                .fillCacheWith(MLSandboxDatasets.MORTALITY_DATA);
-
-            System.out.println(">>> Create new linear regression trainer 
object.");
-            LinearRegressionLSQRTrainer trainer = new 
LinearRegressionLSQRTrainer();
-
-            System.out.println(">>> Perform the training to get the model.");
-            LinearRegressionModel mdl = trainer.fit(
-                ignite,
-                dataCache,
-                (k, v) -> v.copyOfRange(1, v.size()),
-                (k, v) -> v.get(0)
-            );
-
-            System.out.println(">>> Linear regression model: " + mdl);
-
-            System.out.println(">>> Preparing model reader and model parser.");
-            InfModelReader reader = new InMemoryInfModelReader(mdl);
-            InfModelParser<Vector, Double, ?> parser = new 
IgniteFunctionInfModelParser<>();
-            try (InfModel<Vector, Future<Double>> infMdl = new 
IgniteDistributedInfModelBuilder(ignite, 4, 4)
-                .build(reader, parser)) {
-                System.out.println(">>> Inference model is ready.");
-
-                System.out.println(">>> ---------------------------------");
-                System.out.println(">>> | Prediction\t| Ground Truth\t|");
-                System.out.println(">>> ---------------------------------");
-
-                try (QueryCursor<Cache.Entry<Integer, Vector>> observations = 
dataCache.query(new ScanQuery<>())) {
-                    for (Cache.Entry<Integer, Vector> observation : 
observations) {
-                        Vector val = observation.getValue();
-                        Vector inputs = val.copyOfRange(1, val.size());
-                        double groundTruth = val.get(0);
-
-                        double prediction = infMdl.apply(inputs).get();
-
-                        System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", 
prediction, groundTruth);
-                    }
-                }
-            }
-
-            System.out.println(">>> ---------------------------------");
-
-            System.out.println(">>> Linear regression model over cache based 
dataset usage example completed.");
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java
new file mode 100644
index 0000000..8a43a79
--- /dev/null
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.examples.ml.inference;
+
+import java.io.IOException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import javax.cache.Cache;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.cache.query.QueryCursor;
+import org.apache.ignite.cache.query.ScanQuery;
+import 
org.apache.ignite.examples.ml.regression.linear.LinearRegressionLSQRTrainerExample;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilder;
+import org.apache.ignite.ml.inference.parser.IgniteModelParser;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.reader.InMemoryModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.regressions.linear.LinearRegressionLSQRTrainer;
+import org.apache.ignite.ml.regressions.linear.LinearRegressionModel;
+import org.apache.ignite.ml.util.MLSandboxDatasets;
+import org.apache.ignite.ml.util.SandboxMLCache;
+
+/**
+ * This example is based on {@link LinearRegressionLSQRTrainerExample}, but to 
perform inference it uses an approach
+ * implemented in {@link org.apache.ignite.ml.inference} package.
+ */
+public class IgniteModelDistributedInferenceExample {
+    /** Run example. */
+    public static void main(String... args) throws IOException, 
ExecutionException, InterruptedException {
+        System.out.println();
+        System.out.println(">>> Linear regression model over cache based 
dataset usage example started.");
+        // Start ignite grid.
+        try (Ignite ignite = 
Ignition.start("examples/config/example-ignite.xml")) {
+            System.out.println(">>> Ignite grid started.");
+
+            IgniteCache<Integer, Vector> dataCache = new SandboxMLCache(ignite)
+                .fillCacheWith(MLSandboxDatasets.MORTALITY_DATA);
+
+            System.out.println(">>> Create new linear regression trainer 
object.");
+            LinearRegressionLSQRTrainer trainer = new 
LinearRegressionLSQRTrainer();
+
+            System.out.println(">>> Perform the training to get the model.");
+            LinearRegressionModel mdl = trainer.fit(
+                ignite,
+                dataCache,
+                (k, v) -> v.copyOfRange(1, v.size()),
+                (k, v) -> v.get(0)
+            );
+
+            System.out.println(">>> Linear regression model: " + mdl);
+
+            System.out.println(">>> Preparing model reader and model parser.");
+            ModelReader reader = new InMemoryModelReader(mdl);
+            ModelParser<Vector, Double, ?> parser = new IgniteModelParser<>();
+            try (Model<Vector, Future<Double>> infMdl = new 
IgniteDistributedModelBuilder(ignite, 4, 4)
+                .build(reader, parser)) {
+                System.out.println(">>> Inference model is ready.");
+
+                System.out.println(">>> ---------------------------------");
+                System.out.println(">>> | Prediction\t| Ground Truth\t|");
+                System.out.println(">>> ---------------------------------");
+
+                try (QueryCursor<Cache.Entry<Integer, Vector>> observations = 
dataCache.query(new ScanQuery<>())) {
+                    for (Cache.Entry<Integer, Vector> observation : 
observations) {
+                        Vector val = observation.getValue();
+                        Vector inputs = val.copyOfRange(1, val.size());
+                        double groundTruth = val.get(0);
+
+                        double prediction = infMdl.predict(inputs).get();
+
+                        System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", 
prediction, groundTruth);
+                    }
+                }
+            }
+
+            System.out.println(">>> ---------------------------------");
+
+            System.out.println(">>> Linear regression model over cache based 
dataset usage example completed.");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java
index a32d137..3f1d923 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/ModelStorageExample.java
@@ -26,17 +26,17 @@ import java.io.Serializable;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.IgniteModel;
+import org.apache.ignite.ml.inference.Model;
 import org.apache.ignite.ml.inference.ModelDescriptor;
 import org.apache.ignite.ml.inference.ModelSignature;
-import org.apache.ignite.ml.inference.builder.SingleInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.IgniteFunctionInfModelParser;
-import org.apache.ignite.ml.inference.reader.ModelStorageInfModelReader;
+import org.apache.ignite.ml.inference.builder.SingleModelBuilder;
+import org.apache.ignite.ml.inference.parser.IgniteModelParser;
+import org.apache.ignite.ml.inference.reader.ModelStorageModelReader;
 import 
org.apache.ignite.ml.inference.storage.descriptor.ModelDescriptorStorage;
 import 
org.apache.ignite.ml.inference.storage.descriptor.ModelDescriptorStorageFactory;
 import org.apache.ignite.ml.inference.storage.model.ModelStorage;
 import org.apache.ignite.ml.inference.storage.model.ModelStorageFactory;
-import org.apache.ignite.ml.math.functions.IgniteFunction;
 
 /**
  * This example demonstrates how to work with {@link ModelStorage}.
@@ -51,7 +51,7 @@ public class ModelStorageExample {
             ModelDescriptorStorage descStorage = new 
ModelDescriptorStorageFactory().getModelDescriptorStorage(ignite);
 
             System.out.println("Saving model into model storage...");
-            byte[] mdl = serialize((IgniteFunction<byte[], byte[]>)i -> i);
+            byte[] mdl = serialize((IgniteModel<byte[], byte[]>)i -> i);
             storage.mkdirs("/");
             storage.putFile("/my_model", mdl);
 
@@ -60,8 +60,8 @@ public class ModelStorageExample {
                 "MyModel",
                 "My Cool Model",
                 new ModelSignature("", "", ""),
-                new ModelStorageInfModelReader("/my_model"),
-                new IgniteFunctionInfModelParser<>()
+                new ModelStorageModelReader("/my_model"),
+                new IgniteModelParser<>()
             );
             descStorage.put("my_model", desc);
 
@@ -73,12 +73,12 @@ public class ModelStorageExample {
             desc = descStorage.get("my_model");
 
             System.out.println("Build inference model...");
-            SingleInfModelBuilder mdlBuilder = new SingleInfModelBuilder();
-            try (InfModel<byte[], byte[]> infMdl = 
mdlBuilder.build(desc.getReader(), desc.getParser())) {
+            SingleModelBuilder mdlBuilder = new SingleModelBuilder();
+            try (Model<byte[], byte[]> infMdl = 
mdlBuilder.build(desc.getReader(), desc.getParser())) {
 
                 System.out.println("Make inference...");
                 for (int i = 0; i < 10; i++) {
-                    Integer res = deserialize(infMdl.apply(serialize(i)));
+                    Integer res = deserialize(infMdl.predict(serialize(i)));
                     System.out.println(i + " -> " + res);
                 }
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
index a1e3b21..a81da7f 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
@@ -29,12 +29,12 @@ import java.util.concurrent.Future;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.IgniteDistributedInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import 
org.apache.ignite.ml.inference.parser.TensorFlowSavedModelInfModelParser;
-import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilder;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelModelParser;
+import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.ml.util.MnistUtils;
 import org.tensorflow.Tensor;
 
@@ -59,9 +59,9 @@ public class TensorFlowDistributedInferenceExample {
             if (mdlRsrc == null)
                 throw new IllegalArgumentException("Resource not found 
[resource_path=" + MODEL_PATH + "]");
 
-            InfModelReader reader = new 
FileSystemInfModelReader(mdlRsrc.getPath());
+            ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
 
-            InfModelParser<double[], Long, ?> parser = new 
TensorFlowSavedModelInfModelParser<double[], Long>("serve")
+            ModelParser<double[], Long, ?> parser = new 
TensorFlowSavedModelModelParser<double[], Long>("serve")
 
                 .withInput("Placeholder", doubles -> {
                     float[][][] reshaped = new float[1][28][28];
@@ -82,11 +82,11 @@ public class TensorFlowDistributedInferenceExample {
 
             long t0 = System.currentTimeMillis();
 
-            try (InfModel<double[], Future<Long>> threadedMdl = new 
IgniteDistributedInfModelBuilder(ignite, 4, 4)
+            try (Model<double[], Future<Long>> threadedMdl = new 
IgniteDistributedModelBuilder(ignite, 4, 4)
                 .build(reader, parser)) {
                 List<Future<?>> futures = new ArrayList<>(images.size());
                 for (MnistUtils.MnistLabeledImage image : images)
-                    futures.add(threadedMdl.apply(image.getPixels()));
+                    futures.add(threadedMdl.predict(image.getPixels()));
                 for (Future<?> f : futures)
                     f.get();
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
index d5ccbd7..baa1f00 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
@@ -24,12 +24,12 @@ import java.util.List;
 import java.util.Objects;
 import java.util.Random;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.SingleInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import 
org.apache.ignite.ml.inference.parser.TensorFlowSavedModelInfModelParser;
-import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.SingleModelBuilder;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelModelParser;
+import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.ml.util.MnistUtils;
 import org.tensorflow.Tensor;
 
@@ -52,9 +52,9 @@ public class TensorFlowLocalInferenceExample {
         if (mdlRsrc == null)
             throw new IllegalArgumentException("Resource not found 
[resource_path=" + MODEL_PATH + "]");
 
-        InfModelReader reader = new 
FileSystemInfModelReader(mdlRsrc.getPath());
+        ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
 
-        InfModelParser<double[], Long, ?> parser = new 
TensorFlowSavedModelInfModelParser<double[], Long>("serve")
+        ModelParser<double[], Long, ?> parser = new 
TensorFlowSavedModelModelParser<double[], Long>("serve")
             .withInput("Placeholder", doubles -> {
                 float[][][] reshaped = new float[1][28][28];
                 for (int i = 0; i < doubles.length; i++)
@@ -73,9 +73,9 @@ public class TensorFlowLocalInferenceExample {
 
         long t0 = System.currentTimeMillis();
 
-        try (InfModel<double[], Long> locMdl = new 
SingleInfModelBuilder().build(reader, parser)) {
+        try (Model<double[], Long> locMdl = new 
SingleModelBuilder().build(reader, parser)) {
             for (MnistUtils.MnistLabeledImage image : images)
-                locMdl.apply(image.getPixels());
+                locMdl.predict(image.getPixels());
         }
 
         long t1 = System.currentTimeMillis();

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
index 14051f4..900dcd4 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
@@ -27,12 +27,12 @@ import java.util.Random;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.ThreadedInfModelBuilder;
-import org.apache.ignite.ml.inference.parser.InfModelParser;
-import 
org.apache.ignite.ml.inference.parser.TensorFlowSavedModelInfModelParser;
-import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.ThreadedModelBuilder;
+import org.apache.ignite.ml.inference.parser.ModelParser;
+import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelModelParser;
+import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.ml.util.MnistUtils;
 import org.tensorflow.Tensor;
 
@@ -56,9 +56,9 @@ public class TensorFlowThreadedInferenceExample {
         if (mdlRsrc == null)
             throw new IllegalArgumentException("Resource not found 
[resource_path=" + MODEL_PATH + "]");
 
-        InfModelReader reader = new 
FileSystemInfModelReader(mdlRsrc.getPath());
+        ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
 
-        InfModelParser<double[], Long, ?> parser = new 
TensorFlowSavedModelInfModelParser<double[], Long>("serve")
+        ModelParser<double[], Long, ?> parser = new 
TensorFlowSavedModelModelParser<double[], Long>("serve")
 
             .withInput("Placeholder", doubles -> {
                 float[][][] reshaped = new float[1][28][28];
@@ -79,11 +79,11 @@ public class TensorFlowThreadedInferenceExample {
 
         long t0 = System.currentTimeMillis();
 
-        try (InfModel<double[], Future<Long>> threadedMdl = new 
ThreadedInfModelBuilder(8)
+        try (Model<double[], Future<Long>> threadedMdl = new 
ThreadedModelBuilder(8)
             .build(reader, parser)) {
             List<Future<?>> futures = new ArrayList<>(images.size());
             for (MnistUtils.MnistLabeledImage image : images)
-                futures.add(threadedMdl.apply(image.getPixels()));
+                futures.add(threadedMdl.predict(image.getPixels()));
             for (Future<?> f : futures)
                 f.get();
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java
index 2e74f60..71546e9 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/knn/ANNClassificationExample.java
@@ -97,7 +97,7 @@ public class ANNClassificationExample {
                     double groundTruth = val[0];
 
                     long startPredictionTime = System.currentTimeMillis();
-                    double prediction = knnMdl.apply(new DenseVector(inputs));
+                    double prediction = knnMdl.predict(new 
DenseVector(inputs));
                     long endPredictionTime = System.currentTimeMillis();
 
                     totalPredictionTime += (endPredictionTime - 
startPredictionTime);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java
index 460752b..4a475a0 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java
@@ -83,7 +83,7 @@ public class KNNClassificationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = knnMdl.apply(inputs);
+                    double prediction = knnMdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, 
Precision.EPSILON))

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java
index 51cc4ed..8615b6c 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java
@@ -86,7 +86,7 @@ public class KNNRegressionExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = knnMdl.apply(inputs);
+                    double prediction = knnMdl.predict(inputs);
 
                     mse += Math.pow(prediction - groundTruth, 2.0);
                     mae += Math.abs(prediction - groundTruth);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java
index 1f81c48..080f45d 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java
@@ -120,8 +120,8 @@ public class OneVsRestClassificationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
-                    double predictionWithMinMaxScaling = 
mdlWithScaling.apply(inputs);
+                    double prediction = mdl.predict(inputs);
+                    double predictionWithMinMaxScaling = 
mdlWithScaling.predict(inputs);
 
                     totalAmount++;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
index 5af3f69..54c9ce0 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
@@ -85,7 +85,7 @@ public class DiscreteNaiveBayesTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     totalAmount++;
                     if (groundTruth != prediction)

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java
index e711d84..74e0bfd 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java
@@ -84,7 +84,7 @@ public class GaussianNaiveBayesTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, 
Precision.EPSILON))

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java
index dc67aa1..a6f177a 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/nn/MLPTrainerExample.java
@@ -116,7 +116,7 @@ public class MLPTrainerExample {
             // Calculate score.
             for (int i = 0; i < 4; i++) {
                 LabeledPoint pnt = trainingSet.get(i);
-                Matrix predicted = mlp.apply(new DenseMatrix(new double[][] 
{{pnt.x, pnt.y}}));
+                Matrix predicted = mlp.predict(new DenseMatrix(new double[][] 
{{pnt.x, pnt.y}}));
 
                 double predictedVal = predicted.get(0, 0);
                 double lbl = pnt.lb;

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java
index e6e2632..1bb4146 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java
@@ -78,7 +78,7 @@ public class LinearRegressionLSQRTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", 
prediction, groundTruth);
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java
index c60f8fb..c00a3bb 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java
@@ -89,7 +89,7 @@ public class 
LinearRegressionLSQRTrainerWithMinMaxScalerExample {
                     Vector val = observation.getValue();
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(preprocessor.apply(key, 
val));
+                    double prediction = mdl.predict(preprocessor.apply(key, 
val));
 
                     System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", 
prediction, groundTruth);
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java
index bf235e2..cb764c5 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java
@@ -87,7 +87,7 @@ public class LinearRegressionSGDTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", 
prediction, groundTruth);
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java
index 65cf4d1..059f810 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java
@@ -96,7 +96,7 @@ public class LogisticRegressionSGDTrainerExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, 
Precision.EPSILON))

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java
index 0a681ce..c9a7ae4 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java
@@ -89,7 +89,7 @@ public class TrainTestDatasetSplitterExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", 
prediction, groundTruth);
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java
index a32ec08..f057386 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java
@@ -85,7 +85,7 @@ public class SVMBinaryClassificationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = mdl.apply(inputs);
+                    double prediction = mdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, 
Precision.EPSILON))

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java
index 4b44c7f..606660f 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeClassificationTrainerExample.java
@@ -84,7 +84,7 @@ public class DecisionTreeClassificationTrainerExample {
             for (int i = 0; i < 1000; i++) {
                 LabeledPoint pnt = generatePoint(rnd);
 
-                double prediction = mdl.apply(VectorUtils.of(pnt.x, pnt.y));
+                double prediction = mdl.predict(VectorUtils.of(pnt.x, pnt.y));
                 double lbl = pnt.lb;
 
                 if (i %50 == 1)

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java
index 2338522..3e37646 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/DecisionTreeRegressionTrainerExample.java
@@ -81,7 +81,7 @@ public class DecisionTreeRegressionTrainerExample {
 
             // Calculate score.
             for (int x = 0; x < 10; x++) {
-                double predicted = mdl.apply(VectorUtils.of(x));
+                double predicted = mdl.predict(VectorUtils.of(x));
 
                 System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", predicted, 
Math.sin(x));
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java
index c478407..fd46556 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesClassificationTrainerExample.java
@@ -71,7 +71,7 @@ public class GDBOnTreesClassificationTrainerExample {
 
             // Calculate score.
             for (int x = -5; x < 5; x++) {
-                double predicted = mdl.apply(VectorUtils.of(x));
+                double predicted = mdl.predict(VectorUtils.of(x));
 
                 System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", predicted, 
Math.sin(x) < 0 ? 0.0 : 1.0);
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java
index c119c9a..d04415a 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/boosting/GDBOnTreesRegressionTrainerExample.java
@@ -22,9 +22,9 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.ml.Model;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import 
org.apache.ignite.ml.composition.boosting.convergence.mean.MeanAbsValueConvergenceCheckerFactory;
+import org.apache.ignite.ml.inference.Model;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
 import org.apache.ignite.ml.trainers.DatasetTrainer;
@@ -73,7 +73,7 @@ public class GDBOnTreesRegressionTrainerExample {
 
             // Calculate score.
             for (int x = -5; x < 5; x++) {
-                double predicted = mdl.apply(VectorUtils.of(x));
+                double predicted = mdl.predict(VectorUtils.of(x));
 
                 System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", predicted, 
Math.pow(x, 2));
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java
index 3ce833d..fd95033 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java
@@ -95,7 +95,7 @@ public class RandomForestClassificationExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = randomForestMdl.apply(inputs);
+                    double prediction = randomForestMdl.predict(inputs);
 
                     totalAmount++;
                     if (!Precision.equals(groundTruth, prediction, 
Precision.EPSILON))

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java
index 1754b7c..e1bbc8b 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java
@@ -104,7 +104,7 @@ public class RandomForestRegressionExample {
                     Vector inputs = val.copyOfRange(1, val.size());
                     double groundTruth = val.get(0);
 
-                    double prediction = randomForestMdl.apply(inputs);
+                    double prediction = randomForestMdl.predict(inputs);
 
                     mse += Math.pow(prediction - groundTruth, 2.0);
                     mae += Math.abs(prediction - groundTruth);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
index 68f27c4..0ec05c5 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
@@ -26,11 +26,11 @@ import java.util.concurrent.Future;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.inference.builder.AsyncInfModelBuilder;
-import org.apache.ignite.ml.inference.builder.IgniteDistributedInfModelBuilder;
-import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
-import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.inference.Model;
+import org.apache.ignite.ml.inference.builder.AsyncModelBuilder;
+import org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilder;
+import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
+import org.apache.ignite.ml.inference.reader.ModelReader;
 import org.apache.ignite.ml.xgboost.parser.XGModelParser;
 
 /**
@@ -57,9 +57,9 @@ public class XGBoostModelParserExample {
             if (mdlRsrc == null)
                 throw new IllegalArgumentException("File not found 
[resource_path=" + TEST_MODEL_RES + "]");
 
-            InfModelReader reader = new 
FileSystemInfModelReader(mdlRsrc.getPath());
+            ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
 
-            AsyncInfModelBuilder mdlBuilder = new 
IgniteDistributedInfModelBuilder(ignite, 4, 4);
+            AsyncModelBuilder mdlBuilder = new 
IgniteDistributedModelBuilder(ignite, 4, 4);
 
             File testData = IgniteUtils.resolveIgnitePath(TEST_DATA_RES);
             if (testData == null)
@@ -69,7 +69,7 @@ public class XGBoostModelParserExample {
             if (testExpRes == null)
                 throw new IllegalArgumentException("File not found 
[resource_path=" + TEST_ER_RES + "]");
 
-            try (InfModel<HashMap<String, Double>, Future<Double>> mdl = 
mdlBuilder.build(reader, parser);
+            try (Model<HashMap<String, Double>, Future<Double>> mdl = 
mdlBuilder.build(reader, parser);
                  Scanner testDataScanner = new Scanner(testData);
                  Scanner testExpResultsScanner = new Scanner(testExpRes)) {
 
@@ -86,7 +86,7 @@ public class XGBoostModelParserExample {
                             testObj.put("f" + keyVal[0], 
Double.parseDouble(keyVal[1]));
                     }
 
-                    double prediction = mdl.apply(testObj).get();
+                    double prediction = mdl.predict(testObj).get();
 
                     double expPrediction = 
Double.parseDouble(testExpResultsStr);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java
index 83b3578..47ea72b 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/Exportable.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.ml;
 
 /**
- * Interface for exportable models({@link Model}).
+ * Interface for exportable models({@link IgniteModel}).
  *
  * @see Exporter
  */

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/IgniteModel.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/IgniteModel.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/IgniteModel.java
new file mode 100644
index 0000000..a1165e1
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/IgniteModel.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml;
+
+import java.io.Serializable;
+import java.util.function.BiFunction;
+import org.apache.ignite.ml.inference.Model;
+
+/** Basic interface for all models. */
+public interface IgniteModel<T, V> extends Model<T, V>, Serializable {
+    /**
+     * Combines this model with other model via specified combiner
+     *
+     * @param other Other model.
+     * @param combiner Combiner.
+     * @return Combination of models.
+     */
+    public default <X, W> IgniteModel<T, X> combine(IgniteModel<T, W> other, 
BiFunction<V, W, X> combiner) {
+        return v -> combiner.apply(predict(v), other.predict(v));
+    }
+
+    /**
+     * Get a composition model of the form {@code x -> after(mdl(x))}.
+     *
+     * @param after Function to apply after this model.
+     * @param <V1> Type of input of function applied before this model.
+     * @return Composition model of the form {@code x -> after(mdl(x))}.
+     */
+    public default <V1> IgniteModel<T, V1> andThen(IgniteModel<V, V1> after) {
+        return t -> after.predict(predict(t));
+    }
+
+    /**
+     * @param pretty Use pretty mode.
+     */
+    public default String toString(boolean pretty) {
+        return getClass().getSimpleName();
+    }
+
+    /** {@inheritDoc} */
+    @Override public default void close() {
+        // Do nothing.
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/Model.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/Model.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/Model.java
deleted file mode 100644
index 6453108..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/Model.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml;
-
-import java.util.function.BiFunction;
-import org.apache.ignite.ml.inference.InfModel;
-import org.apache.ignite.ml.math.functions.IgniteFunction;
-
-/** Basic interface for all models. */
-public interface Model<T, V> extends InfModel<T, V>, IgniteFunction<T, V> {
-    /**
-     * Combines this model with other model via specified combiner
-     *
-     * @param other Other model.
-     * @param combiner Combiner.
-     * @return Combination of models.
-     */
-    public default <X, W> Model<T, X> combine(Model<T, W> other, BiFunction<V, 
W, X> combiner) {
-        return v -> combiner.apply(apply(v), other.apply(v));
-    }
-
-    /**
-     * Get a composition model of the form {@code x -> after(mdl(x))}.
-     *
-     * @param after Function to apply after this model.
-     * @param <V1> Type of input of function applied before this model.
-     * @return Composition model of the form {@code x -> after(mdl(x))}.
-     */
-    public default <V1> Model<T, V1> andThen(IgniteFunction<V, V1> after) {
-        return t -> after.apply(apply(t));
-    }
-
-    /**
-     * @param pretty Use pretty mode.
-     */
-    public default String toString(boolean pretty) {
-        return getClass().getSimpleName();
-    }
-
-    /** {@inheritDoc} */
-    @Override public default void close() {
-        // Do nothing.
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java
index 9930f23..c5308bd 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/Clusterer.java
@@ -17,12 +17,12 @@
 
 package org.apache.ignite.ml.clustering.kmeans;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 
 /**
  * Base interface for clusterers.
  */
-public interface Clusterer<P, M extends Model> {
+public interface Clusterer<P, M extends IgniteModel> {
     /**
      * Cluster given points set into k clusters.
      *

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java
index 43e1899..42b0823 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/ClusterizationModel.java
@@ -17,10 +17,10 @@
 
 package org.apache.ignite.ml.clustering.kmeans;
 
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 
 /** Base interface for all clusterization models. */
-public interface ClusterizationModel<P, V> extends Model<P, V> {
+public interface ClusterizationModel<P, V> extends IgniteModel<P, V> {
     /** Gets the clusters count. */
     public int getAmountOfClusters();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java
index e07f4f0..33d43c8 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/clustering/kmeans/KMeansModel.java
@@ -68,7 +68,7 @@ public class KMeansModel implements 
ClusterizationModel<Vector, Integer>, Export
      *
      * @param vec Vector.
      */
-    public Integer apply(Vector vec) {
+    public Integer predict(Vector vec) {
         int res = -1;
         double minDist = Double.POSITIVE_INFINITY;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java
index 5ef1de5..4a73782 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelOnFeaturesSubspace.java
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.composition;
 import java.util.Collections;
 import java.util.Map;
 import java.util.stream.Collectors;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
 import org.apache.ignite.ml.util.ModelTrace;
@@ -28,7 +28,7 @@ import org.apache.ignite.ml.util.ModelTrace;
 /**
  * Model trained on a features subspace with mapping from original features 
space to subspace.
  */
-public class ModelOnFeaturesSubspace implements Model<Vector, Double> {
+public class ModelOnFeaturesSubspace implements IgniteModel<Vector, Double> {
     /**
      * Features mapping to subspace.
      */
@@ -36,7 +36,7 @@ public class ModelOnFeaturesSubspace implements Model<Vector, 
Double> {
     /**
      * Trained model of features subspace.
      */
-    private final Model<Vector, Double> mdl;
+    private final IgniteModel<Vector, Double> mdl;
 
     /**
      * Constructs new instance of ModelOnFeaturesSubspace.
@@ -44,7 +44,7 @@ public class ModelOnFeaturesSubspace implements Model<Vector, 
Double> {
      * @param featuresMapping Features mapping to subspace.
      * @param mdl Learned model.
      */
-    ModelOnFeaturesSubspace(Map<Integer, Integer> featuresMapping, 
Model<Vector, Double> mdl) {
+    ModelOnFeaturesSubspace(Map<Integer, Integer> featuresMapping, 
IgniteModel<Vector, Double> mdl) {
         this.featuresMapping = Collections.unmodifiableMap(featuresMapping);
         this.mdl = mdl;
     }
@@ -55,10 +55,10 @@ public class ModelOnFeaturesSubspace implements 
Model<Vector, Double> {
      * @param features Features vector.
      * @return Estimation.
      */
-    @Override public Double apply(Vector features) {
+    @Override public Double predict(Vector features) {
         double[] newFeatures = new double[featuresMapping.size()];
         featuresMapping.forEach((localId, featureVectorId) -> 
newFeatures[localId] = features.get(featureVectorId));
-        return mdl.apply(VectorUtils.of(newFeatures));
+        return mdl.predict(VectorUtils.of(newFeatures));
     }
 
     /**
@@ -71,7 +71,7 @@ public class ModelOnFeaturesSubspace implements Model<Vector, 
Double> {
     /**
      * Returns model.
      */
-    public Model<Vector, Double> getMdl() {
+    public IgniteModel<Vector, Double> getMdl() {
         return mdl;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java
index 36ee626..a7894c1 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsComposition.java
@@ -21,7 +21,7 @@ import java.util.Collections;
 import java.util.List;
 import org.apache.ignite.ml.Exportable;
 import org.apache.ignite.ml.Exporter;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import 
org.apache.ignite.ml.composition.predictionsaggregator.PredictionsAggregator;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.util.ModelTrace;
@@ -29,7 +29,7 @@ import org.apache.ignite.ml.util.ModelTrace;
 /**
  * Model consisting of several models and prediction aggregation strategy.
  */
-public class ModelsComposition implements Model<Vector, Double>, 
Exportable<ModelsCompositionFormat> {
+public class ModelsComposition implements IgniteModel<Vector, Double>, 
Exportable<ModelsCompositionFormat> {
     /**
      * Predictions aggregator.
      */
@@ -37,7 +37,7 @@ public class ModelsComposition implements Model<Vector, 
Double>, Exportable<Mode
     /**
      * Models.
      */
-    private final List<Model<Vector, Double>> models;
+    private final List<IgniteModel<Vector, Double>> models;
 
     /**
      * Constructs a new instance of composition of models.
@@ -45,7 +45,7 @@ public class ModelsComposition implements Model<Vector, 
Double>, Exportable<Mode
      * @param models Basic models.
      * @param predictionsAggregator Predictions aggregator.
      */
-    public ModelsComposition(List<? extends Model<Vector, Double>> models, 
PredictionsAggregator predictionsAggregator) {
+    public ModelsComposition(List<? extends IgniteModel<Vector, Double>> 
models, PredictionsAggregator predictionsAggregator) {
         this.predictionsAggregator = predictionsAggregator;
         this.models = Collections.unmodifiableList(models);
     }
@@ -56,11 +56,11 @@ public class ModelsComposition implements Model<Vector, 
Double>, Exportable<Mode
      * @param features Features vector.
      * @return Estimation.
      */
-    @Override public Double apply(Vector features) {
+    @Override public Double predict(Vector features) {
         double[] predictions = new double[models.size()];
 
         for (int i = 0; i < models.size(); i++)
-            predictions[i] = models.get(i).apply(features);
+            predictions[i] = models.get(i).predict(features);
 
         return predictionsAggregator.apply(predictions);
     }
@@ -75,7 +75,7 @@ public class ModelsComposition implements Model<Vector, 
Double>, Exportable<Mode
     /**
      * Returns containing models.
      */
-    public List<Model<Vector, Double>> getModels() {
+    public List<IgniteModel<Vector, Double>> getModels() {
         return models;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java
index 68af0a9..ba71afa 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/ModelsCompositionFormat.java
@@ -19,7 +19,7 @@ package org.apache.ignite.ml.composition;
 
 import java.io.Serializable;
 import java.util.List;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import 
org.apache.ignite.ml.composition.predictionsaggregator.PredictionsAggregator;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 
@@ -33,7 +33,7 @@ public class ModelsCompositionFormat implements Serializable {
     private static final long serialVersionUID = 9115341364082681837L;
 
     /** Models. */
-    private List<Model<Vector, Double>> models;
+    private List<IgniteModel<Vector, Double>> models;
 
     /** Predictions aggregator. */
     private PredictionsAggregator predictionsAggregator;
@@ -44,13 +44,13 @@ public class ModelsCompositionFormat implements 
Serializable {
      * @param models Models.
      * @param predictionsAggregator Predictions aggregator.
      */
-    public ModelsCompositionFormat(List<Model<Vector, Double>> 
models,PredictionsAggregator predictionsAggregator) {
+    public ModelsCompositionFormat(List<IgniteModel<Vector, Double>> 
models,PredictionsAggregator predictionsAggregator) {
         this.models = models;
         this.predictionsAggregator = predictionsAggregator;
     }
 
     /** */
-    public List<Model<Vector, Double>> models() {
+    public List<IgniteModel<Vector, Double>> models() {
         return models;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java
index 0b87748..7e42d12 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBLearningStrategy.java
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.composition.boosting;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import 
org.apache.ignite.ml.composition.boosting.convergence.ConvergenceChecker;
 import 
org.apache.ignite.ml.composition.boosting.convergence.ConvergenceCheckerFactory;
@@ -58,7 +58,7 @@ public class GDBLearningStrategy {
     protected IgniteFunction<Double, Double> externalLbToInternalMapping;
 
     /** Base model trainer builder. */
-    protected IgniteSupplier<DatasetTrainer<? extends Model<Vector, Double>, 
Double>> baseMdlTrainerBuilder;
+    protected IgniteSupplier<DatasetTrainer<? extends IgniteModel<Vector, 
Double>, Double>> baseMdlTrainerBuilder;
 
     /** Mean label value. */
     protected double meanLbVal;
@@ -84,7 +84,7 @@ public class GDBLearningStrategy {
      * @param lbExtractor Label extractor.
      * @return list of learned models.
      */
-    public <K, V> List<Model<Vector, Double>> learnModels(DatasetBuilder<K, V> 
datasetBuilder,
+    public <K, V> List<IgniteModel<Vector, Double>> 
learnModels(DatasetBuilder<K, V> datasetBuilder,
         IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, 
V, Double> lbExtractor) {
 
         return update(null, datasetBuilder, featureExtractor, lbExtractor);
@@ -102,18 +102,18 @@ public class GDBLearningStrategy {
      * @param <V> Type of a value in {@code upstream} data.
      * @return Updated models list.
      */
-    public <K,V> List<Model<Vector, Double>> update(GDBTrainer.GDBModel 
mdlToUpdate,
+    public <K,V> List<IgniteModel<Vector, Double>> update(GDBTrainer.GDBModel 
mdlToUpdate,
         DatasetBuilder<K, V> datasetBuilder, IgniteBiFunction<K, V, Vector> 
featureExtractor,
         IgniteBiFunction<K, V, Double> lbExtractor) {
         if (trainerEnvironment == null)
             throw new IllegalStateException("Learning environment builder is 
not set.");
 
-        List<Model<Vector, Double>> models = initLearningState(mdlToUpdate);
+        List<IgniteModel<Vector, Double>> models = 
initLearningState(mdlToUpdate);
 
         ConvergenceChecker<K, V> convCheck = 
checkConvergenceStgyFactory.create(sampleSize,
             externalLbToInternalMapping, loss, datasetBuilder, 
featureExtractor, lbExtractor);
 
-        DatasetTrainer<? extends Model<Vector, Double>, Double> trainer = 
baseMdlTrainerBuilder.get();
+        DatasetTrainer<? extends IgniteModel<Vector, Double>, Double> trainer 
= baseMdlTrainerBuilder.get();
         for (int i = 0; i < cntOfIterations; i++) {
             double[] weights = Arrays.copyOf(compositionWeights, 
models.size());
 
@@ -124,7 +124,7 @@ public class GDBLearningStrategy {
 
             IgniteBiFunction<K, V, Double> lbExtractorWrap = (k, v) -> {
                 Double realAnswer = 
externalLbToInternalMapping.apply(lbExtractor.apply(k, v));
-                Double mdlAnswer = 
currComposition.apply(featureExtractor.apply(k, v));
+                Double mdlAnswer = 
currComposition.predict(featureExtractor.apply(k, v));
                 return -loss.gradient(sampleSize, realAnswer, mdlAnswer);
             };
 
@@ -143,8 +143,8 @@ public class GDBLearningStrategy {
      * @param mdlToUpdate Model to update.
      * @return list of already learned models.
      */
-    @NotNull protected List<Model<Vector, Double>> 
initLearningState(GDBTrainer.GDBModel mdlToUpdate) {
-        List<Model<Vector, Double>> models = new ArrayList<>();
+    @NotNull protected List<IgniteModel<Vector, Double>> 
initLearningState(GDBTrainer.GDBModel mdlToUpdate) {
+        List<IgniteModel<Vector, Double>> models = new ArrayList<>();
         if(mdlToUpdate != null) {
             models.addAll(mdlToUpdate.getModels());
             WeightedPredictionsAggregator aggregator = 
(WeightedPredictionsAggregator) mdlToUpdate.getPredictionsAggregator();
@@ -207,7 +207,7 @@ public class GDBLearningStrategy {
      * @param buildBaseMdlTrainer Build base model trainer.
      */
     public GDBLearningStrategy withBaseModelTrainerBuilder(
-        IgniteSupplier<DatasetTrainer<? extends Model<Vector, Double>, 
Double>> buildBaseMdlTrainer) {
+        IgniteSupplier<DatasetTrainer<? extends IgniteModel<Vector, Double>, 
Double>> buildBaseMdlTrainer) {
         this.baseMdlTrainerBuilder = buildBaseMdlTrainer;
         return this;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java
index 03772ec..35502ab 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/GDBTrainer.java
@@ -20,7 +20,7 @@ package org.apache.ignite.ml.composition.boosting;
 import java.util.Arrays;
 import java.util.List;
 import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import 
org.apache.ignite.ml.composition.boosting.convergence.ConvergenceCheckerFactory;
 import 
org.apache.ignite.ml.composition.boosting.convergence.mean.MeanAbsValueConvergenceCheckerFactory;
@@ -124,7 +124,7 @@ public abstract class GDBTrainer extends 
DatasetTrainer<ModelsComposition, Doubl
             .withDefaultGradStepSize(gradientStep)
             .withCheckConvergenceStgyFactory(checkConvergenceStgyFactory);
 
-        List<Model<Vector, Double>> models;
+        List<IgniteModel<Vector, Double>> models;
         if (mdl != null)
             models = stgy.update((GDBModel)mdl, datasetBuilder, 
featureExtractor, lbExtractor);
         else
@@ -165,7 +165,7 @@ public abstract class GDBTrainer extends 
DatasetTrainer<ModelsComposition, Doubl
      * Returns regressor model trainer for one step of GDB.
      */
     @NotNull
-    protected abstract DatasetTrainer<? extends Model<Vector, Double>, Double> 
buildBaseModelTrainer();
+    protected abstract DatasetTrainer<? extends IgniteModel<Vector, Double>, 
Double> buildBaseModelTrainer();
 
     /**
      * Maps external representation of label to internal.
@@ -263,7 +263,7 @@ public abstract class GDBTrainer extends 
DatasetTrainer<ModelsComposition, Doubl
          * @param predictionsAggregator Predictions aggregator.
          * @param internalToExternalLblMapping Internal to external lbl 
mapping.
          */
-        public GDBModel(List<? extends Model<Vector, Double>> models,
+        public GDBModel(List<? extends IgniteModel<Vector, Double>> models,
             WeightedPredictionsAggregator predictionsAggregator,
             IgniteFunction<Double, Double> internalToExternalLblMapping) {
 
@@ -272,8 +272,8 @@ public abstract class GDBTrainer extends 
DatasetTrainer<ModelsComposition, Doubl
         }
 
         /** {@inheritDoc} */
-        @Override public Double apply(Vector features) {
-            return internalToExternalLblMapping.apply(super.apply(features));
+        @Override public Double predict(Vector features) {
+            return internalToExternalLblMapping.apply(super.predict(features));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java
index e383e39..f7da9a1 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/boosting/convergence/ConvergenceChecker.java
@@ -140,7 +140,7 @@ public abstract class ConvergenceChecker<K, V> implements 
Serializable {
      */
     public double computeError(Vector features, Double answer, 
ModelsComposition currMdl) {
         Double realAnswer = externalLbToInternalMapping.apply(answer);
-        Double mdlAnswer = currMdl.apply(features);
+        Double mdlAnswer = currMdl.predict(features);
         return -loss.gradient(sampleSize, realAnswer, mdlAnswer);
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2dc0d9f7/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java
index c4c082f..a117f43 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/composition/stacking/SimpleStackedDatasetTrainer.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.ml.composition.stacking;
 
 import java.util.ArrayList;
-import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.IgniteModel;
 import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
 import org.apache.ignite.ml.math.functions.IgniteBinaryOperator;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
@@ -33,7 +33,7 @@ import org.apache.ignite.ml.trainers.DatasetTrainer;
  * @param <AM> Type of aggregator model.
  * @param <L> Type of labels.
  */
-public class SimpleStackedDatasetTrainer<I, O, AM extends Model<I, O>, L> 
extends StackedDatasetTrainer<I, I, O, AM, L> {
+public class SimpleStackedDatasetTrainer<I, O, AM extends IgniteModel<I, O>, 
L> extends StackedDatasetTrainer<I, I, O, AM, L> {
     /**
      * Construct instance of this class.
      *
@@ -75,7 +75,7 @@ public class SimpleStackedDatasetTrainer<I, O, AM extends 
Model<I, O>, L> extend
 
     //TODO: IGNITE-10441 -- Look for options to avoid boilerplate overrides.
     /** {@inheritDoc} */
-    @Override public <M1 extends Model<I, I>> SimpleStackedDatasetTrainer<I, 
O, AM, L> addTrainer(
+    @Override public <M1 extends IgniteModel<I, I>> 
SimpleStackedDatasetTrainer<I, O, AM, L> addTrainer(
         DatasetTrainer<M1, L> trainer) {
         return (SimpleStackedDatasetTrainer<I, O, AM, 
L>)super.addTrainer(trainer);
     }

Reply via email to