From 95b6e5a736155dd4046560e061563d13d60d182a Mon Sep 17 00:00:00 2001 From: Ir1d Date: Mon, 4 Nov 2019 22:33:14 +0800 Subject: [PATCH 1/6] change print to logging --- README.md | 4 +- docs/examples/Examples.md | 2 +- .../lightning_module_template.py | 6 +-- pytorch_lightning/callbacks/pt_callbacks.py | 41 +++++++++++-------- pytorch_lightning/logging/base.py | 13 ++++++ pytorch_lightning/root_module/memory.py | 3 +- pytorch_lightning/root_module/root_module.py | 3 +- pytorch_lightning/trainer/amp_mixin.py | 3 +- pytorch_lightning/trainer/ddp_mixin.py | 5 ++- pytorch_lightning/trainer/trainer.py | 3 +- pytorch_lightning/trainer/trainer_io.py | 17 ++++---- .../trainer/training_tricks_mixin.py | 4 +- tests/test_a_restore_models.py | 3 +- 13 files changed, 66 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index b91857a725323..97a0f9a89c589 100644 --- a/README.md +++ b/README.md @@ -164,8 +164,8 @@ trainer = Trainer(max_nb_epochs=1, train_percent_check=0.1) trainer.fit(model) # view tensorboard logs -print('View tensorboard logs by running\ntensorboard --logdir %s' % os.getcwd()) -print('and going to http://localhost:6006 on your browser') +logging.info('View tensorboard logs by running\ntensorboard --logdir %s' % os.getcwd()) +logging.info('and going to http://localhost:6006 on your browser') ``` When you're all done you can even run the test set separately. diff --git a/docs/examples/Examples.md b/docs/examples/Examples.md index 5deda15919281..49e83e7026c86 100644 --- a/docs/examples/Examples.md +++ b/docs/examples/Examples.md @@ -119,7 +119,7 @@ def optimize_on_cluster(hyperparams): job_display_name = job_display_name[0:3] # run hopt - print('submitting jobs...') + logging.info('submitting jobs...') cluster.optimize_parallel_cluster_gpu( main, nb_trials=hyperparams.nb_hopt_trials, diff --git a/pl_examples/basic_examples/lightning_module_template.py b/pl_examples/basic_examples/lightning_module_template.py index 6b58ab46efac5..43ca691448dab 100644 --- a/pl_examples/basic_examples/lightning_module_template.py +++ b/pl_examples/basic_examples/lightning_module_template.py @@ -214,17 +214,17 @@ def __dataloader(self, train): @pl.data_loader def train_dataloader(self): - print('training data loader called') + self.logger.info('training data loader called') return self.__dataloader(train=True) @pl.data_loader def val_dataloader(self): - print('val data loader called') + self.logger.info('val data loader called') return self.__dataloader(train=False) @pl.data_loader def test_dataloader(self): - print('test data loader called') + self.logger.info('test data loader called') return self.__dataloader(train=False) @staticmethod diff --git a/pytorch_lightning/callbacks/pt_callbacks.py b/pytorch_lightning/callbacks/pt_callbacks.py index d5d80d2445191..7182fafe40165 100644 --- a/pytorch_lightning/callbacks/pt_callbacks.py +++ b/pytorch_lightning/callbacks/pt_callbacks.py @@ -1,6 +1,6 @@ import os import shutil - +import logging import numpy as np from pytorch_lightning.pt_overrides.override_data_parallel import LightningDistributedDataParallel @@ -91,7 +91,7 @@ def __init__(self, monitor='val_loss', self.stopped_epoch = 0 if mode not in ['auto', 'min', 'max']: - print('EarlyStopping mode %s is unknown, fallback to auto mode.' % mode) + logging.info('EarlyStopping mode %s is unknown, fallback to auto mode.' % mode) mode = 'auto' if mode == 'min': @@ -121,9 +121,10 @@ def on_epoch_end(self, epoch, logs=None): current = logs.get(self.monitor) stop_training = False if current is None: - print('Early stopping conditioned on metric `%s` ' - 'which is not available. Available metrics are: %s' % - (self.monitor, ','.join(list(logs.keys()))), RuntimeWarning) + logging.info( + 'Early stopping conditioned on metric `%s` ' + 'which is not available. Available metrics are: %s' % + (self.monitor, ','.join(list(logs.keys()))), RuntimeWarning) stop_training = True return stop_training @@ -141,7 +142,7 @@ def on_epoch_end(self, epoch, logs=None): def on_train_end(self, logs=None): if self.stopped_epoch > 0 and self.verbose > 0: - print('Epoch %05d: early stopping' % (self.stopped_epoch + 1)) + logging.info('Epoch %05d: early stopping' % (self.stopped_epoch + 1)) class ModelCheckpoint(Callback): @@ -187,8 +188,9 @@ def __init__(self, filepath, monitor='val_loss', verbose=0, self.prefix = prefix if mode not in ['auto', 'min', 'max']: - print('ModelCheckpoint mode %s is unknown, ' - 'fallback to auto mode.' % (mode), RuntimeWarning) + logging.info( + 'ModelCheckpoint mode %s is unknown, ' + 'fallback to auto mode.' % (mode), RuntimeWarning) mode = 'auto' if mode == 'min': @@ -232,25 +234,28 @@ def on_epoch_end(self, epoch, logs=None): if self.save_best_only: current = logs.get(self.monitor) if current is None: - print('Can save best model only with %s available,' - ' skipping.' % (self.monitor), RuntimeWarning) + logging.info( + 'Can save best model only with %s available,' + ' skipping.' % (self.monitor), RuntimeWarning) else: if self.monitor_op(current, self.best): if self.verbose > 0: - print('\nEpoch %05d: %s improved from %0.5f to %0.5f,' - ' saving model to %s' - % (epoch + 1, self.monitor, self.best, - current, filepath)) + logging.info( + '\nEpoch %05d: %s improved from %0.5f to %0.5f,' + ' saving model to %s' + % (epoch + 1, self.monitor, self.best, + current, filepath)) self.best = current self.save_model(filepath, overwrite=True) else: if self.verbose > 0: - print('\nEpoch %05d: %s did not improve' % - (epoch + 1, self.monitor)) + logging.info( + '\nEpoch %05d: %s did not improve' % + (epoch + 1, self.monitor)) else: if self.verbose > 0: - print('\nEpoch %05d: saving model to %s' % (epoch + 1, filepath)) + logging.info('\nEpoch %05d: saving model to %s' % (epoch + 1, filepath)) self.save_model(filepath, overwrite=False) @@ -291,6 +296,6 @@ def on_epoch_begin(self, epoch, trainer): losses = [10, 9, 8, 8, 6, 4.3, 5, 4.4, 2.8, 2.5] for i, loss in enumerate(losses): should_stop = c.on_epoch_end(i, logs={'val_loss': loss}) - print(loss) + logging.info(loss) if should_stop: break diff --git a/pytorch_lightning/logging/base.py b/pytorch_lightning/logging/base.py index 351b945e856f7..c2a70e820bfa8 100644 --- a/pytorch_lightning/logging/base.py +++ b/pytorch_lightning/logging/base.py @@ -1,4 +1,5 @@ from functools import wraps +import logging def rank_zero_only(fn): @@ -69,3 +70,15 @@ def rank(self, value): def version(self): """Return the experiment version""" return None + + def info(self, msg): + """ + log msg using level 'INFO' + """ + logging.info(msg) + + def debug(self, msg): + """ + log msg using level 'DEBUG' + """ + logging.debug(msg) diff --git a/pytorch_lightning/root_module/memory.py b/pytorch_lightning/root_module/memory.py index d16d2659405cf..1201aab9f44ca 100644 --- a/pytorch_lightning/root_module/memory.py +++ b/pytorch_lightning/root_module/memory.py @@ -8,6 +8,7 @@ import numpy as np import pandas as pd import torch +import logging class ModelSummary(object): @@ -166,7 +167,7 @@ def print_mem_stack(): # pragma: no cover for obj in gc.get_objects(): try: if torch.is_tensor(obj) or (hasattr(obj, 'data') and torch.is_tensor(obj.data)): - print(type(obj), obj.size()) + logging.info(type(obj), obj.size()) except Exception: pass diff --git a/pytorch_lightning/root_module/root_module.py b/pytorch_lightning/root_module/root_module.py index ab5275dcb203d..b25ab9e49443f 100644 --- a/pytorch_lightning/root_module/root_module.py +++ b/pytorch_lightning/root_module/root_module.py @@ -10,6 +10,7 @@ from pytorch_lightning.root_module.memory import ModelSummary from pytorch_lightning.root_module.model_saving import ModelIO from pytorch_lightning.trainer.trainer_io import load_hparams_from_tags_csv +import logging class LightningModule(GradInformation, ModelIO, ModelHooks): @@ -240,7 +241,7 @@ def load_from_checkpoint(cls, checkpoint_path): def summarize(self, mode): model_summary = ModelSummary(self, mode=mode) - print(model_summary) + logging.info(model_summary) def freeze(self): for param in self.parameters(): diff --git a/pytorch_lightning/trainer/amp_mixin.py b/pytorch_lightning/trainer/amp_mixin.py index d0790242febfe..42251bb37b3ce 100644 --- a/pytorch_lightning/trainer/amp_mixin.py +++ b/pytorch_lightning/trainer/amp_mixin.py @@ -4,6 +4,7 @@ APEX_AVAILABLE = True except ImportError: APEX_AVAILABLE = False +import logging class TrainerAMPMixin(object): @@ -11,7 +12,7 @@ class TrainerAMPMixin(object): def init_amp(self, use_amp): self.use_amp = use_amp and APEX_AVAILABLE if self.use_amp: - print('using 16bit precision') + logging.info('using 16bit precision') if use_amp and not APEX_AVAILABLE: # pragma: no cover msg = """ diff --git a/pytorch_lightning/trainer/ddp_mixin.py b/pytorch_lightning/trainer/ddp_mixin.py index 36345b7459687..09fd7fd2786e7 100644 --- a/pytorch_lightning/trainer/ddp_mixin.py +++ b/pytorch_lightning/trainer/ddp_mixin.py @@ -1,6 +1,7 @@ import os import re import warnings +import logging import torch import torch.distributed as dist @@ -59,7 +60,7 @@ def set_distributed_mode(self, distributed_backend, nb_gpu_nodes): 'To silence this warning set distributed_backend=ddp' warnings.warn(w) - print('gpu available: {}, used: {}'.format(torch.cuda.is_available(), self.on_gpu)) + logging.info('gpu available: {}, used: {}'.format(torch.cuda.is_available(), self.on_gpu)) def configure_slurm_ddp(self, nb_gpu_nodes): self.is_slurm_managing_tasks = False @@ -107,7 +108,7 @@ def set_nvidia_flags(self, is_slurm_managing_tasks, data_parallel_device_ids): gpu_str = ','.join([str(x) for x in data_parallel_device_ids]) os.environ["CUDA_VISIBLE_DEVICES"] = gpu_str - print(f'VISIBLE GPUS: {os.environ["CUDA_VISIBLE_DEVICES"]}') + logging.info(f'VISIBLE GPUS: {os.environ["CUDA_VISIBLE_DEVICES"]}') def ddp_train(self, gpu_nb, model): """ diff --git a/pytorch_lightning/trainer/trainer.py b/pytorch_lightning/trainer/trainer.py index c53aeb7bdc464..7ac188b20a762 100644 --- a/pytorch_lightning/trainer/trainer.py +++ b/pytorch_lightning/trainer/trainer.py @@ -4,6 +4,7 @@ import os import warnings +import logging import torch import torch.distributed as dist @@ -148,7 +149,7 @@ def __init__(self, Running in fast_dev_run mode: will run a full train, val loop using a single batch ''' - print(m) + logging.info(m) # set default save path if user didn't provide one self.default_save_path = default_save_path diff --git a/pytorch_lightning/trainer/trainer_io.py b/pytorch_lightning/trainer/trainer_io.py index dd38c05162331..169954a51c860 100644 --- a/pytorch_lightning/trainer/trainer_io.py +++ b/pytorch_lightning/trainer/trainer_io.py @@ -3,6 +3,7 @@ import signal import warnings from subprocess import call +import logging import torch import torch.distributed as dist @@ -87,7 +88,7 @@ def restore_state_if_checkpoint_exists(self, model): if last_ckpt_name is not None: last_ckpt_path = os.path.join(self.checkpoint_callback.filepath, last_ckpt_name) self.restore(last_ckpt_path, self.on_gpu) - print(f'model and trainer restored from checkpoint: {last_ckpt_path}') + logging.info(f'model and trainer restored from checkpoint: {last_ckpt_path}') did_restore = True return did_restore @@ -106,14 +107,14 @@ def register_slurm_signal_handlers(self): pass if on_slurm: - print('set slurm handle signals') + logging.info('set slurm handle signals') signal.signal(signal.SIGUSR1, self.sig_handler) signal.signal(signal.SIGTERM, self.term_handler) def sig_handler(self, signum, frame): if self.proc_rank == 0: # save weights - print('handling SIGUSR1') + logging.info('handling SIGUSR1') self.hpc_save(self.weights_save_path, self.logger) # find job id @@ -121,21 +122,21 @@ def sig_handler(self, signum, frame): cmd = 'scontrol requeue {}'.format(job_id) # requeue job - print('\nrequeing job {}...'.format(job_id)) + logging.info('\nrequeing job {}...'.format(job_id)) result = call(cmd, shell=True) # print result text if result == 0: - print('requeued exp ', job_id) + logging.info('requeued exp ', job_id) else: - print('requeue failed...') + logging.info('requeue failed...') # close experiment to avoid issues self.logger.close() def term_handler(self, signum, frame): # save - print("bypassing sigterm") + logging.info("bypassing sigterm") # -------------------- # MODEL SAVE CHECKPOINT @@ -328,7 +329,7 @@ def hpc_load(self, folderpath, on_gpu): # call model hook model.on_hpc_load(checkpoint) - print(f'restored hpc model from: {filepath}') + logging.info(f'restored hpc model from: {filepath}') def max_ckpt_in_folder(self, path, name_key='ckpt_'): files = os.listdir(path) diff --git a/pytorch_lightning/trainer/training_tricks_mixin.py b/pytorch_lightning/trainer/training_tricks_mixin.py index 1efc9a171ef26..836b66897bace 100644 --- a/pytorch_lightning/trainer/training_tricks_mixin.py +++ b/pytorch_lightning/trainer/training_tricks_mixin.py @@ -1,5 +1,5 @@ import torch - +import logging from pytorch_lightning.callbacks import GradientAccumulationScheduler @@ -14,7 +14,7 @@ def print_nan_gradients(self): model = self.get_model() for param in model.parameters(): if torch.isnan(param.grad.float()).any(): - print(param, param.grad) + logging.info(param, param.grad) def configure_accumulated_gradients(self, accumulate_grad_batches): self.accumulate_grad_batches = None diff --git a/tests/test_a_restore_models.py b/tests/test_a_restore_models.py index 5b747aecb507f..22ef9f116b8c1 100644 --- a/tests/test_a_restore_models.py +++ b/tests/test_a_restore_models.py @@ -1,4 +1,5 @@ import os +import logging import pytest import torch @@ -44,7 +45,7 @@ def test_running_test_pretrained_model_ddp(): result = trainer.fit(model) exp = logger.experiment - print(os.listdir(exp.get_data_path(exp.name, exp.version))) + logging.info(os.listdir(exp.get_data_path(exp.name, exp.version))) # correct result and ok accuracy assert result == 1, 'training failed to complete' From 3076fb8c3d15fc70cb06a61664ce135388e7f91a Mon Sep 17 00:00:00 2001 From: Ir1d Date: Tue, 5 Nov 2019 16:36:06 +0800 Subject: [PATCH 2/6] always use logging.info --- .../basic_examples/lightning_module_template.py | 6 +++--- pytorch_lightning/logging/base.py | 12 ------------ 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/pl_examples/basic_examples/lightning_module_template.py b/pl_examples/basic_examples/lightning_module_template.py index 43ca691448dab..c462cc03576f0 100644 --- a/pl_examples/basic_examples/lightning_module_template.py +++ b/pl_examples/basic_examples/lightning_module_template.py @@ -214,17 +214,17 @@ def __dataloader(self, train): @pl.data_loader def train_dataloader(self): - self.logger.info('training data loader called') + logging.info('training data loader called') return self.__dataloader(train=True) @pl.data_loader def val_dataloader(self): - self.logger.info('val data loader called') + logging.info('val data loader called') return self.__dataloader(train=False) @pl.data_loader def test_dataloader(self): - self.logger.info('test data loader called') + logging.info('test data loader called') return self.__dataloader(train=False) @staticmethod diff --git a/pytorch_lightning/logging/base.py b/pytorch_lightning/logging/base.py index c2a70e820bfa8..d7eb801cfbf63 100644 --- a/pytorch_lightning/logging/base.py +++ b/pytorch_lightning/logging/base.py @@ -70,15 +70,3 @@ def rank(self, value): def version(self): """Return the experiment version""" return None - - def info(self, msg): - """ - log msg using level 'INFO' - """ - logging.info(msg) - - def debug(self, msg): - """ - log msg using level 'DEBUG' - """ - logging.debug(msg) From 173d38659e9189d8fb81a9bf02b11f5fb2ee9842 Mon Sep 17 00:00:00 2001 From: Ir1d Date: Tue, 5 Nov 2019 16:51:02 +0800 Subject: [PATCH 3/6] use f-strings --- README.md | 2 +- .../lightning_module_template.py | 1 + pytorch_lightning/callbacks/pt_callbacks.py | 37 +++++++++---------- pytorch_lightning/trainer/ddp_mixin.py | 2 +- pytorch_lightning/trainer/trainer_io.py | 4 +- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 97a0f9a89c589..f0cd30db5d40c 100644 --- a/README.md +++ b/README.md @@ -164,7 +164,7 @@ trainer = Trainer(max_nb_epochs=1, train_percent_check=0.1) trainer.fit(model) # view tensorboard logs -logging.info('View tensorboard logs by running\ntensorboard --logdir %s' % os.getcwd()) +logging.info(f'View tensorboard logs by running\ntensorboard --logdir {os.getcwd()}') logging.info('and going to http://localhost:6006 on your browser') ``` diff --git a/pl_examples/basic_examples/lightning_module_template.py b/pl_examples/basic_examples/lightning_module_template.py index c462cc03576f0..8a892d1059521 100644 --- a/pl_examples/basic_examples/lightning_module_template.py +++ b/pl_examples/basic_examples/lightning_module_template.py @@ -2,6 +2,7 @@ Example template for defining a system """ import os +import logging from argparse import ArgumentParser from collections import OrderedDict diff --git a/pytorch_lightning/callbacks/pt_callbacks.py b/pytorch_lightning/callbacks/pt_callbacks.py index 7182fafe40165..ca6e38bc2b968 100644 --- a/pytorch_lightning/callbacks/pt_callbacks.py +++ b/pytorch_lightning/callbacks/pt_callbacks.py @@ -1,6 +1,7 @@ import os import shutil import logging +import warnings import numpy as np from pytorch_lightning.pt_overrides.override_data_parallel import LightningDistributedDataParallel @@ -91,7 +92,7 @@ def __init__(self, monitor='val_loss', self.stopped_epoch = 0 if mode not in ['auto', 'min', 'max']: - logging.info('EarlyStopping mode %s is unknown, fallback to auto mode.' % mode) + logging.info(f'EarlyStopping mode {mode} is unknown, fallback to auto mode.') mode = 'auto' if mode == 'min': @@ -121,10 +122,10 @@ def on_epoch_end(self, epoch, logs=None): current = logs.get(self.monitor) stop_training = False if current is None: - logging.info( - 'Early stopping conditioned on metric `%s` ' - 'which is not available. Available metrics are: %s' % - (self.monitor, ','.join(list(logs.keys()))), RuntimeWarning) + warnings.warn( + f'Early stopping conditioned on metric `{self.monitor}` ' + f'which is not available. Available metrics are: {",".join(list(logs.keys()))}', + RuntimeWarning) stop_training = True return stop_training @@ -142,7 +143,7 @@ def on_epoch_end(self, epoch, logs=None): def on_train_end(self, logs=None): if self.stopped_epoch > 0 and self.verbose > 0: - logging.info('Epoch %05d: early stopping' % (self.stopped_epoch + 1)) + logging.info(f'Epoch {self.stopped_epoch + 1:05d}: early stopping') class ModelCheckpoint(Callback): @@ -188,9 +189,9 @@ def __init__(self, filepath, monitor='val_loss', verbose=0, self.prefix = prefix if mode not in ['auto', 'min', 'max']: - logging.info( - 'ModelCheckpoint mode %s is unknown, ' - 'fallback to auto mode.' % (mode), RuntimeWarning) + warnings.warn( + f'ModelCheckpoint mode {mode} is unknown, ' + 'fallback to auto mode.', RuntimeWarning) mode = 'auto' if mode == 'min': @@ -234,28 +235,26 @@ def on_epoch_end(self, epoch, logs=None): if self.save_best_only: current = logs.get(self.monitor) if current is None: - logging.info( - 'Can save best model only with %s available,' - ' skipping.' % (self.monitor), RuntimeWarning) + warnings.warn( + f'Can save best model only with {self.monitor} available,' + ' skipping.', RuntimeWarning) else: if self.monitor_op(current, self.best): if self.verbose > 0: logging.info( - '\nEpoch %05d: %s improved from %0.5f to %0.5f,' - ' saving model to %s' - % (epoch + 1, self.monitor, self.best, - current, filepath)) + f'\nEpoch {epoch + 1:05d}: {self.monitor} improved' + f' from {self.best:0.5f} to {current:0.5f},', + f' saving model to {filepath}') self.best = current self.save_model(filepath, overwrite=True) else: if self.verbose > 0: logging.info( - '\nEpoch %05d: %s did not improve' % - (epoch + 1, self.monitor)) + f'\nEpoch {epoch + 1:05d}: {self.monitor} did not improve') else: if self.verbose > 0: - logging.info('\nEpoch %05d: saving model to %s' % (epoch + 1, filepath)) + logging.info(f'\nEpoch {epoch + 1:05d}: saving model to {filepath}') self.save_model(filepath, overwrite=False) diff --git a/pytorch_lightning/trainer/ddp_mixin.py b/pytorch_lightning/trainer/ddp_mixin.py index 09fd7fd2786e7..9f6c1ad4199b5 100644 --- a/pytorch_lightning/trainer/ddp_mixin.py +++ b/pytorch_lightning/trainer/ddp_mixin.py @@ -60,7 +60,7 @@ def set_distributed_mode(self, distributed_backend, nb_gpu_nodes): 'To silence this warning set distributed_backend=ddp' warnings.warn(w) - logging.info('gpu available: {}, used: {}'.format(torch.cuda.is_available(), self.on_gpu)) + logging.info(f'gpu available: {torch.cuda.is_available()}, used: {self.on_gpu}') def configure_slurm_ddp(self, nb_gpu_nodes): self.is_slurm_managing_tasks = False diff --git a/pytorch_lightning/trainer/trainer_io.py b/pytorch_lightning/trainer/trainer_io.py index 169954a51c860..11bbb1d55045a 100644 --- a/pytorch_lightning/trainer/trainer_io.py +++ b/pytorch_lightning/trainer/trainer_io.py @@ -122,12 +122,12 @@ def sig_handler(self, signum, frame): cmd = 'scontrol requeue {}'.format(job_id) # requeue job - logging.info('\nrequeing job {}...'.format(job_id)) + logging.info('\nrequeing job {job_id}...') result = call(cmd, shell=True) # print result text if result == 0: - logging.info('requeued exp ', job_id) + logging.info('requeued exp {job_id}') else: logging.info('requeue failed...') From 7500e988cd4452adca60fc0175123d9bc58d5dfb Mon Sep 17 00:00:00 2001 From: Ir1d Date: Tue, 5 Nov 2019 17:38:02 +0800 Subject: [PATCH 4/6] update code style --- pytorch_lightning/callbacks/pt_callbacks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pytorch_lightning/callbacks/pt_callbacks.py b/pytorch_lightning/callbacks/pt_callbacks.py index ca6e38bc2b968..2c1553d493974 100644 --- a/pytorch_lightning/callbacks/pt_callbacks.py +++ b/pytorch_lightning/callbacks/pt_callbacks.py @@ -123,8 +123,8 @@ def on_epoch_end(self, epoch, logs=None): stop_training = False if current is None: warnings.warn( - f'Early stopping conditioned on metric `{self.monitor}` ' - f'which is not available. Available metrics are: {",".join(list(logs.keys()))}', + f'Early stopping conditioned on metric `{self.monitor}`' + f' which is not available. Available metrics are: {",".join(list(logs.keys()))}', RuntimeWarning) stop_training = True return stop_training From ded78ddc2a847fbb452fb938cd8c8d9af1daba15 Mon Sep 17 00:00:00 2001 From: Ir1d Date: Tue, 5 Nov 2019 17:38:20 +0800 Subject: [PATCH 5/6] set logging configs --- pytorch_lightning/trainer/trainer.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pytorch_lightning/trainer/trainer.py b/pytorch_lightning/trainer/trainer.py index 7ac188b20a762..eebba265c354b 100644 --- a/pytorch_lightning/trainer/trainer.py +++ b/pytorch_lightning/trainer/trainer.py @@ -235,6 +235,9 @@ def __init__(self, self.amp_level = amp_level self.init_amp(use_amp) + # set logging options + logging.basicConfig(level=logging.INFO) + @property def slurm_job_id(self): try: From 35df142ee1bf05cd2221aa00b63b4c593332e91a Mon Sep 17 00:00:00 2001 From: Ir1d Date: Tue, 5 Nov 2019 17:39:38 +0800 Subject: [PATCH 6/6] remove unused code --- pytorch_lightning/logging/base.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pytorch_lightning/logging/base.py b/pytorch_lightning/logging/base.py index d7eb801cfbf63..351b945e856f7 100644 --- a/pytorch_lightning/logging/base.py +++ b/pytorch_lightning/logging/base.py @@ -1,5 +1,4 @@ from functools import wraps -import logging def rank_zero_only(fn):