diff options
author | Arne Juul <arnej@yahooinc.com> | 2023-09-18 14:46:10 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahooinc.com> | 2023-09-18 14:46:10 +0000 |
commit | 7097b3d47b63c1bb5b2b8354d8f1d326514d80dc (patch) | |
tree | 968c099f0fb540e3b0c5c0da674b4f24884d1ae7 /model-evaluation | |
parent | eede788d1c20d2f246f44287308dad69487369ea (diff) |
if something is already a match-feature, avoid computing it again in global-phase
Diffstat (limited to 'model-evaluation')
6 files changed, 50 insertions, 1 deletions
diff --git a/model-evaluation/src/main/java/ai/vespa/models/evaluation/RankProfilesConfigImporter.java b/model-evaluation/src/main/java/ai/vespa/models/evaluation/RankProfilesConfigImporter.java index 76869932a3e..085f80c0ae6 100644 --- a/model-evaluation/src/main/java/ai/vespa/models/evaluation/RankProfilesConfigImporter.java +++ b/model-evaluation/src/main/java/ai/vespa/models/evaluation/RankProfilesConfigImporter.java @@ -29,10 +29,12 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.TreeMap; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; @@ -92,6 +94,7 @@ public class RankProfilesConfigImporter { ExpressionFunction secondPhase = null; ExpressionFunction globalPhase = null; Map<String, TensorType> declaredTypes = new LinkedHashMap<>(); + Set<String> matchFeaturesSet = new HashSet<>(); for (RankProfilesConfig.Rankprofile.Fef.Property property : profile.fef().property()) { Optional<FunctionReference> reference = FunctionReference.fromSerial(property.name()); Optional<FunctionReference> externalReference = FunctionReference.fromExternalSerial(property.name()); @@ -139,6 +142,9 @@ public class RankProfilesConfigImporter { declaredTypes.put(function.getName(), type); // "foo" declaredTypes.put(functionRef.serialForm(), type); // "rankingExpression(foo)" } + else if (property.name().equals("vespa.match.feature")) { + matchFeaturesSet.add(property.value()); + } else if (property.name().equals("vespa.rank.firstphase")) { // Include in addition to functions firstPhase = new ExpressionFunction("firstphase", new ArrayList<>(), new RankingExpression("first-phase", property.value())); @@ -166,7 +172,11 @@ public class RankProfilesConfigImporter { functions.put(FunctionReference.fromName("globalphase"), globalPhase); constants.addAll(smallConstantsInfo.asConstants()); - + for (String k : matchFeaturesSet) { + var optRef = FunctionReference.fromSerial(k); + var ref = optRef.orElse(FunctionReference.fromName(k)); + referencedFunctions.remove(ref); + } try { return new Model(profile.name(), functions, referencedFunctions, declaredTypes, constants, onnxModels); } diff --git a/model-evaluation/src/test/java/ai/vespa/models/evaluation/RankProfileImportingTest.java b/model-evaluation/src/test/java/ai/vespa/models/evaluation/RankProfileImportingTest.java index ff1f9afcc91..4234305b888 100644 --- a/model-evaluation/src/test/java/ai/vespa/models/evaluation/RankProfileImportingTest.java +++ b/model-evaluation/src/test/java/ai/vespa/models/evaluation/RankProfileImportingTest.java @@ -74,4 +74,17 @@ public class RankProfileImportingTest { assertEquals("tensor(d0[2])", args.get("attribute(doc_vec)").toString()); assertEquals("tensor(d0[2])", args.get("query(query_vec)").toString()); } + + @Test + public void testImportingLayeredGlobalPhase() { + ModelTester tester = new ModelTester("src/test/resources/config/layered/"); + assertEquals(1, tester.models().size()); + Model m = tester.models().get("layered"); + assertEquals("layered", m.name()); + var func = m.function("globalphase"); + assertEquals("globalphase", func.getName()); + var args = func.argumentTypes(); + assertEquals(1, args.size()); + assertEquals("tensor(m{},v[3])", args.get("rankingExpression(mymul)").toString()); + } } diff --git a/model-evaluation/src/test/resources/config/layered/onnx-models.cfg b/model-evaluation/src/test/resources/config/layered/onnx-models.cfg new file mode 100644 index 00000000000..3123c7c037f --- /dev/null +++ b/model-evaluation/src/test/resources/config/layered/onnx-models.cfg @@ -0,0 +1 @@ +gpu.count -1 diff --git a/model-evaluation/src/test/resources/config/layered/rank-profiles.cfg b/model-evaluation/src/test/resources/config/layered/rank-profiles.cfg new file mode 100644 index 00000000000..9b878c2f364 --- /dev/null +++ b/model-evaluation/src/test/resources/config/layered/rank-profiles.cfg @@ -0,0 +1,25 @@ +rankprofile[0].name "layered" +rankprofile[0].fef.property[0].name "rankingExpression(mymul).rankingScript" +rankprofile[0].fef.property[0].value "tensorFromLabels(attribute(labels),m) * query(v)" +rankprofile[0].fef.property[1].name "rankingExpression(mymul).type" +rankprofile[0].fef.property[1].value "tensor(m{},v[3])" +rankprofile[0].fef.property[2].name "vespa.type.feature.mymul" +rankprofile[0].fef.property[2].value "tensor(m{},v[3])" +rankprofile[0].fef.property[3].name "vespa.rank.firstphase" +rankprofile[0].fef.property[3].value "attribute(foo1)" +rankprofile[0].fef.property[4].name "vespa.rank.globalphase" +rankprofile[0].fef.property[4].value "rankingExpression(globalphase)" +rankprofile[0].fef.property[5].name "rankingExpression(globalphase).rankingScript" +rankprofile[0].fef.property[5].value "reduce(rankingExpression(mymul), sum)" +rankprofile[0].fef.property[6].name "vespa.match.feature" +rankprofile[0].fef.property[6].value "rankingExpression(mymul)" +rankprofile[0].fef.property[7].name "vespa.feature.rename" +rankprofile[0].fef.property[7].value "rankingExpression(mymul)" +rankprofile[0].fef.property[8].name "vespa.feature.rename" +rankprofile[0].fef.property[8].value "mymul" +rankprofile[0].fef.property[9].name "vespa.globalphase.rerankcount" +rankprofile[0].fef.property[9].value "123" +rankprofile[0].fef.property[10].name "vespa.type.attribute.t1" +rankprofile[0].fef.property[10].value "tensor(m{},v[3])" +rankprofile[0].fef.property[11].name "vespa.type.query.v" +rankprofile[0].fef.property[11].value "tensor(v[3])" diff --git a/model-evaluation/src/test/resources/config/layered/ranking-constants.cfg b/model-evaluation/src/test/resources/config/layered/ranking-constants.cfg new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/model-evaluation/src/test/resources/config/layered/ranking-constants.cfg diff --git a/model-evaluation/src/test/resources/config/layered/ranking-expressions.cfg b/model-evaluation/src/test/resources/config/layered/ranking-expressions.cfg new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/model-evaluation/src/test/resources/config/layered/ranking-expressions.cfg |