private void initModelStore()

in frontend/server/src/main/java/org/pytorch/serve/ModelServer.java [143:277]


    private void initModelStore() throws InvalidSnapshotException, IOException {
        WorkLoadManager wlm = new WorkLoadManager(configManager, serverGroups.getBackendGroup());
        ModelManager.init(configManager, wlm);
        WorkflowManager.init(configManager);
        SnapshotManager.init(configManager);
        Set<String> startupModels = ModelManager.getInstance().getStartupModels();
        String defaultModelName;
        String modelSnapshot = configManager.getModelSnapshot();
        if (modelSnapshot != null) {
            SnapshotManager.getInstance().restore(modelSnapshot);
            return;
        }

        String loadModels = configManager.getLoadModels();
        if (loadModels == null || loadModels.isEmpty()) {
            return;
        }

        ModelManager modelManager = ModelManager.getInstance();
        int workers = configManager.getDefaultWorkers();
        if ("ALL".equalsIgnoreCase(loadModels)) {
            String modelStore = configManager.getModelStore();
            if (modelStore == null) {
                logger.warn("Model store is not configured.");
                return;
            }

            File modelStoreDir = new File(modelStore);
            if (!modelStoreDir.exists()) {
                logger.warn("Model store path is not found: {}", modelStore);
                return;
            }

            // Check folders to see if they can be models as well
            File[] files = modelStoreDir.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isHidden()) {
                        continue;
                    }
                    String fileName = file.getName();
                    if (file.isFile()
                            && !fileName.endsWith(".mar")
                            && !fileName.endsWith(".model")) {
                        continue;
                    }
                    try {
                        logger.debug("Loading models from model store: {}", file.getName());
                        defaultModelName = getDefaultModelName(fileName);

                        ModelArchive archive =
                                modelManager.registerModel(file.getName(), defaultModelName);
                        modelManager.updateModel(
                                archive.getModelName(),
                                archive.getModelVersion(),
                                configManager.getJsonIntValue(
                                        archive.getModelName(),
                                        archive.getModelVersion(),
                                        Model.MIN_WORKERS,
                                        workers),
                                configManager.getJsonIntValue(
                                        archive.getModelName(),
                                        archive.getModelVersion(),
                                        Model.MAX_WORKERS,
                                        workers),
                                true,
                                false);
                        startupModels.add(archive.getModelName());
                    } catch (ModelException
                            | IOException
                            | InterruptedException
                            | DownloadArchiveException e) {
                        logger.warn("Failed to load model: " + file.getAbsolutePath(), e);
                    }
                }
            }
            return;
        }

        String[] models = loadModels.split(",");
        for (String model : models) {
            String[] pair = model.split("=", 2);
            String modelName = null;
            String url;
            if (pair.length == 1) {
                url = pair[0];
            } else {
                modelName = pair[0];
                url = pair[1];
            }
            if (url.isEmpty()) {
                continue;
            }

            try {
                logger.info("Loading initial models: {}", url);
                defaultModelName = getDefaultModelName(url);

                ModelArchive archive =
                        modelManager.registerModel(
                                url,
                                modelName,
                                null,
                                null,
                                1,
                                100,
                                configManager.getDefaultResponseTimeout(),
                                defaultModelName,
                                false,
                                false,
                                false);
                modelManager.updateModel(
                        archive.getModelName(),
                        archive.getModelVersion(),
                        configManager.getJsonIntValue(
                                archive.getModelName(),
                                archive.getModelVersion(),
                                Model.MIN_WORKERS,
                                workers),
                        configManager.getJsonIntValue(
                                archive.getModelName(),
                                archive.getModelVersion(),
                                Model.MAX_WORKERS,
                                workers),
                        true,
                        false);
                startupModels.add(archive.getModelName());
            } catch (ModelException
                    | IOException
                    | InterruptedException
                    | DownloadArchiveException e) {
                logger.warn("Failed to load model: " + url, e);
            }
        }
    }