Python Ray共享内存访问

问题描述

我有一个关于在Ray Framework中访问共享内存的问题。
想象一下在 1台计算机上的以下设置:

  1. 启动Ray集群
  2. 启动进程/工作者python脚本 w1.py ,该脚本通过 ray.put(O1)将对象 O1 放入共享内存中>
  3. 启动进程/工作者python脚本 w2.p y,该脚本尝试通过 ray.get(...)从共享内存中获取 O1

是否有一种方法可以从另一个工作进程 w2.py 访问对象 O1 (从 w1.py 进程放入共享内存) >?

当我从 w2.py 执行 ray.objects()时,我得到对象引用字符串,但是那又如何从共享内存中检索对象呢?我无法在 w2.py

中初始化 ObjectRef对象

解决方法

本机不支持。原因是ray的对象具有用于各种功能(例如性能优化或使用引用计数的自动内存管理)的各种元数据。

如果您想实现这一目标,我认为有两种解决方案。

  1. 使用独立的actor api。分离演员是指终身不与驾驶员共享票价的演员。创建独立的actor之后,您可以使用ray.get_actor API获取actor句柄。这样,您可以将对象放置在独立的actor中,并可以从多个驱动程序进行访问。

  2. 还有另一种使用cloudpickle的方法,但是我对这种解决方案并不熟悉,所以我不会写它。请访问Ray在其Github存储库中的讨论页面,以询问有关它的更多详细信息。