From ad9ac0eb8ed2c8fccb6f16a732c7d8af6ea981d5 Mon Sep 17 00:00:00 2001 From: Sergio Aparicio Date: Wed, 15 Oct 2025 17:38:05 +0200 Subject: [PATCH 1/3] Add timing for model loading and log duration --- mlserver/server.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/mlserver/server.py b/mlserver/server.py index d82c49080..c1c04f57b 100644 --- a/mlserver/server.py +++ b/mlserver/server.py @@ -1,6 +1,7 @@ import asyncio import signal import logging +import time from typing import Optional, List @@ -122,12 +123,12 @@ async def start(self, models_settings: List[ModelSettings] = []): servers_task = asyncio.gather(*servers) try: + total_start: float = time.perf_counter() await asyncio.gather( - *[ - self._model_registry.load(model_settings) - for model_settings in models_settings - ] + *[ self._timed_load(model_settings) for model_settings in models_settings ] ) + total_duration: float = time.perf_counter() - total_start + logger.debug(f"Loaded {len(models_settings)} models in {total_duration:3f}s") except Exception: # If one of the models failed to load during startup, shutdown the # server gracefully @@ -188,3 +189,14 @@ async def stop(self, sig: Optional[int] = None): if self._metrics_server: await self._metrics_server.stop(sig) + + async def _timed_load(self, model_settings: ModelSettings) -> MLModel: + """ + Load a model while measuring the elapsed time. + """ + t0: float = time.perf_counter() + try: + return await self._model_registry.load(model_settings) + finally: + elapsed: float = time.perf_counter() - t0 + logger.debug(F"Model {getattr(model_settings, 'name', '')} loaded in {elapsed:3f}s") From e2badfe0cf88103ef62796b8681d9476baa753b8 Mon Sep 17 00:00:00 2001 From: Sergio Aparicio Date: Wed, 15 Oct 2025 18:05:35 +0200 Subject: [PATCH 2/3] Improve model loading logging with precise duration formatting --- mlserver/server.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/mlserver/server.py b/mlserver/server.py index c1c04f57b..b12bf237f 100644 --- a/mlserver/server.py +++ b/mlserver/server.py @@ -125,10 +125,15 @@ async def start(self, models_settings: List[ModelSettings] = []): try: total_start: float = time.perf_counter() await asyncio.gather( - *[ self._timed_load(model_settings) for model_settings in models_settings ] + *[ + self._timed_load(model_settings) + for model_settings in models_settings + ] ) total_duration: float = time.perf_counter() - total_start - logger.debug(f"Loaded {len(models_settings)} models in {total_duration:3f}s") + logger.debug( + f"Loaded {len(models_settings)} models in {total_duration:0.3f}s" + ) except Exception: # If one of the models failed to load during startup, shutdown the # server gracefully @@ -192,11 +197,12 @@ async def stop(self, sig: Optional[int] = None): async def _timed_load(self, model_settings: ModelSettings) -> MLModel: """ - Load a model while measuring the elapsed time. + Load a model while measuring the elapsed time. """ t0: float = time.perf_counter() try: return await self._model_registry.load(model_settings) finally: elapsed: float = time.perf_counter() - t0 - logger.debug(F"Model {getattr(model_settings, 'name', '')} loaded in {elapsed:3f}s") + model_name = getattr(model_settings, "name", "") + logger.debug(f"Model {model_name} loaded in {elapsed:0.3f}s") From 807ae59ef82015f8e11addcf67e9d2d7930ce2f9 Mon Sep 17 00:00:00 2001 From: Sergio Aparicio Date: Thu, 16 Oct 2025 10:06:47 +0200 Subject: [PATCH 3/3] feat: run Workflow