我开始使用ray进行分布式机器学习,但是我已经遇到了一些问题。
直到程序崩溃,内存使用率一直在增长。尽管我不断地清除列表,但内存以某种方式泄漏。知道为什么吗?
我的规范:
操作系统平台和发行版:Ubuntu 16.04
从以下位置安装Ray:
射线版本:0.6.5
的Python版本:3.6.8
我已经尝试使用实验性队列而不是DataServer类,但是问题仍然相同。
import numpy as np
import ray
import time
ray.init(redis_max_memory=100000000)
@ray.remote
class Runner():
def __init__(self, dataList):
self.run(dataList)
def run(self,dataList):
while True:
dataList.put.remote(np.ones(10))
@ray.remote
class Optimizer():
def __init__(self, dataList):
self.optimize(dataList)
def optimize(self,dataList):
while True:
dataList.pop.remote()
@ray.remote
class DataServer():
def __init__(self):
self.dataList= []
def put(self,data):
self.dataList.append(data)
def pop(self):
if len(self.dataList) !=0:
return self.dataList.pop()
def get_size(self):
return len(self.dataList)
dataServer = DataServer.remote()
runner = Runner.remote(dataServer)
optimizer1 = Optimizer.remote(dataServer)
optimizer2 = Optimizer.remote(dataServer)
while True:
time.sleep(1)
print(ray.get(dataServer.get_size.remote()))
运行一段时间后,我收到此错误消息:
最佳答案
我怀疑我们的问题可能是相似的。
我在Spyder中编写代码,该代码显示了右下角使用的内存百分比。每次运行相同的程序时,我注意到该百分比值以3%的增量增加(基于我拥有的8 gig RAM)。这使我想知道ray是否由于增量而存储了类似 session 的内容(每个对应于一个 session )。
事实证明确实如此。一个快速的解决方法是使用
ray.shutdown()
session 结束。但是,如果要运行它,则需要再次调用
ray.init()
。另外,请确保将其放置在正确的位置,以免在仍需要时不发出光线。这解决了随着脚本多次运行而增加内存使用量的问题。
我不太了解雷。我只是觉得使用方便。话虽如此,
ray.init()
具有与各种类型的adress有关的各种参数。我确信必须有一种方法可以通过这些参数之一使ray在同一 session 上运行。我还没有尝试过任何尝试,因此是推测。也许您可以找出答案。关于python - 如何解决不断增长的ray内存使用问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55749394/