Skip to content

Commit b9a8f74

Browse files
committed
Fix pickling error with CSVLogger (#10388)
* Don't store csv.Dictwriter in ExperimentWriter * Add test for pickle after .save() * Add entry in changelog
1 parent df5081f commit b9a8f74

File tree

3 files changed

+8
-3
lines changed

3 files changed

+8
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
1212
- Fixed `apply_to_collection(defaultdict)` ([#10316](https://github.com/PyTorchLightning/pytorch-lightning/issues/10316))
1313
- Fixed failure when `DataLoader(batch_size=None)` is passed ([#10345](https://github.com/PyTorchLightning/pytorch-lightning/issues/10345))
1414
- Fixed interception of `__init__` arguments for sub-classed DataLoader re-instantiation in Lite ([#10334](https://github.com/PyTorchLightning/pytorch-lightning/issues/10334))
15+
- Fixed issue with pickling `CSVLogger` after a call to `CSVLogger.save` ([#10388](https://github.com/PyTorchLightning/pytorch-lightning/pull/10388))
1516

1617

1718
## [1.5.0] - 2021-11-02

pytorch_lightning/loggers/csv_logs.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ def save(self) -> None:
9595
metrics_keys = list(last_m.keys())
9696

9797
with open(self.metrics_file_path, "w", newline="") as f:
98-
self.writer = csv.DictWriter(f, fieldnames=metrics_keys)
99-
self.writer.writeheader()
100-
self.writer.writerows(self.metrics)
98+
writer = csv.DictWriter(f, fieldnames=metrics_keys)
99+
writer.writeheader()
100+
writer.writerows(self.metrics)
101101

102102

103103
class CSVLogger(LightningLoggerBase):

tests/loggers/test_all.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,10 @@ def _test_loggers_pickle(tmpdir, monkeypatch, logger_class):
263263
# the logger needs to remove it from the state before pickle
264264
_ = logger.experiment
265265

266+
# logger also has to avoid adding un-picklable attributes to self in .save
267+
logger.log_metrics({"a": 1})
268+
logger.save()
269+
266270
# test pickling loggers
267271
pickle.dumps(logger)
268272

0 commit comments

Comments
 (0)