问题描述
我并行化了一个 cpu 密集型任务,它需要一个大的嵌套列表作为只读输入。为避免嵌套列表重复复制到进程中,我希望通过共享内存访问该对象。
我正在 64 位 Windows 机器上工作,使用 Python 3.8.5(默认,2020 年 9 月 3 日,21:29:08)[MSC v.1916 64 位 (AMD64)] 和 Spyder 4.2.1。
我已经测试了通过 ray.put(foo)
实现共享内存,其中 foo
代表一个大型嵌套列表。但是,从任务管理器中,我推断嵌套列表被复制到每个进程中。
我想知道 Ray 是否提供了替代解决方案。在接下来的内容中,我将展示一个最小的示例来展示我的用例。
import numpy as np
import ray
import sys
import time
@ray.remote
def toy_function(x,nested_list):
for i in range(5* 10**4):
m1 = np.random.random((50,50))
matrix = m1 @ np.transpose(m1)
sol = np.linalg.inv(matrix)
result = x + nested_list[0][0]
return result
if __name__ == "__main__":
ray.init(num_cpus=5)
# Create a nested list
N = 10**8
nested_list = [list(range(2*N)),list(range(3*N))]
nested_list_id = ray.put(nested_list)
t0 = time.time()
result = ray.get([toy_function.remote(i,nested_list_id) for i in range(5)])
t1 = time.time() - t0
print(f"Execution time: {t1} sec.")
ray.shutdown()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)