From 56d44856489f665a88617eab51b7fc2486831ae4 Mon Sep 17 00:00:00 2001 From: KumoLiu Date: Sat, 18 Feb 2023 17:15:56 +0800 Subject: [PATCH 1/4] fix #6024 Signed-off-by: KumoLiu --- monai/handlers/checkpoint_saver.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/monai/handlers/checkpoint_saver.py b/monai/handlers/checkpoint_saver.py index b6cb503a92..fca4a3d8e4 100644 --- a/monai/handlers/checkpoint_saver.py +++ b/monai/handlers/checkpoint_saver.py @@ -11,6 +11,7 @@ from __future__ import annotations +import os import logging import warnings from collections.abc import Mapping @@ -271,7 +272,11 @@ def completed(self, engine: Engine) -> None: raise AssertionError if not hasattr(self.logger, "info"): raise AssertionError("Error, provided logger has not info attribute.") - self.logger.info(f"Train completed, saved final checkpoint: {self._final_checkpoint.last_checkpoint}") + if self._final_checkpoint.save_handler.filename is not None: + _final_checkpoint_path = os.path.join(self.save_dir, self._final_checkpoint.save_handler.filename) + else: + _final_checkpoint_path = self._final_checkpoint.last_checkpoint + self.logger.info(f"Train completed, saved final checkpoint: {_final_checkpoint_path}") def exception_raised(self, engine: Engine, e: Exception) -> None: """Callback for train or validation/evaluation exception raised Event. From d41ca72bbca1a214016de9f6ab8f282b78b817a2 Mon Sep 17 00:00:00 2001 From: KumoLiu Date: Sat, 18 Feb 2023 17:29:50 +0800 Subject: [PATCH 2/4] fix flake8 Signed-off-by: KumoLiu --- monai/handlers/checkpoint_saver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monai/handlers/checkpoint_saver.py b/monai/handlers/checkpoint_saver.py index fca4a3d8e4..54fb2a9238 100644 --- a/monai/handlers/checkpoint_saver.py +++ b/monai/handlers/checkpoint_saver.py @@ -11,8 +11,8 @@ from __future__ import annotations -import os import logging +import os import warnings from collections.abc import Mapping from typing import TYPE_CHECKING, Any From 9ae38cb3302cc1031695f4f6fcc86a3b8cad3c12 Mon Sep 17 00:00:00 2001 From: KumoLiu Date: Sat, 18 Feb 2023 17:41:14 +0800 Subject: [PATCH 3/4] fix mypy Signed-off-by: KumoLiu --- monai/handlers/checkpoint_saver.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/monai/handlers/checkpoint_saver.py b/monai/handlers/checkpoint_saver.py index 54fb2a9238..2f508b642c 100644 --- a/monai/handlers/checkpoint_saver.py +++ b/monai/handlers/checkpoint_saver.py @@ -272,10 +272,10 @@ def completed(self, engine: Engine) -> None: raise AssertionError if not hasattr(self.logger, "info"): raise AssertionError("Error, provided logger has not info attribute.") - if self._final_checkpoint.save_handler.filename is not None: - _final_checkpoint_path = os.path.join(self.save_dir, self._final_checkpoint.save_handler.filename) + if self._final_checkpoint.save_handler.filename is not None: # type: ignore[attr-defined] + _final_checkpoint_path = os.path.join(self.save_dir, self._final_checkpoint.save_handler.filename) # type: ignore[attr-defined] else: - _final_checkpoint_path = self._final_checkpoint.last_checkpoint + _final_checkpoint_path = self._final_checkpoint.last_checkpoint # type: ignore[assignment] self.logger.info(f"Train completed, saved final checkpoint: {_final_checkpoint_path}") def exception_raised(self, engine: Engine, e: Exception) -> None: From ba40ae4419a26a797a44345a772d45d6b436e422 Mon Sep 17 00:00:00 2001 From: KumoLiu Date: Sat, 18 Feb 2023 18:21:29 +0800 Subject: [PATCH 4/4] update log in exception Signed-off-by: KumoLiu --- monai/handlers/checkpoint_saver.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/monai/handlers/checkpoint_saver.py b/monai/handlers/checkpoint_saver.py index 2f508b642c..0651c6ff33 100644 --- a/monai/handlers/checkpoint_saver.py +++ b/monai/handlers/checkpoint_saver.py @@ -119,6 +119,7 @@ def __init__( self._key_metric_checkpoint: Checkpoint | None = None self._interval_checkpoint: Checkpoint | None = None self._name = name + self._final_filename = final_filename class _DiskSaver(DiskSaver): """ @@ -149,7 +150,7 @@ def _final_func(engine: Engine) -> Any: self._final_checkpoint = Checkpoint( to_save=self.save_dict, - save_handler=_DiskSaver(dirname=self.save_dir, filename=final_filename), + save_handler=_DiskSaver(dirname=self.save_dir, filename=self._final_filename), filename_prefix=file_prefix, score_function=_final_func, score_name="final_iteration", @@ -272,8 +273,8 @@ def completed(self, engine: Engine) -> None: raise AssertionError if not hasattr(self.logger, "info"): raise AssertionError("Error, provided logger has not info attribute.") - if self._final_checkpoint.save_handler.filename is not None: # type: ignore[attr-defined] - _final_checkpoint_path = os.path.join(self.save_dir, self._final_checkpoint.save_handler.filename) # type: ignore[attr-defined] + if self._final_filename is not None: + _final_checkpoint_path = os.path.join(self.save_dir, self._final_filename) else: _final_checkpoint_path = self._final_checkpoint.last_checkpoint # type: ignore[assignment] self.logger.info(f"Train completed, saved final checkpoint: {_final_checkpoint_path}") @@ -296,7 +297,11 @@ def exception_raised(self, engine: Engine, e: Exception) -> None: raise AssertionError if not hasattr(self.logger, "info"): raise AssertionError("Error, provided logger has not info attribute.") - self.logger.info(f"Exception raised, saved the last checkpoint: {self._final_checkpoint.last_checkpoint}") + if self._final_filename is not None: + _final_checkpoint_path = os.path.join(self.save_dir, self._final_filename) + else: + _final_checkpoint_path = self._final_checkpoint.last_checkpoint # type: ignore[assignment] + self.logger.info(f"Exception raised, saved the last checkpoint: {_final_checkpoint_path}") raise e def metrics_completed(self, engine: Engine) -> None: