在 Ray 中的演员之间共享对象
Share object between actors in Ray
如何从多个参与者读取和写入同一个对象的数据?
文档说:
https://docs.ray.io/en/master/memory-management.html
import numpy as np
a = ray.put(np.zeros(1))
b = ray.get(a)
但这会产生新的副本。
在 actor 之间使用全局变量的正确方法(您可以 read/write)是使用持有对象的 actor。 https://docs.google.com/document/d/167rnnDFIVRhHhK4mznEIemOtj63IOhtIPvSYaPgI4Fg/edit#heading=h.eg7m6lz2y48u
Plasma 对象是不可变的,只有在将对象复制到 worker 的堆内存后才能修改对象(这意味着此时它不再是全局的)。
另请注意,对于您的示例,它不会创建新副本!它使用称为零拷贝读取的东西(https://www.python.org/dev/peps/pep-0574/),这意味着仅复制带内数据(numpy 对象的元数据),而带外数据(缓冲区)不会复制到您的 python的堆内存(驻留在共享内存中,你的ray程序直接指向那个内存区域)。
如何从多个参与者读取和写入同一个对象的数据?
文档说: https://docs.ray.io/en/master/memory-management.html
import numpy as np
a = ray.put(np.zeros(1))
b = ray.get(a)
但这会产生新的副本。
在 actor 之间使用全局变量的正确方法(您可以 read/write)是使用持有对象的 actor。 https://docs.google.com/document/d/167rnnDFIVRhHhK4mznEIemOtj63IOhtIPvSYaPgI4Fg/edit#heading=h.eg7m6lz2y48u
Plasma 对象是不可变的,只有在将对象复制到 worker 的堆内存后才能修改对象(这意味着此时它不再是全局的)。
另请注意,对于您的示例,它不会创建新副本!它使用称为零拷贝读取的东西(https://www.python.org/dev/peps/pep-0574/),这意味着仅复制带内数据(numpy 对象的元数据),而带外数据(缓冲区)不会复制到您的 python的堆内存(驻留在共享内存中,你的ray程序直接指向那个内存区域)。