summaryrefslogtreecommitdiffstats
path: root/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java')
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java64
1 files changed, 43 insertions, 21 deletions
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
index 22bba9dd079..10de10bcdfe 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
@@ -36,6 +36,27 @@ import static org.junit.Assert.assertTrue;
*/
public class ModelEvaluationTest {
+ /** Tests that we do not load models (which would waste memory) when not requested */
+ @Test
+ public void testMl_serving_not_activated() {
+ Path appDir = Path.fromString("src/test/cfg/application/ml_serving_not_activated");
+ try {
+ ImportedModelTester tester = new ImportedModelTester("ml_serving", appDir);
+ VespaModel model = tester.createVespaModel();
+ ContainerCluster cluster = model.getContainerClusters().get("container");
+ assertNull(cluster.getComponentsMap().get(new ComponentId(ModelsEvaluator.class.getName())));
+
+ RankProfilesConfig.Builder b = new RankProfilesConfig.Builder();
+ cluster.getConfig(b);
+ RankProfilesConfig config = new RankProfilesConfig(b);
+
+ assertEquals(0, config.rankprofile().size());
+ }
+ finally {
+ IOUtils.recursiveDeleteDir(appDir.append(ApplicationPackage.MODELS_GENERATED_DIR).toFile());
+ }
+ }
+
@Test
public void testMl_serving() throws IOException {
Path appDir = Path.fromString("src/test/cfg/application/ml_serving");
@@ -58,27 +79,6 @@ public class ModelEvaluationTest {
}
}
- /** Tests that we do not load models (which will waste memory) when not requested */
- @Test
- public void testMl_serving_not_activated() {
- Path appDir = Path.fromString("src/test/cfg/application/ml_serving_not_activated");
- try {
- ImportedModelTester tester = new ImportedModelTester("ml_serving", appDir);
- VespaModel model = tester.createVespaModel();
- ContainerCluster cluster = model.getContainerClusters().get("container");
- assertNull(cluster.getComponentsMap().get(new ComponentId(ModelsEvaluator.class.getName())));
-
- RankProfilesConfig.Builder b = new RankProfilesConfig.Builder();
- cluster.getConfig(b);
- RankProfilesConfig config = new RankProfilesConfig(b);
-
- assertEquals(0, config.rankprofile().size());
- }
- finally {
- IOUtils.recursiveDeleteDir(appDir.append(ApplicationPackage.MODELS_GENERATED_DIR).toFile());
- }
- }
-
private void assertHasMlModels(VespaModel model) {
ContainerCluster cluster = model.getContainerClusters().get("container");
assertNotNull(cluster.getComponentsMap().get(new ComponentId(ModelsEvaluator.class.getName())));
@@ -90,6 +90,7 @@ public class ModelEvaluationTest {
RankProfilesConfig.Builder b = new RankProfilesConfig.Builder();
cluster.getConfig(b);
RankProfilesConfig config = new RankProfilesConfig(b);
+ System.out.println(config);
RankingConstantsConfig.Builder cb = new RankingConstantsConfig.Builder();
cluster.getConfig(cb);
@@ -102,6 +103,12 @@ public class ModelEvaluationTest {
assertTrue(modelNames.contains("mnist_softmax"));
assertTrue(modelNames.contains("mnist_softmax_saved"));
+ // Compare profile content in a denser format than config:
+ StringBuilder sb = new StringBuilder();
+ for (RankProfilesConfig.Rankprofile.Fef.Property p : findProfile("mnist_saved", config).property())
+ sb.append(p.name()).append(": ").append(p.value()).append("\n");
+ assertEquals(mnistProfile, sb.toString());
+
ModelsEvaluator evaluator = new ModelsEvaluator(new ToleratingMissingConstantFilesRankProfilesConfigImporter(MockFileAcquirer.returnFile(null))
.importFrom(config, constantsConfig));
@@ -136,6 +143,21 @@ public class ModelEvaluationTest {
assertNotNull(tensorflow_mnist_softmax.evaluatorOf("serving_default", "y"));
}
+ private final String mnistProfile =
+ "rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add).rankingScript: join(reduce(join(rename(input, (d0, d1), (d0, d4)), constant(mnist_saved_dnn_hidden1_weights_read), f(a,b)(a * b)), sum, d4), constant(mnist_saved_dnn_hidden1_bias_read), f(a,b)(a + b))\n" +
+ "rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add).type: tensor(d3[300])\n" +
+ "rankingExpression(serving_default.y).rankingScript: join(reduce(join(map(join(reduce(join(join(join(rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add), 0.009999999776482582, f(a,b)(a * b)), rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add), f(a,b)(max(a,b))), constant(mnist_saved_dnn_hidden2_weights_read), f(a,b)(a * b)), sum, d3), constant(mnist_saved_dnn_hidden2_bias_read), f(a,b)(a + b)), f(a)(1.050701 * if (a >= 0, a, 1.673263 * (exp(a) - 1)))), constant(mnist_saved_dnn_outputs_weights_read), f(a,b)(a * b)), sum, d2), constant(mnist_saved_dnn_outputs_bias_read), f(a,b)(a + b))\n" +
+ "rankingExpression(serving_default.y).input.type: tensor(d0[],d1[784])\n" +
+ "rankingExpression(serving_default.y).type: tensor(d1[10])\n";
+
+ private RankProfilesConfig.Rankprofile.Fef findProfile(String name, RankProfilesConfig config) {
+ for (RankProfilesConfig.Rankprofile profile : config.rankprofile()) {
+ if (profile.name().equals(name))
+ return profile.fef();
+ }
+ throw new IllegalArgumentException("No profile named " + name);
+ }
+
// We don't have function file distribution so just return empty tensor constants
private static class ToleratingMissingConstantFilesRankProfilesConfigImporter extends RankProfilesConfigImporter {