in mms/model_loader.py [0:0]
def load(self, model_name, model_dir, handler, gpu_id, batch_size):
"""
Load MMS 1.0 model from file.
:param model_name:
:param model_dir:
:param handler:
:param gpu_id:
:param batch_size:
:return:
"""
logging.debug("Loading model - working dir: %s", os.getcwd())
# TODO: Request ID is not given. UUID is a temp UUID.
metrics = MetricsStore(uuid.uuid4(), model_name)
manifest_file = os.path.join(model_dir, "MAR-INF/MANIFEST.json")
manifest = None
if os.path.exists(manifest_file):
with open(manifest_file) as f:
manifest = json.load(f)
temp = handler.split(":", 1)
module_name = temp[0]
function_name = None if len(temp) == 1 else temp[1]
if module_name.endswith(".py"):
module_name = module_name[:-3]
module_name = module_name.split("/")[-1]
self.module = importlib.import_module(module_name)
if self.module is None:
raise ValueError("Unable to load module {}, make sure it is added to python path".format(module_name))
if function_name is None:
function_name = "handle"
if hasattr(self.module, function_name):
entry_point = getattr(self.module, function_name)
service = Service(model_name, model_dir, manifest, entry_point, gpu_id, batch_size)
service.context.metrics = metrics
# initialize model at load time
entry_point(None, service.context)
else:
model_class_definitions = ModelLoader.list_model_services(self.module)
if len(model_class_definitions) != 1:
raise ValueError("Expected only one class in custom service code or a function entry point {}".format(
model_class_definitions))
model_class = model_class_definitions[0]
model_service = model_class()
handle = getattr(model_service, "handle")
if handle is None:
raise ValueError("Expect handle method in class {}".format(str(model_class)))
service = Service(model_name, model_dir, manifest, model_service.handle, gpu_id, batch_size)
initialize = getattr(model_service, "initialize")
if initialize is not None:
# noinspection PyBroadException
try:
model_service.initialize(service.context)
# pylint: disable=broad-except
except Exception:
# noinspection PyBroadException
try:
sys.exc_clear()
# pylint: disable=broad-except
except Exception:
pass
return service