base.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import logging
  2. import os
  3. import platform
  4. import warnings
  5. from cvargparse import Arg
  6. from cvargparse import ArgFactory
  7. from cvargparse import GPUParser
  8. from cvargparse.utils import logger_config
  9. from cvfinetune.parser.dataset_args import add_dataset_args
  10. from cvfinetune.parser.model_args import add_model_args
  11. from cvfinetune.parser.training_args import add_training_args
  12. def default_factory(extra_list=[]):
  13. return ArgFactory(extra_list)
  14. class FineTuneParser(GPUParser):
  15. def _logging_config(self, simple=False):
  16. if not self.has_logging: return
  17. fmt = '{levelname:s} - [{asctime:s}] {filename:s}:{lineno:d} [{funcName:s}]: {message:s}'
  18. handler0 = logging.StreamHandler()
  19. handler0.addFilter(HostnameFilter())
  20. fmt0 = "<{hostname:^10s}>: " + fmt
  21. if self._args.logfile is None:
  22. filename = f"{platform.node()}.log"
  23. else:
  24. filename = self._args.logfile
  25. self._file_handler = handler1 = logging.FileHandler(filename=filename, mode="w")
  26. logger_config.init_logging_handlers([
  27. (handler0, fmt0, logging.INFO),
  28. (handler1, fmt, logging.INFO),
  29. ])
  30. def __del__(self):
  31. try:
  32. self._file_handler.flush()
  33. except Exception as e:
  34. warnings.warn("Could not flush logs to file: {}".format(e))
  35. def __init__(self, *args, **kwargs):
  36. super(FineTuneParser, self).__init__(*args, **kwargs)
  37. add_dataset_args(self)
  38. add_model_args(self)
  39. add_training_args(self)
  40. class HostnameFilter(logging.Filter):
  41. def filter(self, record):
  42. record.hostname = platform.node()
  43. return True