diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2023-09-26 14:02:23 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2023-09-26 14:02:23 +0200 |
commit | 6cda78a28779a5384eb574ab9e5f037a7db55441 (patch) | |
tree | 92fa0ab7c9caf0896e522c4c4113cceedf9dc059 /configserver/src | |
parent | fcd0868ab10343bef4d3925f21c59cb8f577d51c (diff) |
Inject `OnnxModelCost` implementation from component graph
Diffstat (limited to 'configserver/src')
12 files changed, 76 insertions, 16 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/FallbackOnnxModelCostProvider.java b/configserver/src/main/java/com/yahoo/vespa/config/server/FallbackOnnxModelCostProvider.java new file mode 100644 index 00000000000..57cfb1cd43b --- /dev/null +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/FallbackOnnxModelCostProvider.java @@ -0,0 +1,16 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +package com.yahoo.vespa.config.server; + +import com.yahoo.config.model.api.OnnxModelCost; +import com.yahoo.container.di.componentgraph.Provider; + +/** + * Default provider that provides a disabled {@link OnnxModelCost} instance. + * + * @author bjorncs + */ +public class FallbackOnnxModelCostProvider implements Provider<OnnxModelCost> { + @Override public OnnxModelCost get() { return OnnxModelCost.disabled(); } + @Override public void deconstruct() {} +} diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java index 7603ff61fa1..cdc16c8f82f 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java @@ -13,6 +13,7 @@ import com.yahoo.config.model.api.EndpointCertificateSecrets; import com.yahoo.config.model.api.HostProvisioner; import com.yahoo.config.model.api.Model; import com.yahoo.config.model.api.ModelContext; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.model.api.Provisioned; import com.yahoo.config.model.api.Quota; import com.yahoo.config.model.api.Reindexing; @@ -66,6 +67,7 @@ public class ModelContextImpl implements ModelContext { private final Optional<? extends Reindexing> reindexing; private final ModelContext.Properties properties; private final Optional<File> appDir; + private final OnnxModelCost onnxModelCost; private final Optional<DockerImage> wantedDockerImageRepository; @@ -92,6 +94,7 @@ public class ModelContextImpl implements ModelContext { Provisioned provisioned, ModelContext.Properties properties, Optional<File> appDir, + OnnxModelCost onnxModelCost, Optional<DockerImage> wantedDockerImageRepository, Version modelVespaVersion, Version wantedNodeVespaVersion) { @@ -109,6 +112,7 @@ public class ModelContextImpl implements ModelContext { this.wantedDockerImageRepository = wantedDockerImageRepository; this.modelVespaVersion = modelVespaVersion; this.wantedNodeVespaVersion = wantedNodeVespaVersion; + this.onnxModelCost = onnxModelCost; } @Override @@ -150,6 +154,8 @@ public class ModelContextImpl implements ModelContext { @Override public Optional<File> appDir() { return appDir; } + @Override public OnnxModelCost onnxModelCost() { return onnxModelCost; } + @Override public Optional<DockerImage> wantedDockerImageRepo() { return wantedDockerImageRepository; } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java index 328bd143d81..d302e0e8008 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java @@ -9,6 +9,7 @@ import com.yahoo.config.model.api.ConfigDefinitionRepo; import com.yahoo.config.model.api.Model; import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.api.ModelFactory; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.model.api.Provisioned; import com.yahoo.config.model.application.provider.MockFileRegistry; import com.yahoo.config.provision.ApplicationId; @@ -58,6 +59,7 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> { private final FlagSource flagSource; private final SecretStore secretStore; private final ExecutorService executor; + private final OnnxModelCost onnxModelCost; public ActivatedModelsBuilder(TenantName tenant, long applicationGeneration, @@ -72,7 +74,8 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> { ConfigserverConfig configserverConfig, Zone zone, ModelFactoryRegistry modelFactoryRegistry, - ConfigDefinitionRepo configDefinitionRepo) { + ConfigDefinitionRepo configDefinitionRepo, + OnnxModelCost onnxModelCost) { super(modelFactoryRegistry, configserverConfig, zone, hostProvisionerProvider, new SilentDeployLogger()); this.tenant = tenant; this.applicationGeneration = applicationGeneration; @@ -84,6 +87,7 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> { this.flagSource = flagSource; this.secretStore = secretStore; this.executor = executor; + this.onnxModelCost = onnxModelCost; } @Override @@ -108,6 +112,7 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> { provisioned, modelContextProperties, Optional.empty(), + onnxModelCost, wantedDockerImageRepository, modelFactory.version(), wantedNodeVespaVersion); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java index af611b131f6..a3f0284890c 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java @@ -16,6 +16,7 @@ import com.yahoo.config.model.api.Model; import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.api.ModelCreateResult; import com.yahoo.config.model.api.ModelFactory; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.model.api.Provisioned; import com.yahoo.config.model.api.ValidationParameters; import com.yahoo.config.model.api.ValidationParameters.IgnoreValidationErrors; @@ -69,6 +70,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P private final Optional<ApplicationVersions> activeApplicationVersions; private final Curator curator; private final ExecutorService executor; + private final OnnxModelCost onnxModelCost; public PreparedModelsBuilder(ModelFactoryRegistry modelFactoryRegistry, FlagSource flagSource, @@ -85,7 +87,8 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P PrepareParams params, Optional<ApplicationVersions> activeApplicationVersions, ConfigserverConfig configserverConfig, - Zone zone) { + Zone zone, + OnnxModelCost onnxModelCost) { super(modelFactoryRegistry, configserverConfig, zone, hostProvisionerProvider, deployLogger); this.flagSource = flagSource; this.secretStore = secretStore; @@ -98,6 +101,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P this.params = params; this.activeApplicationVersions = activeApplicationVersions; this.executor = executor; + this.onnxModelCost = onnxModelCost; } @Override @@ -123,6 +127,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P provisioned, createModelContextProperties(modelFactory.version(), applicationPackage), getAppDir(applicationPackage), + onnxModelCost, wantedDockerImageRepository, modelVersion, wantedNodeVespaVersion); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java index aeff97169f4..67872865106 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java @@ -18,6 +18,7 @@ import com.yahoo.config.model.api.ContainerEndpoint; import com.yahoo.config.model.api.EndpointCertificateMetadata; import com.yahoo.config.model.api.EndpointCertificateSecrets; import com.yahoo.config.model.api.FileDistribution; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.model.api.Quota; import com.yahoo.config.model.api.TenantSecretStore; import com.yahoo.config.provision.AllocatedHosts; @@ -93,6 +94,7 @@ public class SessionPreparer { private final FlagSource flagSource; private final ExecutorService executor; private final BooleanFlag writeSessionData; + private final OnnxModelCost onnxModelCost; public SessionPreparer(ModelFactoryRegistry modelFactoryRegistry, FileDistributionFactory fileDistributionFactory, @@ -103,7 +105,8 @@ public class SessionPreparer { Curator curator, Zone zone, FlagSource flagSource, - SecretStore secretStore) { + SecretStore secretStore, + OnnxModelCost onnxModelCost) { this.modelFactoryRegistry = modelFactoryRegistry; this.fileDistributionFactory = fileDistributionFactory; this.hostProvisionerProvider = hostProvisionerProvider; @@ -115,6 +118,7 @@ public class SessionPreparer { this.flagSource = flagSource; this.executor = executor; this.writeSessionData = Flags.WRITE_CONFIG_SERVER_SESSION_DATA_AS_ONE_BLOB.bindTo(flagSource); + this.onnxModelCost = onnxModelCost; } ExecutorService getExecutor() { return executor; } @@ -134,7 +138,8 @@ public class SessionPreparer { ApplicationId applicationId = params.getApplicationId(); Preparation preparation = new Preparation(hostValidator, logger, params, activeApplicationVersions, TenantRepository.getTenantPath(applicationId.tenant()), - serverDbSessionDir, applicationPackage, sessionZooKeeperClient); + serverDbSessionDir, applicationPackage, sessionZooKeeperClient, + onnxModelCost); preparation.preprocess(); try { AllocatedHosts allocatedHosts = preparation.buildModels(now); @@ -186,7 +191,7 @@ public class SessionPreparer { Preparation(HostValidator hostValidator, DeployLogger logger, PrepareParams params, Optional<ApplicationVersions> activeApplicationVersions, Path tenantPath, File serverDbSessionDir, ApplicationPackage applicationPackage, - SessionZooKeeperClient sessionZooKeeperClient) { + SessionZooKeeperClient sessionZooKeeperClient, OnnxModelCost onnxModelCost) { this.logger = logger; this.params = params; this.applicationPackage = applicationPackage; @@ -219,7 +224,8 @@ public class SessionPreparer { params, activeApplicationVersions, configserverConfig, - zone); + zone, + onnxModelCost); } void checkTimeout(String step) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java index 3b57945b21d..eb07e3010c6 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java @@ -9,6 +9,7 @@ import com.yahoo.concurrent.StripedExecutor; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.api.ConfigDefinitionRepo; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.model.application.provider.DeployData; import com.yahoo.config.model.application.provider.FilesApplicationPackage; import com.yahoo.config.provision.ApplicationId; @@ -118,6 +119,7 @@ public class SessionRepository { private final SessionPreparer sessionPreparer; private final Path sessionsPath; private final TenantName tenantName; + private final OnnxModelCost onnxModelCost; private final SessionCounter sessionCounter; private final SecretStore secretStore; private final HostProvisionerProvider hostProvisionerProvider; @@ -147,8 +149,10 @@ public class SessionRepository { Clock clock, ModelFactoryRegistry modelFactoryRegistry, ConfigDefinitionRepo configDefinitionRepo, - int maxNodeSize) { + int maxNodeSize, + OnnxModelCost onnxModelCost) { this.tenantName = tenantName; + this.onnxModelCost = onnxModelCost; sessionCounter = new SessionCounter(curator, tenantName); this.sessionsPath = TenantRepository.getSessionsPath(tenantName); this.clock = clock; @@ -553,7 +557,8 @@ public class SessionRepository { configserverConfig, zone, modelFactoryRegistry, - configDefinitionRepo); + configDefinitionRepo, + onnxModelCost); return ApplicationVersions.fromList(builder.buildModels(session.getApplicationId(), session.getDockerImageRepository(), session.getVespaVersion(), diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java index ba09b3de365..ea53c8aa2bb 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java @@ -11,6 +11,7 @@ import com.yahoo.concurrent.Locks; import com.yahoo.concurrent.StripedExecutor; import com.yahoo.concurrent.ThreadFactoryFactory; import com.yahoo.config.model.api.ConfigDefinitionRepo; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; @@ -119,6 +120,7 @@ public class TenantRepository { new ScheduledThreadPoolExecutor(1, new DaemonThreadFactory("check for removed applications")); private final Curator.DirectoryCache directoryCache; private final ZookeeperServerConfig zookeeperServerConfig; + private final OnnxModelCost onnxModelCost; /** * Creates a new tenant repository @@ -138,7 +140,8 @@ public class TenantRepository { ConfigActivationListener configActivationListener, TenantListener tenantListener, ZookeeperServerConfig zookeeperServerConfig, - FileDirectory fileDirectory) { + FileDirectory fileDirectory, + OnnxModelCost onnxModelCost) { this(hostRegistry, curator, metrics, @@ -157,7 +160,8 @@ public class TenantRepository { configDefinitionRepo, configActivationListener, tenantListener, - zookeeperServerConfig); + zookeeperServerConfig, + onnxModelCost); } public TenantRepository(HostRegistry hostRegistry, @@ -178,7 +182,8 @@ public class TenantRepository { ConfigDefinitionRepo configDefinitionRepo, ConfigActivationListener configActivationListener, TenantListener tenantListener, - ZookeeperServerConfig zookeeperServerConfig) { + ZookeeperServerConfig zookeeperServerConfig, + OnnxModelCost onnxModelCost) { this.hostRegistry = hostRegistry; this.configserverConfig = configserverConfig; this.curator = curator; @@ -201,6 +206,7 @@ public class TenantRepository { this.zookeeperServerConfig = zookeeperServerConfig; // This we should control with a feature flag. this.deployHelperExecutor = createModelBuilderExecutor(); + this.onnxModelCost = onnxModelCost; curator.framework().getConnectionStateListenable().addListener(this::stateChanged); @@ -353,7 +359,8 @@ public class TenantRepository { curator, zone, flagSource, - secretStore); + secretStore, + onnxModelCost); SessionRepository sessionRepository = new SessionRepository(tenantName, applicationRepo, sessionPreparer, @@ -371,7 +378,8 @@ public class TenantRepository { clock, modelFactoryRegistry, configDefinitionRepo, - zookeeperServerConfig.juteMaxBuffer()); + zookeeperServerConfig.juteMaxBuffer(), + onnxModelCost); log.log(Level.FINE, "Adding tenant '" + tenantName + "'" + ", created " + created + ". Bootstrapping in " + Duration.between(start, clock.instant())); Tenant tenant = new Tenant(tenantName, sessionRepository, applicationRepo, created); diff --git a/configserver/src/main/resources/configserver-app/services.xml b/configserver/src/main/resources/configserver-app/services.xml index 02481291213..a1e9bc3054b 100644 --- a/configserver/src/main/resources/configserver-app/services.xml +++ b/configserver/src/main/resources/configserver-app/services.xml @@ -26,6 +26,7 @@ <component id="com.yahoo.vespa.config.server.tenant.TenantRepository" bundle="configserver" /> <component id="com.yahoo.vespa.config.server.host.HostRegistry" bundle="configserver" /> <component id="com.yahoo.vespa.config.server.ApplicationRepository" bundle="configserver" /> + <component id="com.yahoo.vespa.config.server.FallbackOnnxModelCostProvider" bundle="configserver" /> <component id="com.yahoo.vespa.config.server.HealthCheckerProviderProvider" bundle="configserver" /> <component id="com.yahoo.vespa.config.server.version.VersionState" bundle="configserver" /> <component id="com.yahoo.config.provision.Zone" bundle="config-provisioning" /> diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java index f5cd56707b3..fccb6785cb8 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java @@ -9,6 +9,7 @@ import com.yahoo.config.model.api.ApplicationClusterEndpoint; import com.yahoo.config.model.api.ContainerEndpoint; import com.yahoo.config.model.api.HostProvisioner; import com.yahoo.config.model.api.ModelContext; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.model.api.Provisioned; import com.yahoo.config.model.application.provider.BaseDeployLogger; import com.yahoo.config.model.application.provider.MockFileRegistry; @@ -78,6 +79,7 @@ public class ModelContextImplTest { Optional.empty(), List.of()), Optional.empty(), + OnnxModelCost.disabled(), Optional.empty(), new Version(7), new Version(8)); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java index 0158aa1961d..6dbb0d72c87 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java @@ -10,6 +10,7 @@ import com.yahoo.config.model.api.ApplicationClusterEndpoint; import com.yahoo.config.model.api.ContainerEndpoint; import com.yahoo.config.model.api.EndpointCertificateSecrets; import com.yahoo.config.model.api.ModelContext; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.model.application.provider.BaseDeployLogger; import com.yahoo.config.model.application.provider.FilesApplicationPackage; import com.yahoo.config.provision.ApplicationId; @@ -132,7 +133,8 @@ public class SessionPreparerTest { curator, zone, flagSource, - secretStore); + secretStore, + OnnxModelCost.disabled()); } @Test(expected = InvalidApplicationException.class) diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java index 02ee3202475..1417df73cfc 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java @@ -6,6 +6,7 @@ import com.yahoo.cloud.config.ZookeeperServerConfig; import com.yahoo.component.Version; import com.yahoo.concurrent.InThreadExecutorService; import com.yahoo.concurrent.StripedExecutor; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.model.test.MockApplicationPackage; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; @@ -230,7 +231,8 @@ public class TenantRepositoryTest { new TestConfigDefinitionRepo(), new TenantApplicationsTest.MockConfigActivationListener(), new MockTenantListener(), - new ZookeeperServerConfig.Builder().myid(0).build()); + new ZookeeperServerConfig.Builder().myid(0).build(), + OnnxModelCost.disabled()); } @Override diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java index dd982ccbd72..0419a313dea 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java @@ -6,6 +6,7 @@ import com.yahoo.cloud.config.ZookeeperServerConfig; import com.yahoo.concurrent.InThreadExecutorService; import com.yahoo.concurrent.StripedExecutor; import com.yahoo.config.model.api.ConfigDefinitionRepo; +import com.yahoo.config.model.api.OnnxModelCost; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.config.server.ConfigServerDB; import com.yahoo.vespa.config.server.MockSecretStore; @@ -64,7 +65,8 @@ public class TestTenantRepository extends TenantRepository { configDefinitionRepo, configActivationListener, tenantListener, - new ZookeeperServerConfig.Builder().myid(0).build()); + new ZookeeperServerConfig.Builder().myid(0).build(), + OnnxModelCost.disabled()); } public static class Builder { |