From da1591ca6ccd53be748e1661ebb7844c5cdd1334 Mon Sep 17 00:00:00 2001 From: YuriCat Date: Tue, 1 Jun 2021 21:14:41 +0900 Subject: [PATCH 1/2] fix: lazy memory limit --- handyrl/train.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/handyrl/train.py b/handyrl/train.py index cb2e4ffb..a7cb6317 100755 --- a/handyrl/train.py +++ b/handyrl/train.py @@ -489,13 +489,12 @@ def feed_episodes(self, episodes): self.generation_results[model_id] = n + 1, r + outcome, r2 + outcome ** 2 # store generated episodes - mem = psutil.virtual_memory() - mem_used_ratio = mem.used / mem.total - mem_ok = mem_used_ratio <= 0.95 - maximum_episodes = self.args['maximum_episodes'] if mem_ok else len(self.trainer.episodes) + mem_percent = psutil.virtual_memory().percent + mem_ok = mem_percent <= 95 + maximum_episodes = self.args['maximum_episodes'] if mem_ok else int(len(self.trainer.episodes) * 95 / mem_percent) if not mem_ok and 'memory_over' not in self.flags: - warnings.warn("memory usage %.1f%% with buffer size %d" % (mem_used_ratio * 100, len(self.trainer.episodes))) + warnings.warn("memory usage %.1f%% with buffer size %d" % (mem_percent, len(self.trainer.episodes))) self.flags.add('memory_over') self.trainer.episodes.extend([e for e in episodes if e is not None]) From 52917125ab83dee4b246f373e8df3718862f0d33 Mon Sep 17 00:00:00 2001 From: YuriCat Date: Tue, 1 Jun 2021 21:23:08 +0900 Subject: [PATCH 2/2] feature: change order of storing episode and free memories --- handyrl/train.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/handyrl/train.py b/handyrl/train.py index a7cb6317..30df4464 100755 --- a/handyrl/train.py +++ b/handyrl/train.py @@ -489,6 +489,8 @@ def feed_episodes(self, episodes): self.generation_results[model_id] = n + 1, r + outcome, r2 + outcome ** 2 # store generated episodes + self.trainer.episodes.extend([e for e in episodes if e is not None]) + mem_percent = psutil.virtual_memory().percent mem_ok = mem_percent <= 95 maximum_episodes = self.args['maximum_episodes'] if mem_ok else int(len(self.trainer.episodes) * 95 / mem_percent) @@ -497,7 +499,6 @@ def feed_episodes(self, episodes): warnings.warn("memory usage %.1f%% with buffer size %d" % (mem_percent, len(self.trainer.episodes))) self.flags.add('memory_over') - self.trainer.episodes.extend([e for e in episodes if e is not None]) while len(self.trainer.episodes) > maximum_episodes: self.trainer.episodes.popleft()