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);
}
}
}