Fix memory leak in base_class.py (#1908)

* Fix memory leak in base_class.py

Loading the data return value is not necessary since it is unused. Loading the data causes a memory leak through the ep_info_buffer variable. I found this while loading a PPO learner from storage on a multi-GPU system since the ep_info_buffer is loaded to the memory location it was on while it was saved to disk, instead of the target loading location, and is then not cleaned up.

* Update changelog.rst

* Update changelog

---------

Co-authored-by: Antonin RAFFIN <antonin.raffin@ensta.org>
This commit is contained in:
Ole Petersen 2024-05-15 15:59:32 +02:00 committed by GitHub
parent 4317c62598
commit 6c00565778
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 7 additions and 5 deletions

View file

@ -3,7 +3,7 @@
Changelog
==========
Release 2.4.0a0 (WIP)
Release 2.4.0a1 (WIP)
--------------------------
Breaking Changes:
@ -14,6 +14,8 @@ New Features:
Bug Fixes:
^^^^^^^^^^
- Fixed memory leak when loading learner from storage, ``set_parameters()`` does not try to load the object data anymore
and only loads the PyTorch parameters (@peteole)
- Cast type in compute gae method to avoid error when using torch compile (@amjames)
`SB3-Contrib`_
@ -30,7 +32,7 @@ Deprecations:
Others:
^^^^^^^
- Fix various typos (@cschindlbeck)
- Fixed various typos (@cschindlbeck)
Bug Fixes:
^^^^^^^^^^
@ -1659,4 +1661,4 @@ And all the contributors:
@anand-bala @hughperkins @sidney-tio @AlexPasqua @dominicgkerr @Akhilez @Rocamonde @tobirohrer @ZikangXiong @ReHoss
@DavyMorgan @luizapozzobon @Bonifatius94 @theSquaredError @harveybellini @DavyMorgan @FieteO @jonasreiher @npit @WeberSamuel @troiganto
@lutogniew @lbergmann1 @lukashass @BertrandDecoster @pseudo-rnd-thoughts @stefanbschneider @kyle-he @PatrickHelm @corentinlger
@marekm4 @stagoverflow @rushitnshah @markscsmith @NickLucche @cschindlbeck
@marekm4 @stagoverflow @rushitnshah @markscsmith @NickLucche @cschindlbeck @peteole

View file

@ -592,7 +592,7 @@ class BaseAlgorithm(ABC):
if isinstance(load_path_or_dict, dict):
params = load_path_or_dict
else:
_, params, _ = load_from_zip_file(load_path_or_dict, device=device)
_, params, _ = load_from_zip_file(load_path_or_dict, device=device, load_data=False)
# Keep track which objects were updated.
# `_get_torch_save_params` returns [params, other_pytorch_variables].

View file

@ -1 +1 @@
2.4.0a0
2.4.0a1