unified.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import logging
  2. from typing import TYPE_CHECKING, Dict, List, Optional, Type
  3. from ray.tune.logger import DEFAULT_LOGGERS
  4. from ray.tune.logger.json import JsonLogger
  5. from ray.tune.logger.logger import Logger
  6. from ray.util import log_once
  7. from ray.util.annotations import Deprecated, PublicAPI
  8. logger = logging.getLogger(__name__)
  9. if TYPE_CHECKING:
  10. from ray.tune.experiment.trial import Trial # noqa: F401
  11. @Deprecated(message="`UnifiedLogger` will be removed in Ray 2.7.", warning=True)
  12. @PublicAPI
  13. class UnifiedLogger(Logger):
  14. """Unified result logger for TensorBoard, rllab/viskit, plain json.
  15. Arguments:
  16. config: Configuration passed to all logger creators.
  17. logdir: Directory for all logger creators to log to.
  18. loggers: List of logger creators. Defaults to CSV, Tensorboard,
  19. and JSON loggers.
  20. """
  21. def __init__(
  22. self,
  23. config: Dict,
  24. logdir: str,
  25. trial: Optional["Trial"] = None,
  26. loggers: Optional[List[Type[Logger]]] = None,
  27. ):
  28. if loggers is None:
  29. self._logger_cls_list = DEFAULT_LOGGERS
  30. else:
  31. self._logger_cls_list = loggers
  32. if JsonLogger not in self._logger_cls_list:
  33. if log_once("JsonLogger"):
  34. logger.warning(
  35. "JsonLogger not provided. The ExperimentAnalysis tool is "
  36. "disabled."
  37. )
  38. super(UnifiedLogger, self).__init__(config, logdir, trial)
  39. def _init(self):
  40. self._loggers = []
  41. for cls in self._logger_cls_list:
  42. try:
  43. self._loggers.append(cls(self.config, self.logdir, self.trial))
  44. except Exception as exc:
  45. if log_once(f"instantiate:{cls.__name__}"):
  46. logger.warning(
  47. "Could not instantiate %s: %s.", cls.__name__, str(exc)
  48. )
  49. def on_result(self, result):
  50. for _logger in self._loggers:
  51. _logger.on_result(result)
  52. def update_config(self, config):
  53. for _logger in self._loggers:
  54. _logger.update_config(config)
  55. def close(self):
  56. for _logger in self._loggers:
  57. _logger.close()
  58. def flush(self):
  59. for _logger in self._loggers:
  60. _logger.flush()