Logging in official models
This library adds logging functions that print or save tensor values. Official models should define all common hooks (using hooks helper) and a benchmark logger.
Hooks are a TensorFlow concept that define specific actions at certain points of the execution. We use them to obtain and log tensor values during training.
hooks_helper.py provides an easy way to create common hooks. The following hooks are currently defined:
- LoggingTensorHook: Logs tensor values
- ProfilerHook: Writes a timeline json that can be loaded into chrome://tracing.
- ExamplesPerSecondHook: Logs the number of examples processed per second.
- LoggingMetricHook: Similar to LoggingTensorHook, except that the tensors are logged in a format defined by our data anaylsis pipeline.
The benchmark logger provides useful functions for logging environment information, and evaluation results. The module also contains a context which is used to update the status of the run.
from absl import app as absl_app from official.utils.logs import hooks_helper from official.utils.logs import logger def model_main(flags_obj): estimator = ... benchmark_logger = logger.get_benchmark_logger() benchmark_logger.log_run_info(...) train_hooks = hooks_helper.get_train_hooks(...) for epoch in range(10): estimator.train(..., hooks=train_hooks) eval_results = estimator.evaluate(...) # Log a dictionary of metrics benchmark_logger.log_evaluation_result(eval_results) # Log an individual metric benchmark_logger.log_metric(...) def main(_): with logger.benchmark_context(flags.FLAGS): model_main(flags.FLAGS) if __name__ == "__main__": # define flags absl_app.run(main)