与 Ray 共享内存

问题描述

我并行化了一个 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 (将#修改为@)