pytorch/torch/_dynamo/logging.py
Jean Schmidt f62e54df8f Reland "Dynamo, FX, Inductor Progress Bars (#88384)" … (#90055)
This commit had inconsistent internal land and pr merged. This caused merge conflicts that required revert in both places, normalize the internal commit stack, and then re-land properly.

Original commit: #88384 (011452a2a1)
Inconsistent revert: #90018 (8566aa7c0b4bdca50bf85ca14705b4304de030b3)
Revert of the inconsistent revert to restore healthy state (or re-land of the original commit): cf3c3f2280
Landing the correct, internally congruent revert of the original commit: (This PR) #90055 (TBD)

Pull Request resolved: https://github.com/pytorch/pytorch/pull/90055
Approved by: https://github.com/DanilBaibak, https://github.com/malfet
2022-12-02 13:28:00 +00:00

89 lines
2.3 KiB
Python

import itertools
import logging
import os
# logging level for dynamo generated graphs/bytecode/guards
logging.CODE = 15
logging.addLevelName(logging.CODE, "CODE")
# Return all loggers that torchdynamo/torchinductor is responsible for
def get_loggers():
return [
logging.getLogger("torch._dynamo"),
logging.getLogger("torch._inductor"),
]
# Set the level of all loggers that torchdynamo is responsible for
def set_loggers_level(level):
for logger in get_loggers():
logger.setLevel(level)
LOGGING_CONFIG = {
"version": 1,
"formatters": {
"torchdynamo_format": {
"format": "[%(asctime)s] %(name)s: [%(levelname)s] %(message)s"
},
},
"handlers": {
"torchdynamo_console": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "torchdynamo_format",
"stream": "ext://sys.stderr",
},
},
"loggers": {
"torch._dynamo": {
"level": "DEBUG",
"handlers": ["torchdynamo_console"],
"propagate": False,
},
"torch._inductor": {
"level": "DEBUG",
"handlers": ["torchdynamo_console"],
"propagate": False,
},
},
"disable_existing_loggers": False,
}
# initialize torchdynamo loggers
def init_logging(log_level, log_file_name=None):
if "PYTEST_CURRENT_TEST" not in os.environ:
logging.config.dictConfig(LOGGING_CONFIG)
if log_file_name is not None:
log_file = logging.FileHandler(log_file_name)
log_file.setLevel(log_level)
for logger in get_loggers():
logger.addHandler(log_file)
set_loggers_level(log_level)
# Creates a logging function that logs a message with a step # prepended.
# get_step_logger should be lazily called (i.e. at runtime, not at module-load time)
# so that step numbers are initialized properly. e.g.:
# @functools.lru_cache(None)
# def _step_logger():
# return get_step_logger(logging.getLogger(...))
# def fn():
# _step_logger()(logging.INFO, "msg")
_step_counter = itertools.count(1)
def get_step_logger(logger):
step = next(_step_counter)
def log(level, msg):
logger.log(level, f"Step {step}: {msg}")
return log