in src/vw-serving/src/vw_serving/model_manager.py [0:0]
def serve(self):
if self.sagemaker_tar_gz:
metadata_path, weights_path = self.get_model(disk_path=integ.ARTIFACTS_VOLUME)
else:
metadata_path, weights_path = self.get_model(model_id=self.model_id)
redis_client = redis.Redis()
redis_client.set("model_id", self.model_id)
redis_client.set("{}:weights".format(self.model_id), weights_path)
redis_client.set("{}:metadata".format(self.model_id), metadata_path)
if self.log_inference_data:
self._start_experience_logger()
logger.info("Starting gunicorn...")
self._start_gunicorn_server()
logger.info("Started gunicorn.")
sleep_seconds = 1
if self.poll_db:
while True:
time.sleep(sleep_seconds)
next_model_to_host_id = self._check_for_new_model()
# logger.info("Fetching latest model from Dynamo")
if next_model_to_host_id:
logger.info(
f"Found new model! Trying to replace Model ID: {self.model_id} with Model ID: {next_model_to_host_id}")
try:
metadata, weights = self.get_model(model_id=next_model_to_host_id)
# Delete the old model
redis_client.delete(self.model_id)
redis_client.delete("{}:weights".format(self.model_id))
redis_client.delete("{}:weights".format(self.model_id))
self.model_id = next_model_to_host_id
redis_client.set("model_id", self.model_id)
redis_client.set("{}:weights".format(self.model_id), weights)
redis_client.set("{}:metadata".format(self.model_id), metadata)
self._restart_gunicorn_workers()
except Exception as e:
logger.exception(f"Error happened when deploying model {next_model_to_host_id} due to {e}")