python - Ray:在Python脚本中多次调用tune.run()时的内存管理

标签 python memory-management reinforcement-learning ray

我有一个 python 脚本,它使用库 rayrllib 等来训练强化学习模型。该脚本使用检查点来迭代更新 rllib.PPO 模型。在每次迭代中,我都会重新定义配置并调用tune.run(),其中我将上一次迭代的检查点提供给恢复变量。对于每次调用 tune.run(),我只请求一名工作人员。在进入循环之前我初始化ray并请求大量资源。

问题在于内存快速增加,直到 ray 提示工作人员没有足够的内存并停止运行。使用 htop,我可以看到我的 python 脚本在前 10 次迭代中从 6% 上升到 80%。我想知道如何在每次迭代结束时释放资源,以便内存使用量不会随着运行时间的增加而增加。

这是我的脚本的(伪)代码:

初始化射线

ray.init(object_store_memory=50000000000,内存=50000000000)

训练循环

for iteration in range(niterations):
  new_config = ...
  prev_checkpoint = ...
  tune.run('PPO', restore= prev_checkpoint, config=new_config)    

正如你所看到的,我目前没有做任何事情来释放资源。此外,在循环内调用 ray.init() 会给出错误,表明无法多次调用它。最后,在开始时请求更多内存是不可能的,也不能解决问题,因为我想在保持内存使用量不变的情况下执行数千次迭代。

最佳答案

啊,我解决了这个问题。调用tune.run()后不需要释放任何资源,内存问题是由于在每次迭代中构建 tensorflow 图造成的。我意识到,非常烦人的是,释放由tensorflow分配的资源的唯一方法是终止python解释器(关闭tensorflow session 并不会释放它们)。因此,我编写了一个用于构建和训练该图的脚本,我将其称为“os.system()”。相当hacky,但我不知道有任何其他解决方案。

关于python - Ray:在Python脚本中多次调用tune.run()时的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58861916/

相关文章:

python - 无法通过pip安装pylibmc

python - 在 PyCLIPS 中注册 Python 方法的装饰器

python - 训练的 Tensorflow CNN 回归 MSE 高于测试

c++ - 内存要求 : N-point FFT (getting error)

python - 如何用分类神经网络训练不良奖励?

python - 有没有办法在 Pymunk 中实现静摩擦力

c - Realloc 导致堆损坏

C++双向关联内存管理策略

reinforcement-learning - 如何理解 Sutton&Barto 的 RL 书中 Watkins 的 Q(λ) 学习算法?

python - 如何将自定义 Openai 健身房环境与 Openai 稳定基线 RL 算法结合使用?