Python 光线对象存储正在使用out of core耗尽内存。如何配置像s3 bucket这样的外部对象存储?
通常,当对象存储区填满时,它开始逐出未使用的对象(以最近最少使用的方式)。但是,由于所有对象都是结果列表中保存的numpy数组,因此它们仍在使用中,并且这些numpy数组所在的内存实际上在对象存储中,因此它们占用了对象存储中的空间。在这些对象超出范围之前,对象存储无法逐出它们Python 光线对象存储正在使用out of core耗尽内存。如何配置像s3 bucket这样的外部对象存储?,python,ray,modin,Python,Ray,Modin,通常,当对象存储区填满时,它开始逐出未使用的对象(以最近最少使用的方式)。但是,由于所有对象都是结果列表中保存的numpy数组,因此它们仍在使用中,并且这些numpy数组所在的内存实际上在对象存储中,因此它们占用了对象存储中的空间。在这些对象超出范围之前,对象存储无法逐出它们 问:我如何指定一个像redis这样的外部对象存储而不在一台机器上超过内存?我不想使用/dev/shm或/tmp作为对象存储,因为只有有限的内存可用,而且它会很快填满从ray 1.2.0开始,支持对象溢出以支持核心外数据处理
问:我如何指定一个像redis这样的外部对象存储而不在一台机器上超过内存?我不想使用/dev/shm或/tmp作为对象存储,因为只有有限的内存可用,而且它会很快填满从ray 1.2.0开始,支持对象溢出以支持核心外数据处理。从1.3+(将在3周后发布)开始,此功能将默认打开 但您的示例无法使用此功能。让我在这里解释一下原因 有两件事你需要知道
ref=f.remote()
打印(参考)
ray.get
时,现在python变量直接访问内存(在ray中,它将位于共享内存中,如果对象大小大于等于100KB,则由一个名为plasma store的分布式对象存储管理)。所以obj=ray.get(ref)#现在,obj直接指向共享内存。
目前,对象溢出特性支持1种情况下的磁盘溢出,但不支持2种情况下的磁盘溢出(如果您认为2更难支持)
这里有两种解决方案
ray.init(_plasma_directory=“/tmp”)
这将允许您将tmp
文件夹用作plasma存储(意味着光线对象存储在tmp文件系统中)。注意:使用此选项时,可能会看到性能下降
ray.get
获取所有光线对象,而是使用ray.wait
导入光线
将numpy作为np导入
#注意:如果使用最新的主控形状,则无需指定此项。
雷·伊尼特(
_系统配置={
“自动对象溢出启用”:True,
“对象溢出配置”:json.dumps(
{“type”:“filesystem”,“params”:{“directory_path”:“/tmp/spill”},
)
},
)
@雷,遥控器
def():
返回np.零(10000000)
结果_refs=[]
对于范围(100)内的i:
印刷品(一)
结果_refs+=[f.remote()表示范围内的u(50)]
而结果参考:
[准备就绪],结果参考=光线。等待(结果参考)
结果=ray.get(准备就绪)
可能不是最好的解决方案,但是如果在调用ray.get
之后复制numpy数组,并在将它们附加到结果之前,它们将不再位于对象存储中。例如,<代码>结果+= [x.Copy](x).x中的x([f.Read())(范围为(50))] /<代码>。当然,在Python进程中,NUMPY数组仍然在内存中,因此在某个时间点内存会用完。请考虑重新发布。
import ray
import numpy as np
ray.init()
@ray.remote
def f():
return np.zeros(10000000)
results = []
for i in range(100):
print(i)
results += ray.get([f.remote() for _ in range(50)])