如何解决如何在 Ray 中与多人共享内存
我在 linux 上工作,使用 python 3.8.5,这是我的代码:
oaglog.logger.info("begin to read graph。。。")
graph = renamed_load(open(os.path.join(ABSULUTE_DIR + args.data_dir,'graph%s.pk' % args.domain),'rb'))
oaglog.logger.info("read graph successed。")
ray_graph = ray.put(graph)
@ray.remote
class Counter(object):
def __init__(self,a):
self.n = 0
self.a = a
def increment(self):
self.n += 1
def read(self,b,m_graph):
print("a")
self.increment()
print(id(m_graph))
del m_graph
return self.n * b
counters = [Counter.remote(a=0) for i in range(8)]
futures = [c.read.remote(2,ray_graph) for c in counters]
print('******************************')
print(ray.get(futures))
因为图很大(大约9Gb),所以我想把它放到共享内存中,我尝试了ray.put(),但是失败了,图被复制了8次,我想知道Ray是否提供了替代方案解决方案?
解决方法
图形被复制是因为它是一个任意的 python 对象,并且被复制是因为你的每个演员都可能试图修改他们的副本。
Ray 能够避免为某些类型的 objects which can be loaded in a read-only way 复制 Python 对象。
如果您可以将图形表示为一个 numpy 数组,它会自动作为只读 numpy 数组加载到您的每个 actor 中,并且不会被复制。
您也可以自己为您的对象实施带外泡菜反序列化,which is a bit more tricky。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。