diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-09-09 22:56:02 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-09-09 22:56:02 +0200 |
commit | cd5ce1396a9b7f56ce33aaeee4819bfc0de58fb4 (patch) | |
tree | a978206215a5c00a3a23af4a45d283fb2518eef2 /config-model | |
parent | 63dd94db0e2566317cecff9dc67d796432702f55 (diff) |
Also wire in executor to global rank profile generation.
Diffstat (limited to 'config-model')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java index 3f1cf130aff..c6c2fea5900 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java @@ -2,7 +2,6 @@ package com.yahoo.vespa.model; import ai.vespa.rankingexpression.importer.configmodelview.ImportedMlModel; -import ai.vespa.rankingexpression.importer.configmodelview.ImportedMlModels; import com.yahoo.collections.Pair; import com.yahoo.component.Version; import com.yahoo.config.ConfigInstance; @@ -78,6 +77,8 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -184,8 +185,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri VespaModelBuilder builder = new VespaDomBuilder(); root = builder.getRoot(VespaModel.ROOT_CONFIGID, deployState, this); - createGlobalRankProfiles(deployState.getDeployLogger(), deployState.getImportedModels(), - deployState.rankProfileRegistry(), deployState.getQueryProfiles()); + createGlobalRankProfiles(deployState); rankProfileList = new RankProfileList(null, // null search -> global rankingConstants, largeRankExpressions, @@ -291,18 +291,24 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri * Creates a rank profile not attached to any search definition, for each imported model in the application package, * and adds it to the given rank profile registry. */ - private void createGlobalRankProfiles(DeployLogger deployLogger, ImportedMlModels importedModels, - RankProfileRegistry rankProfileRegistry, - QueryProfiles queryProfiles) { - if ( ! importedModels.all().isEmpty()) { // models/ directory is available - for (ImportedMlModel model : importedModels.all()) { + private void createGlobalRankProfiles(DeployState deployState) { + var importedModels = deployState.getImportedModels().all(); + DeployLogger deployLogger = deployState.getDeployLogger(); + RankProfileRegistry rankProfileRegistry = deployState.rankProfileRegistry(); + QueryProfiles queryProfiles = deployState.getQueryProfiles(); + List <Future<ConvertedModel>> futureModels = new ArrayList<>(); + if ( ! importedModels.isEmpty()) { // models/ directory is available + for (ImportedMlModel model : importedModels) { // Due to automatic naming not guaranteeing unique names, there must be a 1-1 between OnnxModels and global RankProfiles. OnnxModels onnxModels = onnxModelInfoFromSource(model); RankProfile profile = new RankProfile(model.name(), this, deployLogger, rankProfileRegistry, onnxModels); rankProfileRegistry.add(profile); - ConvertedModel convertedModel = ConvertedModel.fromSource(new ModelName(model.name()), - model.name(), profile, queryProfiles.getRegistry(), model); - convertedModel.expressions().values().forEach(f -> profile.addFunction(f, false)); + futureModels.add(deployState.getExecutor().submit(() -> { + ConvertedModel convertedModel = ConvertedModel.fromSource(new ModelName(model.name()), + model.name(), profile, queryProfiles.getRegistry(), model); + convertedModel.expressions().values().forEach(f -> profile.addFunction(f, false)); + return convertedModel; + })); } } else { // generated and stored model information may be available instead @@ -314,8 +320,18 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri OnnxModels onnxModels = onnxModelInfoFromStore(modelName); RankProfile profile = new RankProfile(modelName, this, deployLogger, rankProfileRegistry, onnxModels); rankProfileRegistry.add(profile); - ConvertedModel convertedModel = ConvertedModel.fromStore(new ModelName(modelName), modelName, profile); - convertedModel.expressions().values().forEach(f -> profile.addFunction(f, false)); + futureModels.add(deployState.getExecutor().submit(() -> { + ConvertedModel convertedModel = ConvertedModel.fromStore(new ModelName(modelName), modelName, profile); + convertedModel.expressions().values().forEach(f -> profile.addFunction(f, false)); + return convertedModel; + })); + } + } + for (var futureConvertedModel : futureModels) { + try { + futureConvertedModel.get(); + } catch (ExecutionException |InterruptedException e) { + throw new RuntimeException(e); } } new Processing().processRankProfiles(deployLogger, rankProfileRegistry, queryProfiles, true, false); |