From efea6c165791e4953b59469e50f583d03d89bad2 Mon Sep 17 00:00:00 2001 From: Mauricio Villegas <5780272+mauvilsa@users.noreply.github.com> Date: Wed, 12 Jul 2023 11:53:39 +0200 Subject: [PATCH] Fix `LightningCLI` not saving correctly seed_everything for `run=True` (#18056) --- src/lightning/pytorch/CHANGELOG.md | 4 ++++ src/lightning/pytorch/cli.py | 5 ++++- tests/tests_pytorch/test_cli.py | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/lightning/pytorch/CHANGELOG.md b/src/lightning/pytorch/CHANGELOG.md index 831301a0f1e765..12a95c31edfb53 100644 --- a/src/lightning/pytorch/CHANGELOG.md +++ b/src/lightning/pytorch/CHANGELOG.md @@ -179,6 +179,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - Fixed FSDP re-applying activation checkpointing when the user had manually applied it already ([#18006](https://github.com/Lightning-AI/lightning/pull/18006)) + +- `LightningCLI` not saving correctly `seed_everything` when `run=True` and `seed_everything=True` ([#18056](https://github.com/Lightning-AI/lightning/pull/18056)) + + ## [2.0.3] - 2023-06-07 ### Changed diff --git a/src/lightning/pytorch/cli.py b/src/lightning/pytorch/cli.py index c1458c90debf0f..d657213391bd9b 100644 --- a/src/lightning/pytorch/cli.py +++ b/src/lightning/pytorch/cli.py @@ -691,7 +691,10 @@ def _set_seed(self) -> None: config_seed = seed_everything(workers=True) else: config_seed = seed_everything(config_seed, workers=True) - self.config["seed_everything"] = config_seed + if self.subcommand: + self.config[self.subcommand]["seed_everything"] = config_seed + else: + self.config["seed_everything"] = config_seed def _class_path_from_class(class_type: Type) -> str: diff --git a/tests/tests_pytorch/test_cli.py b/tests/tests_pytorch/test_cli.py index 5681189bc83e65..3236f4cbb96988 100644 --- a/tests/tests_pytorch/test_cli.py +++ b/tests/tests_pytorch/test_cli.py @@ -318,6 +318,23 @@ def test_lightning_cli_save_config_only_once(cleandir): cli.trainer.test(cli.model) # Should not fail because config already saved +def test_lightning_cli_save_config_seed_everything(cleandir): + config_path = Path("config.yaml") + cli_args = ["fit", "--seed_everything=true", "--trainer.logger=false", "--trainer.max_epochs=1"] + with mock.patch("sys.argv", ["any.py"] + cli_args): + cli = LightningCLI(BoringModel) + config = yaml.safe_load(config_path.read_text()) + assert isinstance(config["seed_everything"], int) + assert config["seed_everything"] == cli.config.fit.seed_everything + + cli_args = ["--seed_everything=true", "--trainer.logger=false"] + with mock.patch("sys.argv", ["any.py"] + cli_args): + cli = LightningCLI(BoringModel, run=False) + config = yaml.safe_load(config_path.read_text()) + assert isinstance(config["seed_everything"], int) + assert config["seed_everything"] == cli.config.seed_everything + + def test_save_to_log_dir_false_error(): with pytest.raises(ValueError): SaveConfigCallback(