使用 Ray 和 Python 优化并行大字符串列表处理

问题描述

我对 Python 和 Ray 还是很陌生,我查看了教程和谷歌,但是 没有人能回答我的以下问题。我的代码如下所示:

@ray.remote
    def calculate_stuff(sequence): # computationally intensive function calling on external SWIG wrapped C-Code
        fc = external_function(sequence)
        return fc

    ray.init()
    result_ids = []
    
    for i in permutlist: # permutlist is large list containing large strings (300 - 1000 chars)
        result_ids.append(calculate_stuff.remote(i))
    
    allmfe = ray.get(result_ids)

我担心这段代码很慢,因为calculate_stuff 的每次迭代都需要访问一个大的字符串列表(数千万,最多1000 个字符)。 Ray 是否通过调用 ray.put() 将列表存储在对象存储中来自动优化?

我想出了以下代码来确保字符串在对象存储中:

result_ids = []
r_permutlistID = []

for x in range(0,len(permutlist)):
    ID = ray.put(permutlist[x])
    r_permutlistID.append(ID)


    for y in range(0,len(permutlist)):  # permutlist is large list containing large strings (300 - 1000 chars)
        result_ids.append(calculate_stuff.remote(ray.get(r_permutlistID[y])))

    allmfe = ray.get(result_ids)

但是,我担心调用 ray.get() 会影响性能,因为它是同步的。 我的第二个代码块确实获得了轻微的性能提升,但我担心一旦我将其扩展到集群后它的性能如何。

欢迎任何关于我如何确保 Ray 工作人员尽快访问这一大块字符串的建议!谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)