Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ray:在python脚本中多次调用tune.run()时的内存管理_Python_Memory Management_Reinforcement Learning_Ray - Fatal编程技术网

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

Ray:在python脚本中多次调用tune.run()时的内存管理,python,memory-management,reinforcement-learning,ray,Python,Memory Management,Reinforcement Learning,Ray,我有一个python脚本,它使用库ray和rllib训练强化学习模型。脚本使用检查点迭代更新rllib.PPO模型。在每次迭代中,我都会重新定义配置并调用tune.run(),在这里我将上一次迭代的检查点提供给restore变量。对于对tune.run()的每次调用,我只请求一个worker。在进入循环之前,我初始化ray并请求大量资源 问题是内存增长很快,直到ray抱怨工作人员没有足够的内存并停止工作。使用htop,我可以看到python脚本在前10次迭代中从6%变为80%。我想知道如何在每次

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

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

以下是我脚本的(伪)代码:

初始化光线
ray.init(对象存储内存=50000000000,内存=50000000000)

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

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

也许可以使用
ray.remote(max_calls=1)
函数在PythonLand中运行TensorFlow会话,但可以解决内存问题?有什么消息吗?我希望最终有一个更好的解决方案。
for iteration in range(niterations):
  new_config = ...
  prev_checkpoint = ...
  tune.run('PPO', restore= prev_checkpoint, config=new_config)